From fa1fe3ead7069d90d3c67d62137ad66acfcc9f48 Mon Sep 17 00:00:00 2001 From: HARUYAMA Seigo Date: Sun, 27 Sep 2020 20:06:20 +0900 Subject: [PATCH 0001/1788] Restore first section title of INSTALL --- INSTALL | 1 + 1 file changed, 1 insertion(+) diff --git a/INSTALL b/INSTALL index ee621da43580..d97946fe0276 100644 --- a/INSTALL +++ b/INSTALL @@ -1,3 +1,4 @@ +1. Prerequisites ---------------- A C compiler. Any C89 or better compiler should work. Where supported, From a1a856d50c89be3206f320baa4bfb32fff4e826f Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Wed, 30 Sep 2020 09:11:39 +0000 Subject: [PATCH 0002/1788] upstream: Regen moduli. OpenBSD-Commit-ID: 04967f8c43e9854ac34b917bcd6f5ac96c53a693 --- moduli | 859 +++++++++++++++++++++++++++------------------------------ 1 file changed, 406 insertions(+), 453 deletions(-) diff --git a/moduli b/moduli index 85b70a13d672..6103e989cefc 100644 --- a/moduli +++ b/moduli @@ -1,454 +1,407 @@ -# $OpenBSD: moduli,v 1.27 2020/06/03 08:23:16 dtucker Exp $ +# $OpenBSD: moduli,v 1.28 2020/09/30 09:11:38 dtucker Exp $ # Time Type Tests Tries Size Generator Modulus -20200227022907 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A5D2A1AB -20200227023015 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A5E70AEB -20200227023031 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A5FCC5F3 -20200227023127 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A6503737 -20200227023144 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A66A2FBB -20200227023150 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A66D7443 -20200227023222 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A69A79BF -20200227023252 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A6CDB577 -20200227023257 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A6CE48A7 -20200227023317 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A6E457D3 -20200227023359 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A70D7E23 -20200227023546 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A76B9A27 -20200227023624 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A7957D9B -20200227023645 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A7A54E7B -20200227023732 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A7AA8E03 -20200227024118 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A83E307B -20200227024150 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A8735923 -20200227024216 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A890B0C3 -20200227024317 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A8ECA377 -20200227024323 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A8F09443 -20200227024339 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A9083FE3 -20200227024354 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A91CBC2B -20200227024401 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A92295AF -20200227024451 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A96B524F -20200227024519 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A9893C5F -20200227024616 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43A9DF0DE3 -20200227024648 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AA1356E7 -20200227024719 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AA391F8F -20200227024740 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AA5A232B -20200227024759 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AA76C92F -20200227024841 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AAB2E483 -20200227024942 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AB0D731B -20200227024953 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AB1A9FE7 -20200227025000 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AB22AF6F -20200227025133 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43ABA90D27 -20200227025147 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43ABBC77EB -20200227025251 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AC1EA27F -20200227025455 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43ACE67607 -20200227025504 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43ACEC2507 -20200227025617 2 6 100 2047 5 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AD55383F -20200227025658 2 6 100 2047 2 E5137884F699D3C3A5C899C39CE0DF08A0DECD4DCC6DAD746BDB407C8320AC77CA92EFCDE8EE708B23789C26A9DF03A9C1383CB3B0F8CE764F223899197124958E6C82CFE52CDA5F9DFDF1B89AF0F006F175049BA9055D8A9B3A6603018F2B00AD4524A7F699A5210047C116087FB2C186194F4DC78C95568B9A95CD29B4BD6BC8D71FF5D520E238693B41481C66EEB53CE30995CEF4835138A6A998EF39C879B3E3939FBC6CA7D1BCFCE7BDE8A9AA5CB7E00B7CD7FA83B754275B231FD808BB11A52E493BBC7CF063C19220D47448FDD6F72A7CC5799B3FFEC10D75C6240B378CAB489C2D3AB7E66D6921F0A4441A1CC0F7269EAAF775E8B2F24A43AD9D09CB -20200227025748 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD988C6223F -20200227025916 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD989456A23 -20200227025954 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98982F93B -20200227030134 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98A1A5BD7 -20200227030145 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98A276D4F -20200227030156 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98A35BBCB -20200227030205 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98A3A766F -20200227030254 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98A8957DB -20200227030322 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98AA57A4B -20200227030336 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98AB5D4FB -20200227030430 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98B0921AF -20200227030443 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98B1ADA93 -20200227030556 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98B8D5E93 -20200227030619 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98BA3DE33 -20200227030707 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98BF5B1FB -20200227030728 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98C0DCC3B -20200227030738 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98C19C5C3 -20200227030750 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98C2994E7 -20200227030837 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98C6D2993 -20200227030928 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98CB6E833 -20200227031020 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98CFA7F73 -20200227031051 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98D315F23 -20200227031130 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98D61499F -20200227031151 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98D7FD90F -20200227031214 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98D94476B -20200227031250 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98DD00E53 -20200227031339 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98E1E199F -20200227031416 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98E4B1F93 -20200227031635 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98F2240D3 -20200227031653 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98F3EADE3 -20200227031817 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98FB2594B -20200227031826 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98FB9CA6F -20200227031845 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD98FD75E3F -20200227031937 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD99022227B -20200227031944 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD990262A33 -20200227031950 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD9902A81E3 -20200227031955 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD9902AEB73 -20200227032012 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD990348E1B -20200227032023 2 6 100 2047 5 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD9903B6057 -20200227032120 2 6 100 2047 2 C3A05E8BC687376881415BEB6C1506DA767E191DB4C5F4C587A839B341C2271B95F1B52E48C5CFF818CECB2E9BFBD3DB4B282B0D334A4992CF173E7A66B94D8B55F15CB610D5287917131C7CF4D966572EA2E0F1D6A89DFB54FB8B73B9B504D095446B8BA1C2EF49C8BC60D0074E3A25D1EC67FF95FD26D0A60CE0D692E32CB7326A8E5F698179DDE616D758DCB3F9F100623B23A3CF1699914515F5F97476AD124229CE5745A94417339C5D15F406A7D1A6D7BAB235E50D4A998DBD52B72347DB4870BD4D7CD1D5BE6E1D8E54381298791146FFACA089A066C9304067CA0CB8CF493C89EFAEA9836553F05187BA74DE1D7862392B43A94D439B3FD9908EA19B -20200227032956 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA31DFAF3F -20200227033345 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3252345F -20200227033438 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA32676B4F -20200227033631 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA32A2AF93 -20200227033648 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA32A57513 -20200227033939 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA32FDB38B -20200227034338 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA337FBEBB -20200227034832 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA341DDB0F -20200227035633 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3531B9A3 -20200227035941 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA359F1EBB -20200227040026 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA35B2A26F -20200227040140 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA35D7858B -20200227040536 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA36567783 -20200227041037 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA36F6CA8F -20200227041504 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3785E44F -20200227041915 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3808D25F -20200227042019 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3824C37F -20200227042213 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA385DC613 -20200227042334 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA38849CEB -20200227043140 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA39923EB3 -20200227043516 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3A0635DB -20200227044359 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3B392D4F -20200227045601 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3CCCDC47 -20200227045738 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3CFCA5F3 -20200227045900 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3D24B39F -20200227050201 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3D83C633 -20200227050551 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3DFE5163 -20200227051236 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3ED9C2F7 -20200227051737 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3F7F3323 -20200227051844 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3FA0D7E7 -20200227052045 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3FDE75DB -20200227052157 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA3FFFCD0B -20200227052559 2 6 100 3071 5 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA407E7607 -20200227052656 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA40963EDB -20200227053254 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA415E3B2B -20200227053802 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA4208CBCB -20200227054020 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA424BC4CB -20200227054242 2 6 100 3071 2 DCBD1F34999D3EC980A7AEBD1943B18AFB4904E85DB641E8660A4AE3671C152EBB36BED44E5DA6D647F6232C29EE3FF3C20DFDB18D72B705E57F9B23636AF36E395D68651A0D223C816BF904E29134F49667D205B5EB03F613C24B65E386CB8EEE384AF41BDCF4373C885780C3AC2131584DF97F62A50C7E9169A52DC71B8D9F80FBFBEEC935C01D0375AD8BCA0E5C84A041D0BF80230D3AC15E09C2629326E59F70FAD8606BDFB3901284844D4C00155C48301F4E91384454852D47D2D0D992123E42130E6F1F45E429A4C52AFF03522B5C68307B4B1082E7868D8241D143A156C2E40F45A5E34C3D2397A91FF195C49DBABB490900238B6F5801B876EE1EC64D8E20F95C1F409F82D70C7C24DB5EEBACD6D56F0486E49DB009B859F2E757679D5499295783E1080C1369B373C481EA3295C9B8D46F8D10F29C50774959490DBD068D1A81BC118606BF8E58050B7F0D88929678D6A47FDAFE506D91FE5F61D4B2EC286CCF1AD616A875819C1BEE6536D24DAEB7DBAC87C2A7A771EA42946B7B -20200227054918 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46617A143 -20200227055927 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46766DBEB -20200227060242 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E467D1E903 -20200227060411 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E467F9B8CF -20200227060700 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E468561F7B -20200227060843 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46889B29F -20200227061342 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E469324A4F -20200227061525 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46967398B -20200227061630 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E469871133 -20200227061736 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E469A5C023 -20200227061919 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E469DFD25B -20200227062156 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46A4225DB -20200227062610 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46AE7835F -20200227062733 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46B158F5B -20200227063025 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46B8351EB -20200227063206 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46BBA58CB -20200227063226 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46BBEE61B -20200227063414 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46BFF08A3 -20200227063436 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46C048EDB -20200227063458 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46C0B9BA3 -20200227064340 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46D585367 -20200227064522 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46D8D449B -20200227064747 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46DD850B3 -20200227064951 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46E17A897 -20200227065115 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46E41058F -20200227070122 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46F9C7E5F -20200227070147 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46FA4963F -20200227070247 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E46FC0F617 -20200227070844 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E470861EE3 -20200227071233 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E471071DF3 -20200227072256 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E4726F3A13 -20200227072700 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E472F54A5B -20200227073459 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E47401DC37 -20200227073831 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E474725CAF -20200227074056 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E474BE84D7 -20200227074215 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E474E1A47F -20200227074642 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E47575BDFB -20200227074700 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E47579CADB -20200227075116 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E4760314A7 -20200227075407 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E4765B8EFB -20200227075829 2 6 100 3071 5 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E476EF083F -20200227075857 2 6 100 3071 2 EAF378AA0E2C586E9556B81261F829EE5A8F5F5E6E7A2FC92544555E006535C9EDABC5553D5FE43E8DC0886AC3788355B7B7B8FB8EE5220404D022955DBB3C1CFEB9E3163F80DE6DBECA51E2F2AB680799E4227F29894FA0343483021CF475957D82EBAB1F9E270F681A28DF7E37DDA5398B1DE5E0613048B7C52C349BEF4F11A7455D2322589F593160B2AEF33286DE2C267E6C17FC027253BE1CB1254231F8AB2B1232D37E8E4374D00BAF10FB961F88CD80406AC44EBCC29DEB857BE1F400EB532FC49B575379E56593CE3B609D6A19FAF9751A9BB30CFF6C0B2892612BC313F5966741E913B97BF060B8320734BC5030A9A33110E15967D826BAAC7CB3A2E3A0B818FEF3410BF0D5230D1BC7EC86798DBCA14544AC5D956CB0B08888EACCD57D1E50C48D6511E9FF562F177E03ED08219169FDD999FA75595D67081EEC8192AF3855CADEA45B0122F042D03E0599834190F5C5A5E0B2C414A65AB21B91D32DBFDF02C247D6F085C6AC55114A62D1EC6BA06964FE5283226B37E476FA748B -20200227082813 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB741DABA73 -20200227085254 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7435962FF -20200227085753 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB743A213E7 -20200227090042 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB743C75A03 -20200227090234 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB743DE5FFB -20200227090848 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7443ADF5B -20200227093007 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7458D5F63 -20200227094856 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB746B8906F -20200227101124 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7480F5003 -20200227101730 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7486988BB -20200227103113 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74937A0CB -20200227104420 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74A04F623 -20200227104854 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74A45CB4F -20200227110836 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74B74FEEB -20200227111613 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74BE3FB7F -20200227112749 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74C93FE2F -20200227114309 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74D83C6DF -20200227115500 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74E39954B -20200227115811 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74E610523 -20200227115926 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74E6BF7B3 -20200227121313 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74F3A3303 -20200227121624 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74F621F43 -20200227121855 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB74F826A0B -20200227123033 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7502D388B -20200227130625 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7525AE2F3 -20200227135640 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB755543337 -20200227140747 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB755FCE54B -20200227141645 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB756869BEF -20200227142156 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB756C91ECF -20200227143711 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75795756F -20200227144742 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75832B00F -20200227150218 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7590B9D1B -20200227150317 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75911AF63 -20200227153455 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75AFB3177 -20200227154347 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75B7E69BB -20200227154742 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75BB2636F -20200227155533 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75C283F5F -20200227155629 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75C2FB09B -20200227161922 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75D8A8C4B -20200227163034 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75E3342C7 -20200227163725 2 6 100 4095 5 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75E9424E7 -20200227165111 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB75F623DC3 -20200227170513 2 6 100 4095 2 DDFF38E32E0309D5459129AFA6C2F640C7125B85084C79BDD7042DA6E39D4A0DA4A671588016428ECAEC0F6BCC1A95E4B2BE518B7766CD0AC4674949D48B088492394DD9283C09D71CB4F4306E4CD27390575EBF2934E1C97AF880146F0D090DAB3AE1B679CF30AA52D307A8C64382C93F11AF73CAC171741A1C898CD79A680697D1A17A3D63F8C92A9C088E9E490D753D3A4811A8CAABEC2D80C62D66F56660995BC6D82BCCE18C4C6287B848F239C40467BB7EB3B7EB5489A7417D9DE8825FA86D16602AEF9BD3A523DB96B071C2BED3239B5C69AD772A39B18543F517F8BF49E6B5AE875A37E117010E8CA59947571DDC329FFD137998EC151B367525D0647001C4DADB2B95FBA9657A5619A0445E627EC6F71B4A3239E01ED76D85CBCAFFE92283E9408F770D9B8267DF5031C74C9F16CF43EB10881369DA46E692ACB2F94E9136FDA7FF58F54FFAD5749F79E5521D4358A0984AEC1B49C678FA6D6379905ABE4D245EBE854A09282945B4B62EDBDDF30954FBB9E40D751BBCD82ABE4BDC98274CB158F977802ED5E7F267A3F1EE0E6259215AD75798A6088D9AD6ACF4DF5DAA8474D1C8166AE244176D5AA2A7B2697C7C059DF78B07ACC2D47083F5058885E29FD9352243A5643C8237FBEF77F77AEEE32EC6455B4DB32A30ED02409FCBEF0C1C988876B0CBC85C89FA062824E1D35512E8C7731843CA7F6EB7602FCE73 -20200227171514 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921518EE99203 -20200227180811 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151924BA233 -20200227184341 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519490B137 -20200227184640 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB9215194B6E91B -20200227185707 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB9215195546D0B -20200227192438 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB9215196FF1A63 -20200227192937 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB9215197470C5F -20200227193545 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB9215197A3CACB -20200227193904 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB9215197CFA597 -20200227201541 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519A1D5807 -20200227201830 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519A3EDD33 -20200227202555 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519AAFD1D3 -20200227202936 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519AE21FCB -20200227203051 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519AEDB593 -20200227203917 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519B6FE6A3 -20200227205155 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519C3628EB -20200227210720 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519D1EC08B -20200227211425 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519D892927 -20200227211637 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519DA3F85B -20200227212024 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519DD7AC4F -20200227212617 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519E2E0AD3 -20200227213638 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519ECA5D23 -20200227213802 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519ED8B3EB -20200227215450 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB921519FDD53D3 -20200227221218 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A0ECC74F -20200227221341 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A0FA2D4B -20200227222437 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A19ED9DB -20200227223018 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A1F0CA5F -20200227223552 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A2441737 -20200227224041 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A2876443 -20200227225049 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A31D69A7 -20200227225259 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A337A56F -20200227225746 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A37D3827 -20200227230135 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A3AF483F -20200227230918 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A41FC5AB -20200227232340 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A4FCC2DF -20200227232424 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A4FEF907 -20200228001546 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A82A356F -20200228002300 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151A8959297 -20200228010138 2 6 100 4095 2 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151AAEFD82B -20200228010636 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151AB3B04D7 -20200228012037 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151AC0DBACF -20200228022145 2 6 100 4095 5 C7D5773A9200CD53CB4C9244931BB61A711BA1EA3735C53C933074E733E2DAFBBC1F737A508EA82790EF95F7989A889A8FFBC707E9A88090ED5FBA0F485638CBAC547DE653E9D80D09E8795B68C70570547E49D611E08F9D47AEFC22AE8D81D8863CAC593896D4B126CA806247C2954360BDAB96247050BE8C3D7E39C3C2D5B0C74811B0AC00CB338A3F48F7A799F86C563DE5EDAF8BE8A6220106899315714214FBDC466B240833E37029585311F49D8837BCC48A07CA56B505A9D42F14363C3950AB9F768307C2B627FA8DE1263663C251706BFA2F23C5B85CEBC3AFA399FC791D20F1B94C5DFD3E78665FE6846C8E213136E8CA5A24930DAE9EFEBD54616BB3EA08E5FB9346098F42F1593A5D5F1E3B73FE184F5CD674BE7F0C46171E0F83268B3C231C9B552449FA882EAA67EFA52399A3867DFD17248CF52450523777260F4FFE155AE5838A4F883EA27DE00AECE89B984F185A795C34DD71F4F424F919D7F32D48F2FBC9FBE41E631E6443397AA5E75B6AAC98619A9241A8D162DCBFD8EB1056E8ED62A655A2D50FAA162EF86DA4DEA51ECB168193F1C34C558335D27EC393C6AA1B789A23BBC08781011B2FCB2A02A7C33632BB33D1D5FB72E5C9FE9BEDEA1FC4079638D7FD6FFD965CF01ADB026D4638CE0A0D20E47BA0D9AD72ED5136A562AE955374E2A80809076AD250D7E8F59854A820BA342FB92151AE028CF7 -20200228024919 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3C1F349A3 -20200228034540 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3C283A14B -20200228094553 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3C9D8E343 -20200228122045 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3CD2640CB -20200304105045 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D032E31F -20200304111455 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D0B6997B -20200304114010 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D140C2DF -20200304121904 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D2192573 -20200304123148 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D25B4313 -20200304123330 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D25B8FE7 -20200304132134 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D363A65B -20200304153236 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D651690B -20200304170756 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D8694EF3 -20200304175528 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D96C51EF -20200304175824 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3D972E9E7 -20200304192109 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3DB488D03 -20200305083948 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3E1E947A7 -20200305094127 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3E337E7CF -20200305112549 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3E5787ED7 -20200305114326 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3E5CC07BB -20200305125429 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3E74D719B -20200305133907 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3E837E803 -20200305143048 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3E9457303 -20200305145210 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3E9AE72AF -20200305151101 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3EA0B73AB -20200305173752 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3ED2976C3 -20200305182017 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3EE08294F -20200305183227 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3EE448B23 -20200305205936 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3F16DF2CB -20200305230320 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3F412E2BB -20200306003322 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3F5F45EB3 -20200306005357 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3F65E4A6F -20200306052421 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3FC141813 -20200306071740 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B3FE6DC957 -20200306093244 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B4014328CB -20200306114315 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B403F2AAAF -20200306115622 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B404300D27 -20200306115809 2 6 100 6143 5 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B40430C46F -20200306123631 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B404FB7883 -20200306155841 2 6 100 6143 2 F7E8D9659B6A380E77600433F564EB23739AF15BF41262D170EC8A14567AE58A0465E39314F019B721FE6F113293EF987DCB177ADD8B7C2E547D393B4873E903C4616BA56468A20ABBA70DCDE1E0B5AA01164D612A1996ECA5BF3E7EFF9D94D54066B56057AE148281B5CC663E6D2979FC8B0C1EE9885F58E944E3A28906BBF202A7DB476CA39AD7FF03D3471379305B798A43EE4DBADB53E5994519C2A799D6C52F1FEDD29C8316DA7190A1277702C04BF5DE331D013DD89C24BE50DEDFA9C5E017E873271FB2E270BD563B6F88391EF560307AE8AFEF8290E60FB57ADF3DE8B9062EA0DAC5CC7EE8900EB2F98023B8655CC5646BDF37C43B64EBEC8918E2BABDA6360C74CBBD6E6986B1E506544F7EEBBB275AF18E5A03E704EE4C5459248A23571F724E1DB11F801F2110A813E14DD524358B4F8B0029164C1640D58D6EDC820CA8A8D79C76106BC3CE8345423E640F2E945C24DF557E1203988C085CB62982AC65F567127289B1CD56961305143E5386BCC75454B3C4BB0870E522E38F8C008418897E25F47ED03CF7B10E40EB7CB0153CF6D22CFCD80734FF85266E63FFD3F09B64195C075B50D65F1E0CC73CE5369A6B0E7D4A05F5F4408EBADDB2C21F76A8FF8E800A828AB23089414A6F5DB04F38FD22EA3A4F77F31C35C55D22B38B76DF5C05E6886B8D88C7A014B2A23D4663978363A75C17B97F51BE8C6A55AA6432BE8FBD80220A99DBD897AC1A545690308C5FBED26D5A074CA38D03C5CE904C86DE6BC2B64B4B7E21EB0244FF37EEBB5873296B440B5059816A0E2BA9A7663B84C3ACB607909F4108249F9949FCBFF8FB242012ECFD26C931FB9BE3C93A524C623E41EBF29976B8594688A73CDC36F53B3FC3AB8EA1DEC8A8226DB05D2D90FA523EC62FF03BA659F5D1EB6D6250ECD3E70E06D3E3BD4CCDB78D31BE96F9B8AC679C7341F9E40A3B38727FEC13077393D30C5BE613262C1CCE0C85517CA32D56B4B41CB122DDB39DDFCE5292B2B887554D24616CD1E225D2A79BB6E6FCEB83E231A7DDF680E6A1E3C3E201AB45DA7261D3359434778459F643FA67B4091B35AB -20200306171429 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526BA783157 -20200306192708 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526BD730693 -20200306193640 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526BDA39813 -20200306200518 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526BE4254B7 -20200306224443 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526C1D59903 -20200307001909 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526C3EFBF1B -20200307015658 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526C6174D0F -20200307031316 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526C7C7F63B -20200307045138 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526C9FD8D93 -20200307095446 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526D0AC7613 -20200307141219 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526D6467463 -20200307141549 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526D65211FF -20200307150658 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526D7636293 -20200307152317 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526D7B5C68B -20200307160123 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526D8814873 -20200307163910 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526D9511B93 -20200307211457 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526DF2AC807 -20200307221749 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526E0727157 -20200308011553 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526E440D17F -20200308035011 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526E79AC177 -20200308050733 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526E93970AF -20200308080136 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526ECED5C7B -20200308102232 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526EFDD20EB -20200308103627 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526F01E61C3 -20200308124828 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526F2DFA4EF -20200308152719 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526F6336937 -20200308160131 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526F6E350AB -20200308164518 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526F7C6DB3F -20200308175233 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526F910C19B -20200308195051 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526FB70712F -20200308200253 2 6 100 6143 5 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526FBA523E7 -20200308202652 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526FC156CA3 -20200308203457 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526FC390FEB -20200308204237 2 6 100 6143 2 F3D69BF99011E14ADF3A48E2FE265E067E9E02590D657BD9B87EF896253C2D3E138DD0B1290D92C9E3897C64E6B5D68CC524F18F073D39A1DC53562764B08A71A10564F53CE21A7428EE3E9801773D4E427909A240AE149342F596C2EF87414DBC486DF52C9F4015FD6B6192B77E91590E85BEDD079D9A5C273ED2544352BF913F1824D15B7CE331B5895E7DABB1E932FE9416CCC087E911E0952AE243F1F2FD43C9FF8B294330ED47B38A400A89144A87E461EC6B561654D6D3B5036A412358D781C6AE935901E71C7051FCA3F4BB0049272AC9F1B43847ED0CCA1F8A4670D2378F1AE1338B00D107ED004FB86168512172360F2D40B8F6BFB9E3721A74F637C916AA434DA842009BF9ABE9CE7942A0394042E338C8E61A032440292472D2B3AF3CC5396C84F14DAC115400D3D2FE72E29DD6FC98968523167E853550F8AF4684E70FF48431950DA69958CB9D3D0A03821249739EB909A2E78EB80F651C0553598DD4345ED9F21436D7A49DFA774F15817980CFD72EEE4620BA713D6BF81A953BABE83F5E292A099F07749ECFF6E2258D48F239DD1D0951DE9C3AE22B00098A510FF5230C8CFFFC8B9BE76F1904A05649FD0766D94038ED4AB901433FEEA667D196B7E0242620C6895725DA782234CDA8D1BD49FA586BEB793D2CBB6D3DC8B8FC18992393CA84923FD17774C82EE67D46050910A8D3B823EB253B9A73DBF388DC91DA2A6F14E92D7DF58E2F7AE3D6DAEF74ACEF7B39F068D4E895E6D0020E84AC0095C0991D11F09E02DC024C22A41809898662B58DE47649736CA74F4AA0A2F2B8E09C3B154D1904B82337881030DD9699BD397BE9CD4DC152BD097F3078B69F47465C4B787232227E4F7966E021FBB3F974182022BC35C415BE677C96B08E1A7DD1C3810EF28AD6975730167365DD8335993F96529F36DE245736358E9F9360EB53494247E382496380A006F077F6A1B42F72ED63B7B22CA0D10A410194A2D714C974142E86DF6639BC37714564983322EF900F0E0CA785907DECF7C9557056E09DC242E10D69C3EB604BF96DC2BBE1F69203EF664EA68CD23526FC547E5B -20200309092747 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB469CBC603 -20200309132310 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB46CBEF1B7 -20200309170440 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB46F794A2F -20200309175340 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB47010DC3B -20200309202152 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB471DCF32F -20200309224536 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB473A874CB -20200310025444 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB476C22A9B -20200310062019 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB479486FC7 -20200310082852 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB47AD3C293 -20200310111216 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB47CD0BD7B -20200310180600 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB481D17503 -20200311015151 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB486E03C8B -20200311023932 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB487717827 -20200311110336 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB48D9BBC13 -20200311182436 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB492FC11BB -20200312191341 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4A4A6DB8F -20200312210435 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4A5F07D3F -20200313061025 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4AA98C3EB -20200313104943 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4ABB58143 -20200313131537 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4ACFC1F93 -20200313162830 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4AEB1D103 -20200313193630 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4B0562167 -20200313204400 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4B0E7687F -20200313205856 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4B100B58B -20200314035540 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4B4AAAE3F -20200314061326 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4B5BFDBA7 -20200315011135 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4BD31F073 -20200315110837 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4C26F444F -20200315161923 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4C4B91073 -20200316051743 2 6 100 7679 2 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4CAECF90B -20200316125128 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4CE2FC1E7 -20200316153032 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4CF8D33EF -20200316171946 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4D07EA9FF -20200316174220 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4D0A81D8F -20200316202625 2 6 100 7679 5 F9B9E3DF0669078220C98F6E1775CAE12B5D95EF20D9491DDDFC0DFBA8EE09FD43F58BA934B719A06ECFF9646CA90998726E6FBDC6DB663F3BE44CF10A44B9D2DD7B01682B867206E6A67FE77170050860206AE5980778EA44104698A52D4D57D2AE0B98826DD3E98CB26E3CF0F044546CA7A97505E68983B439E27EE64AAB26D9FAB324CBADE29FBF733AF761D5CBA8E15D906F992080A1A725D65DD85CCDF0B00CCD5D44952C7D46CC514F6D34DD225F26B5CCFB2EB26077A854C19585DD40F4373FE41626532D4753C3617395FDF26FAAE36A6BD0D9009A7F9086AE9B150BD4712B4672ABACF3EC652B972885D8C6C858C93FA42B72E48EFB055E25828CF6FBF609BA25A589B79E0B64DB63F971C6C06103696A359338034A1FB53E0B601FCBDB8CB6BE8DA048C4D9CEA7EA4A458FA64A87B788543854D94977330FEBC9BB09855083ED12C13858DED10C17C19412C7AF9412F4FE952322D80FC9B26842B1FE1859E670FB047390669D81225409853A3E3CCEE979D1120F4F3D833C49A7F8EA673FA68ACB33FFFC3B56A3F277D237F566F5A342C79B3E40EBEBD6E570B1AED4845B353995C7B758CFD4875A799F652122648618AC29D583E04D772FB6739F69D5E4DBFF2BD7B3468729E1ED90C9C523C36912B2EBC69199A5E7D0982867536275332B62C1AD6F07F1825BE66CDC5C99427268B6D1E754A90AF36F49C136E40455866B92FBEF1A298C3A3EFDB6F0F459F5E885D2C0B74C4C7347430AAD7EF86BFA21F8D38CAC911171802D645A73B5249334E26B804F47A012DE0FE1CF4745F33A4A5882DCA984E253E6B16B9A8A15541F65270BFB61A64EFE9BDBBFE4205B1F4FFF5FD75EF15D17F3CBB89651E88866A2AD67D0BD7B21B4495406B0F7A083AB155D37497CC81E4F360F39DF5A26C40662176ACB041805614DD761C619282E2719C29693050058E6FA82FF4237E86A408ADB3DDC5ADC0D770B3E5D1861B669FCEB53D432A5928AB547040CF2044B3164573AE36C52DE160C2F34B0FC18B1C5E53DE1ACF886086064AAE3566D2AC9E00EFED873A201F0D14FC0DFDCF40ED380E12F9CD3D65F944D888D1FFB0F0ADF56CDCBC3036FBA03AB05944D37F24917DF3E18B9EE06B1AFDB385FBBC9425D414849B0FE0BF8D101669341EA388B899ECA0BC7FF46200CC64E0A8480C9B55E71D2A3AAB11FB5D9E2278016E8BCE6901A87B8D993F8AEE78698D6FD13D2E26873F3DA86F0983AB151E921C0A0308ECA824E32FBBF2E8F1BC4E0BEC0013BA6B89BB61F495FAAB142B782BC59FB4B15EBD4DF155A56B07F7E64C4732DB1BF21E03DD68DACABB778E97C74380E7BB4D21FB857 -20200317144528 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D6917B8A583 -20200317172320 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69194AFCCB -20200317211821 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D691BAE756B -20200318020947 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D691E88D40B -20200318132137 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69243D6E83 -20200318164449 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D692641EA1F -20200318165632 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D692656A5EB -20200318233140 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D692A61B1F7 -20200319003005 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D692AEDB987 -20200319094041 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69307F8B33 -20200319150358 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D6933B4B75F -20200319173225 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69352DD107 -20200319174751 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69354C2B7F -20200320033350 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D6938CB4C9F -20200320090847 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D693C17966F -20200321110636 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D694B3E8EEF -20200321132757 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D694C8DCF73 -20200322034802 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69549685F7 -20200322064543 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D6956401F07 -20200322080953 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69570A66EB -20200322105224 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69588D739F -20200322200820 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D695D952E9B -20200322211734 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D695E28F8A3 -20200323000631 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D695F9BBADF -20200323010937 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69601E6443 -20200323081041 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D696401E163 -20200323141348 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D6967527EB7 -20200323182024 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69698E2947 -20200323183420 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D6969A6188B -20200323200741 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D696A775C93 -20200324000150 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D696C9A9E77 -20200324021150 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D696DC85C1B -20200324041431 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D696EE23C2F -20200324100523 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69721212EF -20200324110629 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D69729D197B -20200325070252 2 6 100 7679 5 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D697D6E57F7 -20200325073428 2 6 100 7679 2 D6B6711FEDD0DAB74BE347B82AE33FB203A966E712D108C27D2983732928351D8E0B14DB0377CA10A9D079F1D76AB94AB983A67C01CADC4EEDC12F452A214B690C3823B59D05B8967A9C5FB80A78CA705620E04FD35D7BC8636A0456F5015C75B2ED2AEE4A50ED3224FB8BDEECE5C21DFC8703240AC287E4E218710091A76D19EA96FE36FB67547F45040AB5DF812D5A4391E41147087072901BE7E6618F41C2D5868424B7EC12E122A036FB5E504651DF79A120CF6698D983FD59F0203E225DE8508D72DCAA6D93492FC574B73B589189D127CF23EDFD7B319C2222239641590C6F66D25C3AD092527FBDE254131F5C13A70BC2C382671E4B940C755B617854CD3A50941DC652A8F20647C638E5F0977EA881D4770CC8381AE551A745363183752830BF4650C3741FFA8F0ED13CE0190963AFA40B61B2B9CCBD07C49A22CD6C229D43AB2E02CE5A8D2CCE45C22E237F8679D10D2543BDA0407FE3011B211B331426ACCE3B4D7DC8626B4C7D713479170BA6DC9A34F404D1C6A3EA7C04634CE61A032FC967D212B99E521CA58B7EA0E560095F1E39603C1FED48F8ED21E4D7B2D3D6F9CB34387BAD472097FC3C24203991ADE41EFDADE145D9B36E87DF128176951D3AFA12C586585C230F4DE23973B14B0291FB99A2527B87A705228DC2F0C27E6C6D01FA36E231A076C5D256B2D730424EDA55916FA3DE5E6AC1EAA5EF7FFFCF57C5577195EBBD5C3AA0448BE83BFC6853AAF9B48FA1289B276C931D4E472FF04428D02EADF12733C1E446B2DD0F1B30D1BEB4E5F36F6FF6438E7B5C51093BAED1AD02AF353DE0F447C38C1F7D10D3C6CD56DBB8EF4374E5B296BCFC2B926AC19542649DA903992F0DB5F1F41A839179F753921C9814C07924097BD850BE07A0A6ED5EECA31D391154055012C48C8000CA03790889670C2E4BE1BCE6C854C4FAB1004CC127103E59C4BF55C7A290BD44BF9EE06C18557C07D2A36D8FCDE4E1F17AD73FA570112DB3F881AD1C23D573F3F23CC5245B4D1C289F517720F444A3282BDD4D5E49B98926C13B0C45CA13BE11E55A5B6F104435196EF8E25A3A955C5C15A0A350A276912C143F57C819F45557A04C5A576E2266E0898E8D64BA3B7E539B642C7C13E624BC8AA299F8FC1D72C7E9DD4C5CE50DFFB762A80A3D7EF8BBEE12CDDCA3F9900A948986F64A719D5444E5D595B86F2524B0292282F6EFC2D3DB2E275FDC4D11654C878D1D74CA972B7CF6C57B2A542BE5A8F2576105C95C1376F5EBCA7A7068A60E90AA8C4B19219EC3A518E8CD809F06096ABFF526F31E86DD4127FD4CFBDAF1229CB590CF9D76ECAFB2E6B3CD43995F6EF11D697DAF0383 -20200325172855 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF90ED930B3 -20200325202118 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF91061F97B -20200326023237 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF9139C9FC7 -20200326024940 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF913B79CEB -20200328134127 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF92E9C709F -20200328212714 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF932A9BEAF -20200329023213 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF935A4196F -20200329154240 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF93D2BEF37 -20200329201144 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF93F51B18F -20200330113432 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF944EA6E43 -20200331175854 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF94C88CF9F -20200401041044 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF94F14974F -20200401113456 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF950E7AC23 -20200402184624 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF958E471B3 -20200402210643 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF9598F1B73 -20200403191828 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF95C0DDE53 -20200403200234 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF95C32F9F7 -20200404072948 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF95EFCC91F -20200404154328 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF9626ACABB -20200404173401 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF963319AF3 -20200404190652 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF963D80CBF -20200407114745 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF96F20367B -20200408113553 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF973EEF8A3 -20200409193550 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF97A04D14B -20200410193553 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF97C78121F -20200411093549 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF97F2C0DC7 -20200412155343 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF982A4594B -20200413220042 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF9880132D3 -20200414091654 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF98A23F9AB -20200415173037 2 6 100 8191 2 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF98D4F179B -20200415204739 2 6 100 8191 5 C9BECFEF229169BA6895957B61D338147FD9E67666267E2963D7A5587F57261CE8805A323015A9DA97865C6720A855FB346A80C284F9E8B8661DE02027ED9D77E29C25FD08E9BA260CF0D99BF2B69B0F054D642F8E29756D282B4523CF8CC058AA3A274F5D0766A30E269DC7AF3902DC139AC98994961A9186B5538B0F741A774918140CFC62D6BED7CB6E9333682F17683EF6EB53C2912F125105BDFAADB8046BD4FDFA60C4CE0CD0800D4247FFF67A72917E18D86BDFD6A4FBF3301E3290F5F5FF138F8EB4AD0C85AD4DEE6D590B44352B8B42C3A207C677CFCA215DE5391C9BFE5667698AB65D6955CA1FE8CE57D8EFC83FF5547E095FCC476FF3BAF6DD5B6D87F1C836CB712B54B115C0D7640F8F72CBDCE86DBCE6D2C04B7306B16E010A6CBE0BA95ABF269071BB1F5F433BC74D0C19889480A6B5C1683904837C36C7BCF69BE7CB96E0CAA07396224D694FB02F922B33D14C384923F946D104475F49D18A77AE5FA44ADA7C6E16D3B3085821C0B6814DCB565FDC44ED1942C9E25224ED96240D1FEF3817B6161BAD9F16B8C80953882C2FB2722515B10ABEBE969D2318AE9EB81CE91352329591D2874E6121205E072A3D5749190FA847D79B72BD3452DE0B5169601DDB6264AE70A1DC46B3637567787A11AA180B20623440C455722F8131FF09B47DC47814A4925B615A635D6DA05106825E764746CE76EDEE66F8782B9F688AA003B003857B5A659EAAE999171A9353DE0633614093E0A81E1346ABCDCB3CE1A40E8E086A2A2FB9B87394E0F6A0319F42C7B5B8BB9CFB0EF9FDFF6034A397E32E76B6F8C01F3DD2BE81FC938AFE7A1E1D763B4715B2D7CFB4DA9C0B4D013DE532F7D35E177542616DCC3F06736A25F60D0D486D5E4A3797C643977321C9908881170A23D22ADC8768E983DDB79594311DAF4D2CC28AC73E579F36297B0B007B86CB20F185C3A97E772B8FEF731D59A57C9A30D80C5E8B5F62715EA82BE29C5ADBB7A50B2A3E1FE26A7E77A9B53AB69E4A3D4552494F4F0A39459FE8AD9AA7AFEF7CB2560F759E735DED296AE22EDFDF5336671030749F5CE10E6C212BFDC97DA25C5BC80CD62BD490752CD84FA6B8A35BFC752A1CF07C9247C47A0D50D1AC3A713DDF9214E35FF74BF84799732CA0F7032F2ABA00E896CB731A26D09A44E870E9E46D452428F03F6C54CAD2A90A7D95F06F042A929DB5D1D3BEE989F292C1409E780F30B5C00D5965E35EC5957BCF172C26A93E337B1702FAD07940E5EDF2155F1F1CB33E363935829A64665AB6B6D7B6147673E02CF53BA128114C1396785C550D9FC3E38A2E15964CF7BE477766A7AA3310BC6729910C049FAF4FD5895AB3199830EAF34A67FD727FCE77F0FD546A70AE65011839B3A617EC1A2BB2F341A75EC989227E3DEB3DC4DC9911B0BC1F43425401B9D3355CF98DF24F47 -20200416120747 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317AE516267 -20200416164443 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317B052A5C3 -20200416182037 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317B0FD1FE3 -20200416203456 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317B1F40773 -20200419115426 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317C703EE2B -20200420182727 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317CFC2F4E7 -20200421163640 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317D5F6A563 -20200421165237 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317D6070547 -20200421230237 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317D880CCA3 -20200422193836 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317DE385AC7 -20200423050749 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317E3208663 -20200424124535 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317EE2914A3 -20200425200633 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317FD928D1B -20200425223722 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729317FEB7212B -20200426095445 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B72931804287AC7 -20200426121541 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B7293180542CD23 -20200426142125 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729318063CF9E3 -20200426144436 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B7293180663AFAF -20200426154241 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B72931806D328F3 -20200426180855 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B72931808041373 -20200426210432 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729318097002B3 -20200427001200 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B7293180AEDF073 -20200427034737 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B7293180CA6F67F -20200427122056 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729318110CCF9F -20200427185846 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729318146CBE53 -20200428235601 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729318232A7227 -20200429061301 2 6 100 8191 2 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B729318265D253B -20200429125635 2 6 100 8191 5 FDD2FF1B0B2402FB6FD5FBC2AF7553A3418C2535DFBF5CDB078CEA3D7C44A4863229766D19871460787A24C249D14845D5332DC7B153C10DF45AEBDC462929E786B8384FF62EC1CB99A79928B0EDB9845107488A06141112F534054013B3AA4DC1B2FE160ABA2E8670A0FB7B835D57BF99D5E7474161517D4149677B3BA24D68831195F8EF4145CB44B0FBDB37BF1B36A0B6F517F145FCC7C169C41A0E3A8A313E455A377E5D82B82608EEB14A5E7C5F4E9AA8E5315D1C600077B5F2F50022E2AEEE142E09DD25363862BAE1AF0D37B00C0D824B25C2B579524577AABB5C82452BE70C9AE8D65E935E087A70892E00544BAD691FE677C577917CC495D470E5301A9F75F019268DD8A9ED8F89EE35F6DABECE4507627691A666E86B98578FD03A7AC198728F7BA4348ECF3A61BAA4AD99DA46F97EA9773F1B9ACAA71EE30435E7A82F081C9D0B16495E96645626637CB97BDB4E7932763F826029B6FFE6C0537315BF01C1671029397DA737A5CD1F13F3ECB769D8265BE0148B22DD5FECCA1E7763E837C3FAEC235F1CC2910F51BD05A647C39623EEC1514FA6C64C84804E23D63D0BED6A88A1C6D382EBCF04FD8574C92D662BAFB239EE7984E6D252AD85D3B0D94D040B6FCB4B5120A2E43AF54C11C59B3D4BB777B3E49714FBBF0169ABBDC0CF285F6C37E668966CB8BBA5083A5EBCD706CBED60455ED554794B03D5136AC555A272FD180D2B99B60AEC25096F33C70CF7B6E4ED89D781954B7D52DFB8A0CCD2A237D8693EF8B3236540678ACEEDAC2A621B88B1A478BAB068ADB7CC8A037F8723B89E0FDFFAAD73F5D77007FCF04DB358393A7DC6DF42DCB4EBB853B77D27FFD7A616B9354ED0707431776FE294BAE152689DEE19B18902356B801EC7A760C2075998D6C6AF8CA1D59CB1D294CBA7490D5F54E0997202F4F4298AD554E28FF788093407E005600A35BA4B172B1D141D956965ED477C2EE1F808B45DE3517D66E969F17D8F5C0F4CA8F64F3912E9E8E8E11D3939EEC5CD6E6FB8D1090E65531BD570108A73A0268D370C51D41FF38B96475BE85EFF412B573F998D03C4741F3095ABEB13AC750147D76DF8375DFE62DC289496C8B8C9D692D5034AD7D514EBC3CD05B0ED0B7261823CEF3DFEA3D4324F1E1F5AD0172220225EECF3FC23786D75F1143117275CCDC3F5182C6CD7D194F9F943E0E0D4C64353442E9C0D06584A7D641DA03641E474E48CA631BEDB233526F7B889425561B48D5645BBB2E53CFC32A40771B6A12D0A2A6E0034666F2DBE47E30CE1FD5949963D2A779B02B886E186E20A31ECC948E4BF19E3D206760613F9577D9BC1FC02D68D2AB09C1EA756175FDD76A372E87FF4A9E79AAEE681D79697ED27803F8E6A9E41B92A0F6F239CA72F88F8414F758E98A48A1C0BC30FCF49EC2615F831C0E99E1B72931829B70597 +20200603013151 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B598E0A26F +20200603013238 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B5992253EB +20200603013253 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59936A07B +20200603013341 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59979324F +20200603013412 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B5999ADA8B +20200603013518 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59A02A39F +20200603013530 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59A123243 +20200603013735 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59AD6F947 +20200603013748 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59AE8D8E3 +20200603013933 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59B86B667 +20200603014014 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59BBA6DEB +20200603014054 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59C01B8A7 +20200603014128 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59C29951B +20200603014140 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59C375247 +20200603014240 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59C962533 +20200603014320 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59CC3D1B3 +20200603014419 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D1CF107 +20200603014455 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D5BEF33 +20200603014535 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D8CD76B +20200603014539 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D8CEC9B +20200603014547 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D94AC97 +20200603014600 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DA41237 +20200603014618 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DAD23B3 +20200603014629 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DB9A6AB +20200603014640 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DC72D17 +20200603014646 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DCA93E3 +20200603014713 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DE24DDB +20200603014735 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59E04C08B +20200603014834 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59E5D24E3 +20200603015049 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59F359287 +20200603015117 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59F4EB0D7 +20200603015124 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59F547E4F +20200603015250 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59FDE260B +20200603015443 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B5A088C767 +20200603015517 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B5A0ADBCE3 +20200603015616 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC1F54FE3 +20200603015632 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC20D92BB +20200603015714 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC2466F63 +20200603015737 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC26D42FF +20200603015759 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC290CFC7 +20200603015826 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC2A9F777 +20200603015926 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC302E2AB +20200603020047 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC385317F +20200603020153 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC3ED4683 +20200603020330 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC47C42DF +20200603020424 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC4C763EB +20200603020516 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC51127D7 +20200603020716 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC5C96ADB +20200603020724 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC5D27F33 +20200603020757 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC608698B +20200603020857 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC662C493 +20200603021019 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC6CD731F +20200603021029 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC6D98B37 +20200603021126 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC72C56AF +20200603021137 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC73B2487 +20200603021230 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC783A09B +20200603021237 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC78AB273 +20200603021248 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC79749E7 +20200603021336 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC7D6F6C7 +20200603021349 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC7E7DE83 +20200603021433 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC81FC717 +20200603021555 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC8A2E197 +20200603021648 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC8EF5243 +20200603021748 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC9466C5F +20200603021817 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC962284B +20200603021848 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC99760E3 +20200603024052 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A91FDFFF9AF +20200603024236 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A91FE2CF7AB +20200603030816 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9201780DFB +20200603031241 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9202073643 +20200603031336 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A92021B4CD3 +20200603031841 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9202BDA763 +20200603032328 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9203510ECB +20200603032520 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920388C3E7 +20200603032842 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9203F56F83 +20200603033217 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920460103B +20200603033521 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9204BFC103 +20200603033736 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920502CC63 +20200603034230 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A92059BD8AB +20200603034313 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9205A947E3 +20200603034452 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9205DD15C3 +20200603034648 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920616CA47 +20200603035115 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A92069C9C2B +20200603035225 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9206BB9E4F +20200603035500 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A92070DE93F +20200603035636 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920737396B +20200603040133 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9207D5E89B +20200603040227 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9207EC8EE7 +20200603040625 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9208640D27 +20200603041338 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920945B5AB +20200603041419 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920951AE07 +20200603041640 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920999446B +20200603043156 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920B8735AB +20200603043319 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920BA8BB73 +20200603043430 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920BC8D263 +20200603044252 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920CD96A5F +20200603044815 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920D7CF1BB +20200603045034 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920DC0D2E7 +20200603045100 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920DC9043B +20200603045746 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920EA22D0B +20200603045832 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920EAFE143 +20200603050921 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17EECACD1F +20200603052247 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F081C487 +20200603053129 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F1987E43 +20200603053245 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F1BC8503 +20200603053449 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F1F91A73 +20200603053857 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F27C8A43 +20200603053957 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F2955523 +20200603054803 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F394838B +20200603055727 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F4BF9BE3 +20200603060437 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F5A887B3 +20200603060919 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F63DC10B +20200603061739 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F74CFFCB +20200603062124 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F7BE3FD7 +20200603062244 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F7E219A3 +20200603062352 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F800A877 +20200603062854 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F8A5CD2B +20200603063441 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F957937F +20200603063639 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F98ED287 +20200603064225 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FA46F36B +20200603064300 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FA53E86F +20200603064723 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FAD9840B +20200603065325 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FB991D57 +20200603065827 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FC383623 +20200603065922 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FC4B78A3 +20200603070014 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FC5D3D33 +20200603070257 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FCB2934B +20200603070528 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FCF8C26F +20200603070954 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FD83D0B7 +20200603071417 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FE089B4F +20200603071755 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FE7F6E9B +20200603073423 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED180093BC73 +20200603081916 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB2D4D797 +20200603083145 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB388F177 +20200603083521 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB3B5C34B +20200603084043 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB40162F3 +20200603084749 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB4655173 +20200603092034 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB64D516B +20200603095055 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB8176DB3 +20200603095144 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB81A12B7 +20200603095539 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB84BE7E3 +20200603095824 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB86B8F43 +20200603101512 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB960938B +20200603104916 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBB5FE757 +20200603105710 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBBCCBA53 +20200603105827 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBBD8F413 +20200603105917 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBBDBA9EB +20200603110729 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBC4E8FFB +20200603111137 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBC861FF7 +20200603111642 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBCC73993 +20200603111836 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBCDAA5EF +20200603113326 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBDB5695F +20200603115340 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBEDE1F7F +20200603120124 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBF484387 +20200603120350 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBF66044B +20200603122542 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC0A9B2D3 +20200603123932 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC1727CEB +20200603130016 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC2A4BC9F +20200603133721 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC4C82B83 +20200603134150 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC50278E3 +20200603134315 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC50E06EF +20200603135758 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC5E92E73 +20200603140431 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC641B467 +20200603141500 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC6D1EF0B +20200603142240 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC73D85CF +20200603144519 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC88AA813 +20200603152458 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCAB4342B +20200603154356 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCBB51E33 +20200603155251 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCC2FFA63 +20200603160553 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCCE8D70F +20200603160829 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCD05EF5B +20200603164544 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCF2AA323 +20200603164741 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCF3E737B +20200603170255 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBD016BC53 +20200603174159 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DDF71B183 +20200603175329 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE0166EB7 +20200603175916 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE062F643 +20200603184324 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE2FC12A3 +20200603184429 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE3055C0B +20200603185842 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE3D8A083 +20200603192814 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE58A7357 +20200603193254 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE5CB2ABF +20200603193621 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE5F55FC3 +20200603200025 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE75DAE53 +20200603201138 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE7FDB23F +20200603202852 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE8FADA4F +20200603203058 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE914E293 +20200603203547 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE955F197 +20200603204018 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE990327F +20200603214442 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DED4B6E1B +20200603220036 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DEE2C08C3 +20200603222135 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DEF66B02B +20200603222250 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DEF70AB3B +20200603223212 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DEFF51C3F +20200603230927 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF211A5D3 +20200603231319 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF2433C9B +20200603231528 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF25BCB27 +20200603231746 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF276CF2F +20200603232250 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF2BD6513 +20200603233720 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF38497EB +20200603235438 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF47D8963 +20200604001143 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF570FF3B +20200604002250 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF60F878F +20200604002438 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF620B41B +20200604055558 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFA633BBF +20200604061051 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFB397083 +20200604061554 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFB7C2FDB +20200604063226 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFC65DF23 +20200604065024 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFD6980B3 +20200604082734 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB31F961E9F +20200604084249 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB31FDC7AF3 +20200604091259 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3206DC3DF +20200604101647 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB321ACC813 +20200604103215 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB321F009F7 +20200604111534 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB322C70503 +20200604125038 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB324A52B33 +20200604170714 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB329B0AADF +20200604201954 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB32D7E3A0F +20200604225914 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB330A536DF +20200604235825 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB331C4B13B +20200605002513 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3324381DF +20200605020140 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB33424AE3F +20200605174721 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB33BBFFA77 +20200605181350 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB33C39E413 +20200605211751 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB33FBA22CF +20200605220744 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB340A69BAB +20200605222038 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB340DC3917 +20200605224624 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3414FBDF7 +20200606004552 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB343904617 +20200606010539 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB343E728E3 +20200606041215 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB34773F577 +20200606043519 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB347DDC483 +20200606060158 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB349792CCF +20200606061048 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB349995E23 +20200606072525 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB34AFC43A3 +20200606110034 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB34EE5592B +20200606132049 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB351770B4B +20200606143556 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB352D19757 +20200606155651 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3543BDFC7 +20200606165831 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3554B535B +20200606212229 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB359FD9073 +20200606220136 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB35AA7E8EB +20200606223830 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB35B464AFF +20200607002602 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB35D27674B +20200607041439 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3612F4687 +20200607090802 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3666D9ED3 +20200607105240 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651481AC9A3 +20200607133637 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46514B532A43 +20200607163856 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46514EDA94F3 +20200607192855 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465152143C87 +20200607195432 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515283AF8F +20200607230617 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515617BC0F +20200608012123 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515893FD67 +20200608021859 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651599AB89B +20200608035721 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515B642983 +20200608044119 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515C305197 +20200608063659 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515E6DD31B +20200608082941 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651609244BF +20200608110527 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516389D057 +20200608121159 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465164C740DB +20200608180046 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516B604DCB +20200608181840 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516BAD8D9B +20200608185332 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516C4C7C13 +20200608191623 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516CB2720B +20200608222523 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651703AD573 +20200609002530 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46517274C703 +20200609024353 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651750D2B73 +20200609030451 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465175677013 +20200609033613 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465175F369F3 +20200609040050 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465176620273 +20200609062156 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465178F038AF +20200609070757 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465179BF4683 +20200609094557 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46517C97C613 +20200609143727 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465181B85657 +20200609145622 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518205D68F +20200609150740 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518231FE23 +20200609230217 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518A94E1BF +20200610010357 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518CBBC813 +20200610013612 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518D487AA3 +20200610014250 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518D5EFC23 +20200610044251 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A654DB7CCF +20200610045738 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A654FA9813 +20200610071715 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6567C3163 +20200610215424 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A65FFF83B7 +20200610224823 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6608D79FF +20200617060930 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A663CE8807 +20200617091256 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A665DBFE4B +20200617113153 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6676B33F7 +20200617170511 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A66B179027 +20200617224324 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A66EDBCFA7 +20200618013140 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A670B46447 +20200618133142 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A678A89E8F +20200619002228 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A67FC1FBF3 +20200619052551 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6830B759F +20200620020539 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A68A981AF3 +20200620090325 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A68EFF0E13 +20200620190400 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6955464D3 +20200620192646 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A69585D693 +20200620194126 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A695A1BFA3 +20200620235757 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A698313E5F +20200621064953 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A69C626CE3 +20200623073839 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6B44F5CDF +20200623133511 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6B7E45A07 +20200623163036 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6B9949D03 +20200623171631 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BA0088F3 +20200623190013 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BAFE9BB7 +20200623200819 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BBA63F8F +20200623233346 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BDAF193B +20200624020817 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BF306ADF +20200624120025 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9A48268CB +20200624212659 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9AAFA0B53 +20200625054216 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9B08B8B4B +20200625123632 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9B52A385B +20200625172019 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9B8463B1B +20200626052613 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C027DE2B +20200626101643 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C11E420F +20200626115032 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C21BE90F +20200626121646 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C259D8AB +20200626221832 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C8D6C58F +20200627003443 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9CA48A947 +20200627072751 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9CEBA2483 +20200627132611 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9D172E21F +20200628074151 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9DCE587D7 +20200628192017 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9E443C567 +20200628211535 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9E564FA5B +20200629022616 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9E87B2F13 +20200629030222 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9E8D05DBF +20200629054955 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9EA889CF3 +20200629085314 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9EC71DF2F +20200629090539 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9EC8B1483 +20200629125524 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9EEE0A61B +20200629171748 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9F18A7977 +20200630033559 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9F7F90DBF +20200701005327 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA052CA8BF +20200701141753 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA0D5D91DF +20200701180117 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA0F982473 +20200701222250 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA12381BA3 +20200702010052 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA13C5E40F +20200702020447 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA14610AFB +20200702141056 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B8092131717 +20200702144742 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B8092635E07 +20200704195421 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80A98AA7BB +20200705044459 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80AE337807 +20200709044115 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80B1103903 +20200709111031 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80B4BB063F +20200709122228 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80B560D2AB +20200709231042 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80BB820B4B +20200710011425 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80BCA15883 +20200710070834 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80BFE94DD3 +20200711010355 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80C9C858F7 +20200711154230 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D1BFF01B +20200711210958 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D49EC027 +20200711221130 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D51FBF5B +20200712012057 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D6C56D7B +20200712025849 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D79C8BD3 +20200712085111 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80DAB1DE77 +20200712111154 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80DBE208A3 +20200712170032 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80DEF05C2F +20200712205950 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80E0F0E3AB +20200713042732 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80E4A95523 +20200713054611 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80E54D52DB +20200713111019 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80E80C304B +20200713231114 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80EE498EEB +20200713232228 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80EE59CF2B +20200714023100 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80EFF07CC7 +20200714031313 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F044017F +20200714041520 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F0C471DF +20200714043639 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F0EA175F +20200714065444 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F21223F3 +20200714133000 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F56A8F2F +20200715042829 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80FD035EBF +20200715170628 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B81000F34CB +20200716042653 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B8105A24213 +20200716044620 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B8105C3235F +20200717004114 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2563B2FF3 +20200717235130 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E25DEE6EFF +20200718065353 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E261E56D0F +20200719061659 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E26EE97997 +20200719174532 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2753B7F7B +20200719233549 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E278465B13 +20200720193256 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E27EAF2603 +20200720221223 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E28016951F +20200720225043 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E280684433 +20200721051511 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E283E5442B +20200721202027 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E28BF7EF47 +20200722031754 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E28FA5D78F +20200722033316 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E28FBF971F +20200722065544 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2917E7E8F +20200722082838 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E292454C9F +20200722174034 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E297121163 +20200723025424 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E29BB02057 +20200723041739 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E29C6C06E7 +20200723052236 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E29CFC7C53 +20200723065956 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E29DD62887 +20200723141158 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2A1DEDC7B +20200723143438 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2A20B359B +20200723180649 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2A3FDE2C3 +20200723182158 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2A41A0857 +20200724142608 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2AF0F839F +20200724163612 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2B034D293 +20200726001643 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2C133FD8B +20200726175941 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2CA996EAB +20200726180625 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2CA9DE833 +20200727032532 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2CF5B2087 +20200727053855 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2D07FAFE7 From d9e727dcc04a52caaac87543ea1d230e9e6b5604 Mon Sep 17 00:00:00 2001 From: Oleg Date: Thu, 1 Oct 2020 12:09:08 +0300 Subject: [PATCH 0003/1788] Fix `EOF: command not found` error in ssh-copy-id --- contrib/ssh-copy-id | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index 392f64f9425f..a76907717255 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -247,7 +247,7 @@ installkeys_sh() { # the -z `tail ...` checks for a trailing newline. The echo adds one if was missing # the cat adds the keys we're getting via STDIN # and if available restorecon is used to restore the SELinux context - INSTALLKEYS_SH=$(tr '\t\n' ' ' <<-EOF) + INSTALLKEYS_SH=$(tr '\t\n' ' ' <<-EOF cd; umask 077; mkdir -p $(dirname "${AUTH_KEY_FILE}") && @@ -258,6 +258,7 @@ installkeys_sh() { restorecon -F .ssh ${AUTH_KEY_FILE}; fi EOF + ) # to defend against quirky remote shells: use 'exec sh -c' to get POSIX; printf "exec sh -c '%s'" "${INSTALLKEYS_SH}" From 18ea5f4b88e303677d2003b95e5cb864b439e442 Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Fri, 2 Oct 2020 21:30:10 +0200 Subject: [PATCH 0004/1788] ksh doesn't grok 'local' and AFAICT it's not actually doing anything useful in the code, so let's see how things go without it. --- contrib/ssh-copy-id | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index a76907717255..11c9463ba51c 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -76,7 +76,7 @@ quote() { } use_id_file() { - local L_ID_FILE="$1" + L_ID_FILE="$1" if [ -z "$L_ID_FILE" ] ; then printf '%s: ERROR: no ID file found\n' "$0" @@ -94,7 +94,7 @@ use_id_file() { # check that the files are readable for f in "$PUB_ID_FILE" ${PRIV_ID_FILE:+"$PRIV_ID_FILE"} ; do ErrMSG=$( { : < "$f" ; } 2>&1 ) || { - local L_PRIVMSG="" + L_PRIVMSG="" [ "$f" = "$PRIV_ID_FILE" ] && L_PRIVMSG=" (to install the contents of '$PUB_ID_FILE' anyway, look at the -f option)" printf "\\n%s: ERROR: failed to open ID file '%s': %s\\n" "$0" "$f" "$(printf '%s\n%s\n' "$ErrMSG" "$L_PRIVMSG" | sed -e 's/.*: *//')" exit 1 @@ -169,7 +169,7 @@ fi # populate_new_ids() uses several global variables ($USER_HOST, $SSH_OPTS ...) # and has the side effect of setting $NEW_IDS populate_new_ids() { - local L_SUCCESS="$1" + L_SUCCESS="$1" # shellcheck disable=SC2086 if [ "$FORCED" ] ; then @@ -181,13 +181,12 @@ populate_new_ids() { eval set -- "$SSH_OPTS" umask 0177 - local L_TMP_ID_FILE L_TMP_ID_FILE=$(mktemp ~/.ssh/ssh-copy-id_id.XXXXXXXXXX) if test $? -ne 0 || test "x$L_TMP_ID_FILE" = "x" ; then printf '%s: ERROR: mktemp failed\n' "$0" >&2 exit 1 fi - local L_CLEANUP="rm -f \"$L_TMP_ID_FILE\" \"${L_TMP_ID_FILE}.stderr\"" + L_CLEANUP="rm -f \"$L_TMP_ID_FILE\" \"${L_TMP_ID_FILE}.stderr\"" # shellcheck disable=SC2064 trap "$L_CLEANUP" EXIT TERM INT QUIT printf '%s: INFO: attempting to log in with the new key(s), to filter out any that are already installed\n' "$0" >&2 @@ -237,7 +236,7 @@ populate_new_ids() { # produce a one-liner to add the keys to remote authorized_keys file # optionally takes an alternative path for authorized_keys installkeys_sh() { - local AUTH_KEY_FILE=${1:-.ssh/authorized_keys} + AUTH_KEY_FILE=${1:-.ssh/authorized_keys} # In setting INSTALLKEYS_SH: # the tr puts it all on one line (to placate tcsh) From ce941c75ea9cd6c358508a5b206809846c8d9240 Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Sat, 3 Oct 2020 00:20:07 +0200 Subject: [PATCH 0005/1788] un-nest $() to make ksh cheerful --- contrib/ssh-copy-id | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index 11c9463ba51c..ee3f6374cb07 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -237,6 +237,7 @@ populate_new_ids() { # optionally takes an alternative path for authorized_keys installkeys_sh() { AUTH_KEY_FILE=${1:-.ssh/authorized_keys} + AUTH_KEY_DIR=$(dirname "${AUTH_KEY_FILE}") # In setting INSTALLKEYS_SH: # the tr puts it all on one line (to placate tcsh) @@ -249,7 +250,7 @@ installkeys_sh() { INSTALLKEYS_SH=$(tr '\t\n' ' ' <<-EOF cd; umask 077; - mkdir -p $(dirname "${AUTH_KEY_FILE}") && + mkdir -p "${AUTH_KEY_DIR}" && { [ -z \`tail -1c ${AUTH_KEY_FILE} 2>/dev/null\` ] || echo >> ${AUTH_KEY_FILE}; } && cat >> ${AUTH_KEY_FILE} || exit 1; From 922cfac5ed5ead9f796f7d39f012dd653dc5c173 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 3 Oct 2020 13:38:41 +1000 Subject: [PATCH 0006/1788] add some openbsd-compat licenses we missed --- LICENCE | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/LICENCE b/LICENCE index a2278a05d1da..5999c5e9d50d 100644 --- a/LICENCE +++ b/LICENCE @@ -314,6 +314,68 @@ OpenSSH contains no GPL code. * authorization. * ****************************************************************************/ + The Blowfish cipher implementation is licensed by Niels Provis under + a 4-clause BSD license: + + * Blowfish - a fast block cipher designed by Bruce Schneier + * + * Copyright 1997 Niels Provos + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Niels Provos. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Some replacement code is licensed by the NetBSD foundation under a + 2-clause BSD license: + + * Copyright (c) 2001 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Todd Vierling. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. ------ $OpenBSD: LICENCE,v 1.20 2017/04/30 23:26:16 djm Exp $ From 86cc8ce002ea10e88a4c5d622a8fdfab8a7d261f Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 3 Oct 2020 13:38:55 +1000 Subject: [PATCH 0007/1788] use relative rather than system include here --- openbsd-compat/sha2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbsd-compat/sha2.c b/openbsd-compat/sha2.c index e36cc24ef617..ce936e262c89 100644 --- a/openbsd-compat/sha2.c +++ b/openbsd-compat/sha2.c @@ -45,7 +45,7 @@ #define MAKE_CLONE(x, y) void __ssh_compat_make_clone_##x_##y(void) #include -#include +#include "openbsd-compat/sha2.h" /* * UNROLLED TRANSFORM LOOP NOTE: From 66bd9fdf8b7762eb6a85cabbb1ae4ed955679f60 Mon Sep 17 00:00:00 2001 From: "deraadt@openbsd.org" Date: Sat, 3 Oct 2020 02:18:33 +0000 Subject: [PATCH 0008/1788] upstream: split introductory paragraph, and insert ominous words about the glob issue, which cannot be fully fixed and really requires completely replacing scp with a completely different subsystem. team effort to find the right words.. OpenBSD-Commit-ID: 58e1f72d292687f63eb357183036ee242513691c --- scp.1 | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/scp.1 b/scp.1 index feb839e9c3c8..9cbc1e0def1b 100644 --- a/scp.1 +++ b/scp.1 @@ -8,9 +8,9 @@ .\" .\" Created: Sun May 7 00:14:37 1995 ylo .\" -.\" $OpenBSD: scp.1,v 1.90 2020/08/03 02:43:41 djm Exp $ +.\" $OpenBSD: scp.1,v 1.91 2020/10/03 02:18:33 deraadt Exp $ .\" -.Dd $Mdocdate: August 3 2020 $ +.Dd $Mdocdate: October 3 2020 $ .Dt SCP 1 .Os .Sh NAME @@ -31,11 +31,15 @@ .Sh DESCRIPTION .Nm copies files between hosts on a network. +.Pp It uses .Xr ssh 1 for data transfer, and uses the same authentication and provides the -same security as -.Xr ssh 1 . +same security as a login session. +The scp protocol requires execution of the remote user's shell to perform +.Xr glob 3 +pattern matching. +.Pp .Nm will ask for passwords or passphrases if they are needed for authentication. From e5ed753add7aa8eed6b167e44db6240a76404db2 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Oct 2020 03:40:38 +0000 Subject: [PATCH 0009/1788] upstream: want time.h here too OpenBSD-Commit-ID: fafee8f1108c64ad8b282f9a1ed5ea830d8c58a7 --- sk-usbhid.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sk-usbhid.c b/sk-usbhid.c index 007c596447ff..460408868a69 100644 --- a/sk-usbhid.c +++ b/sk-usbhid.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sk-usbhid.c,v 1.26 2020/09/09 03:08:01 djm Exp $ */ +/* $OpenBSD: sk-usbhid.c,v 1.27 2020/10/03 03:40:38 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl * Copyright (c) 2020 Pedro Martelletto @@ -26,6 +26,7 @@ #include #include #include +#include #ifdef HAVE_SHA2_H #include #endif From 12ae8f95e2e0c273e9e7ef930b01a028ef796a3f Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Oct 2020 04:15:06 +0000 Subject: [PATCH 0010/1788] upstream: prefer ed25519 signature algorithm variants to ECDSA; ok markus@ OpenBSD-Commit-ID: 82187926fca96d35a5b5afbc091afa84e0966e5b --- myproposal.h | 14 +++++++------- ssh_config.5 | 29 ++++++++++++++++------------- sshd_config.5 | 29 ++++++++++++++++------------- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/myproposal.h b/myproposal.h index 5312e60581ce..f03b7dfd0df9 100644 --- a/myproposal.h +++ b/myproposal.h @@ -1,4 +1,4 @@ -/* $OpenBSD: myproposal.h,v 1.67 2020/01/24 00:28:57 djm Exp $ */ +/* $OpenBSD: myproposal.h,v 1.68 2020/10/03 04:15:06 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -38,21 +38,21 @@ #define KEX_CLIENT_KEX KEX_SERVER_KEX #define KEX_DEFAULT_PK_ALG \ + "ssh-ed25519-cert-v01@openssh.com," \ "ecdsa-sha2-nistp256-cert-v01@openssh.com," \ "ecdsa-sha2-nistp384-cert-v01@openssh.com," \ "ecdsa-sha2-nistp521-cert-v01@openssh.com," \ - "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com," \ - "ssh-ed25519-cert-v01@openssh.com," \ "sk-ssh-ed25519-cert-v01@openssh.com," \ + "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com," \ "rsa-sha2-512-cert-v01@openssh.com," \ "rsa-sha2-256-cert-v01@openssh.com," \ "ssh-rsa-cert-v01@openssh.com," \ + "ssh-ed25519," \ "ecdsa-sha2-nistp256," \ "ecdsa-sha2-nistp384," \ "ecdsa-sha2-nistp521," \ - "sk-ecdsa-sha2-nistp256@openssh.com," \ - "ssh-ed25519," \ "sk-ssh-ed25519@openssh.com," \ + "sk-ecdsa-sha2-nistp256@openssh.com," \ "rsa-sha2-512," \ "rsa-sha2-256," \ "ssh-rsa" @@ -80,12 +80,12 @@ /* Not a KEX value, but here so all the algorithm defaults are together */ #define SSH_ALLOWED_CA_SIGALGS \ + "ssh-ed25519," \ "ecdsa-sha2-nistp256," \ "ecdsa-sha2-nistp384," \ "ecdsa-sha2-nistp521," \ - "sk-ecdsa-sha2-nistp256@openssh.com," \ - "ssh-ed25519," \ "sk-ssh-ed25519@openssh.com," \ + "sk-ecdsa-sha2-nistp256@openssh.com," \ "rsa-sha2-512," \ "rsa-sha2-256" diff --git a/ssh_config.5 b/ssh_config.5 index 6be1f1aa2176..e769493a5ca7 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.332 2020/08/11 09:49:57 djm Exp $ -.Dd $Mdocdate: August 11 2020 $ +.\" $OpenBSD: ssh_config.5,v 1.333 2020/10/03 04:15:06 djm Exp $ +.Dd $Mdocdate: October 3 2020 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -372,8 +372,8 @@ Specifies which algorithms are allowed for signing of certificates by certificate authorities (CAs). The default is: .Bd -literal -offset indent -ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, -ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa +ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384, +ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp .Xr ssh 1 @@ -825,18 +825,19 @@ character, then the specified key types will be placed at the head of the default set. The default for this option is: .Bd -literal -offset 3n +ssh-ed25519-cert-v01@openssh.com, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, -sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, -ssh-ed25519-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com, +sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com, rsa-sha2-256-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, +ssh-ed25519, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, +sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com, -ssh-ed25519,sk-ssh-ed25519@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp @@ -862,18 +863,19 @@ character, then the specified key types will be placed at the head of the default set. The default for this option is: .Bd -literal -offset 3n +ssh-ed25519-cert-v01@openssh.com, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, -sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, -ssh-ed25519-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com, +sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com, rsa-sha2-256-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, +ssh-ed25519, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, sk-ecdsa-sha2-nistp256@openssh.com, -ssh-ed25519,sk-ssh-ed25519@openssh.com, +sk-ssh-ed25519@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp @@ -1361,18 +1363,19 @@ character, then the specified key types will be placed at the head of the default set. The default for this option is: .Bd -literal -offset 3n +ssh-ed25519-cert-v01@openssh.com, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, -sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, -ssh-ed25519-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com, +sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com, rsa-sha2-256-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, +ssh-ed25519, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, +sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com, -ssh-ed25519,sk-ssh-ed25519@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp diff --git a/sshd_config.5 b/sshd_config.5 index 6fa421caed64..f68369f8fe66 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.315 2020/08/27 12:34:00 jmc Exp $ -.Dd $Mdocdate: August 27 2020 $ +.\" $OpenBSD: sshd_config.5,v 1.316 2020/10/03 04:15:06 djm Exp $ +.Dd $Mdocdate: October 3 2020 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -377,8 +377,8 @@ Specifies which algorithms are allowed for signing of certificates by certificate authorities (CAs). The default is: .Bd -literal -offset indent -ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, -ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa +ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384, +ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp Certificates signed using other algorithms will not be accepted for @@ -675,18 +675,19 @@ character, then the specified key types will be placed at the head of the default set. The default for this option is: .Bd -literal -offset 3n +ssh-ed25519-cert-v01@openssh.com, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, -sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, -ssh-ed25519-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com, +sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com, rsa-sha2-256-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, +ssh-ed25519, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, +sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com, -ssh-ed25519,sk-ssh-ed25519@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp @@ -758,18 +759,19 @@ Specifies the host key algorithms that the server offers. The default for this option is: .Bd -literal -offset 3n +ssh-ed25519-cert-v01@openssh.com, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, -sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, -ssh-ed25519-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com, +sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com, rsa-sha2-256-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, +ssh-ed25519, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, +sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com, -ssh-ed25519,sk-ssh-ed25519@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp @@ -1457,18 +1459,19 @@ character, then the specified key types will be placed at the head of the default set. The default for this option is: .Bd -literal -offset 3n +ssh-ed25519-cert-v01@openssh.com, ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, -sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, -ssh-ed25519-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com, +sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com, rsa-sha2-256-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, +ssh-ed25519, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, +sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com, -ssh-ed25519,sk-ssh-ed25519@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp From 13cee44ef907824083d89cb9395adbbd552e46c1 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Oct 2020 08:11:28 +0000 Subject: [PATCH 0011/1788] upstream: record when the host key checking code downgrades a certificate host key to a plain key. This occurs when the user connects to a host with a certificate host key but no corresponding CA key configured in known_hosts; feedback and ok markus@ OpenBSD-Commit-ID: 2ada81853ff9ee7824c62f440bcf4ad62030c901 --- kex.h | 8 +++++--- sshconnect.c | 55 ++++++++++++++++++++++++++++++++++++++++----------- sshconnect.h | 4 ++-- sshconnect2.c | 9 +++++++-- 4 files changed, 57 insertions(+), 19 deletions(-) diff --git a/kex.h b/kex.h index a5ae6ac050a7..07cec477f1bd 100644 --- a/kex.h +++ b/kex.h @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.h,v 1.109 2019/09/06 05:23:55 djm Exp $ */ +/* $OpenBSD: kex.h,v 1.110 2020/10/03 08:11:28 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. @@ -105,8 +105,10 @@ enum kex_exchange { KEX_MAX }; -#define KEX_INIT_SENT 0x0001 -#define KEX_INITIAL 0x0002 +/* kex->flags values */ +#define KEX_INIT_SENT 0x0001 /* KEXINIT sent */ +#define KEX_INITIAL 0x0002 /* Initial KEX, not rekey */ +#define KEX_HOSTCERT_CONVERT 0x0004 /* Client downgraded hostcert->plain */ struct sshenc { char *name; diff --git a/sshconnect.c b/sshconnect.c index 9ec0618a9c25..3c80756bc9ac 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.332 2020/09/09 21:57:27 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.333 2020/10/03 08:11:28 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -707,6 +707,10 @@ get_hostfile_hostname_ipaddr(char *hostname, struct sockaddr *hostaddr, /* * check whether the supplied host key is valid, return -1 if the key * is not valid. user_hostfile[0] will not be updated if 'readonly' is true. + * + * If cert_fallbackp is not NULL then will attempt to convert certificate host + * keys to plain keys if no certificate match was found and will return + * non-zero via *cert_fallbackp if this fall-back was used. */ #define RDRW 0 #define RDONLY 1 @@ -715,7 +719,7 @@ static int check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, struct sshkey *host_key, int readonly, char **user_hostfiles, u_int num_user_hostfiles, - char **system_hostfiles, u_int num_system_hostfiles) + char **system_hostfiles, u_int num_system_hostfiles, int *cert_fallbackp) { HostStatus host_status; HostStatus ip_status; @@ -726,12 +730,15 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, const char *type; const struct hostkey_entry *host_found, *ip_found; int len, cancelled_forwarding = 0, confirmed; - int local = sockaddr_is_local(hostaddr); + int local = sockaddr_is_local(hostaddr), cert_fallback = 0; int r, want_cert = sshkey_is_cert(host_key), host_ip_differ = 0; int hostkey_trusted = 0; /* Known or explicitly accepted by user */ struct hostkeys *host_hostkeys, *ip_hostkeys; u_int i; + if (cert_fallbackp != NULL) + *cert_fallbackp = 0; + /* * Force accepting of the host key for loopback/localhost. The * problem is that if the home directory is NFS-mounted to multiple @@ -847,9 +854,15 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, if (options.host_key_alias == NULL && port != 0 && port != SSH_DEFAULT_PORT) { debug("checking without port identifier"); + /* + * NB. do not perform cert->key fallback in this + * recursive call. Fallback will only be performed in + * the top-level call. + */ if (check_host_key(hostname, hostaddr, 0, host_key, ROQUIET, user_hostfiles, num_user_hostfiles, - system_hostfiles, num_system_hostfiles) == 0) { + system_hostfiles, num_system_hostfiles, + NULL) == 0) { debug("found matching key w/out port"); break; } @@ -1126,10 +1139,13 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, free_hostkeys(host_hostkeys); if (ip_hostkeys != NULL) free_hostkeys(ip_hostkeys); + if (cert_fallbackp != NULL) + *cert_fallbackp = cert_fallback; return 0; fail: - if (want_cert && host_status != HOST_REVOKED) { + if (cert_fallbackp != NULL && want_cert && + host_status != HOST_REVOKED) { /* * No matching certificate. Downgrade cert to raw key and * search normally. @@ -1141,6 +1157,7 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, if ((r = sshkey_drop_cert(raw_key)) != 0) fatal("Couldn't drop certificate: %s", ssh_err(r)); host_key = raw_key; + cert_fallback = 1; goto retry; } sshkey_free(raw_key); @@ -1153,15 +1170,24 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, return -1; } -/* returns 0 if key verifies or -1 if key does NOT verify */ +/* + * returns 0 if key verifies or -1 if key does NOT verify. + * + * If the host key was a certificate that was downgraded to a plain key in + * the process of matching, then cert_fallbackp will be non-zero. + */ int -verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) +verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key, + int *cert_fallbackp) { u_int i; - int r = -1, flags = 0; + int r = -1, flags = 0, cert_fallback = 0; char valid[64], *fp = NULL, *cafp = NULL; struct sshkey *plain = NULL; + if (cert_fallbackp != NULL) + *cert_fallbackp = 0; + if ((fp = sshkey_fingerprint(host_key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { error("%s: fingerprint host key: %s", __func__, ssh_err(r)); @@ -1252,15 +1278,20 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) } r = check_host_key(host, hostaddr, options.port, host_key, RDRW, options.user_hostfiles, options.num_user_hostfiles, - options.system_hostfiles, options.num_system_hostfiles); + options.system_hostfiles, options.num_system_hostfiles, + &cert_fallback); out: sshkey_free(plain); free(fp); free(cafp); - if (r == 0 && host_key != NULL) { - sshkey_free(previous_host_key); - r = sshkey_from_private(host_key, &previous_host_key); + if (r == 0) { + if (host_key != NULL) { + sshkey_free(previous_host_key); + r = sshkey_from_private(host_key, &previous_host_key); + } + if (r == 0 && cert_fallbackp != NULL) + *cert_fallbackp = cert_fallback; } return r; diff --git a/sshconnect.h b/sshconnect.h index 7c091e2b1bf8..6d63075e9638 100644 --- a/sshconnect.h +++ b/sshconnect.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.h,v 1.40 2020/01/25 07:17:18 djm Exp $ */ +/* $OpenBSD: sshconnect.h,v 1.41 2020/10/03 08:11:28 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -41,7 +41,7 @@ void ssh_kill_proxy_command(void); void ssh_login(struct ssh *, Sensitive *, const char *, struct sockaddr *, u_short, struct passwd *, int); -int verify_host_key(char *, struct sockaddr *, struct sshkey *); +int verify_host_key(char *, struct sockaddr *, struct sshkey *, int *); void get_hostfile_hostname_ipaddr(char *, struct sockaddr *, u_short, char **, char **); diff --git a/sshconnect2.c b/sshconnect2.c index f64aae66af35..44d7e68227ac 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.326 2020/09/18 05:23:03 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.327 2020/10/03 08:11:28 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -97,8 +97,13 @@ struct sockaddr *xxx_hostaddr; static int verify_host_key_callback(struct sshkey *hostkey, struct ssh *ssh) { - if (verify_host_key(xxx_host, xxx_hostaddr, hostkey) == -1) + int cert_downgraded = 0; + + if (verify_host_key(xxx_host, xxx_hostaddr, hostkey, + &cert_downgraded) == -1) fatal("Host key verification failed."); + if (cert_downgraded) + ssh->kex->flags |= KEX_HOSTCERT_CONVERT; return 0; } From 332f21537293d66508f7342dc643bc7fe45f0f69 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Oct 2020 08:12:59 +0000 Subject: [PATCH 0012/1788] upstream: disable UpdateHostkeys when a wildcard hostname pattern is encountered or when a certificate host key is in use. feedback/ok markus@ OpenBSD-Commit-ID: b6e5575af7e6732322be82ec299e09051a5413bd --- clientloop.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/clientloop.c b/clientloop.c index 60b46d1616c8..de13adab9e54 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.346 2020/09/16 03:07:31 dtucker Exp $ */ +/* $OpenBSD: clientloop.c,v 1.347 2020/10/03 08:12:59 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1828,6 +1828,10 @@ struct hostkeys_update_ctx { */ struct sshkey **old_keys; size_t nold; + + /* Various special cases. */ + int wildcard_hostspec; /* saw wildcard or pattern-list host name */ + int ca_available; /* saw CA key for this host */ }; static void @@ -1859,6 +1863,21 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) if (l->status != HKF_STATUS_MATCHED || l->key == NULL) return 0; + if (l->marker == MRK_REVOKE) + return 0; + if (l->marker == MRK_CA) { + ctx->ca_available = 1; + return 0; + } + + /* UpdateHostkeys is skipped for wildcard host names */ + if (strchr(l->hosts, '*') != NULL || + strchr(l->hosts, ',') != NULL) { + debug3("%s: hostkeys file %s:%ld contains wildcard or pattern", + __func__, l->path, l->linenum); + ctx->wildcard_hostspec = 1; + } + /* Mark off keys we've already seen for this host */ for (i = 0; i < ctx->nkeys; i++) { if (sshkey_equal(l->key, ctx->keys[i])) { @@ -2204,7 +2223,17 @@ client_input_hostkeys(struct ssh *ssh) debug3("%s: %zu keys from server: %zu new, %zu retained. %zu to remove", __func__, ctx->nkeys, ctx->nnew, ctx->nkeys - ctx->nnew, ctx->nold); - if (ctx->nnew == 0 && ctx->nold != 0) { + if (ctx->wildcard_hostspec && (ctx->nnew != 0 || ctx->nold != 0)) { + debug("%s: wildcard known hosts name found, " + "skipping UserKnownHostsFile update", __func__); + goto out; + } else if (sshkey_type_is_cert(ssh->kex->hostkey_type) && + ctx->ca_available && + (ssh->kex->flags & KEX_HOSTCERT_CONVERT) == 0) { + debug("%s: server offered certificate host key, " + "skipping UserKnownHostsFile update", __func__); + goto out; + } else if (ctx->nnew == 0 && ctx->nold != 0) { /* We have some keys to remove. Just do it. */ update_known_hosts(ctx); } else if (ctx->nnew != 0) { From 1286981d08b8429a64613215ce8bff3f6b32488a Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Oct 2020 08:30:47 +0000 Subject: [PATCH 0013/1788] upstream: enable UpdateHostkeys by default when the configuration has not overridden UserKnownHostsFile; ok markus@ "The timing is perfect" deraadt@ OpenBSD-Commit-ID: 62df71c9c5242da5763cb473c2a2deefbd0cef60 --- readconf.c | 10 ++++++++-- ssh_config.5 | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/readconf.c b/readconf.c index 554efd7c9c02..1963a83bc57a 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.335 2020/08/27 02:11:09 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.336 2020/10/03 08:30:47 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2178,8 +2178,14 @@ fill_default_options(Options * options) options->system_hostfiles[options->num_system_hostfiles++] = xstrdup(_PATH_SSH_SYSTEM_HOSTFILE2); } - if (options->update_hostkeys == -1) + if (options->update_hostkeys == -1) { + if (options->num_user_hostfiles == 0 || + (options->num_user_hostfiles == 1 && strcmp(options-> + user_hostfiles[0], _PATH_SSH_USER_HOSTFILE) == 0)) + options->update_hostkeys = SSH_UPDATE_HOSTKEYS_YES; + else options->update_hostkeys = SSH_UPDATE_HOSTKEYS_NO; + } if (options->num_user_hostfiles == 0) { options->user_hostfiles[options->num_user_hostfiles++] = xstrdup(_PATH_SSH_USER_HOSTFILE); diff --git a/ssh_config.5 b/ssh_config.5 index e769493a5ca7..e085efffce75 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.333 2020/10/03 04:15:06 djm Exp $ +.\" $OpenBSD: ssh_config.5,v 1.334 2020/10/03 08:30:47 djm Exp $ .Dd $Mdocdate: October 3 2020 $ .Dt SSH_CONFIG 5 .Os @@ -1726,7 +1726,7 @@ is enabled by default if the user has not overridden the default setting, otherwise .Cm UpdateHostKeys will be set to -.Cm ask . +.Cm no . .Pp If .Cm UpdateHostKeys From 396d32f3a1a16e54df2a76b2a9b237868580dcbe Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Oct 2020 09:22:26 +0000 Subject: [PATCH 0014/1788] upstream: There are lots of place where we want to redirect stdin, stdout and/or stderr to /dev/null. Factor all these out to a single stdfd_devnull() function that allows selection of which of these to redirect. ok markus@ OpenBSD-Commit-ID: 3033ba5a4c47cacfd5def020d42cabc52fad3099 --- misc.c | 23 ++++++++++++++++++++++- misc.h | 3 ++- mux.c | 26 +++++++------------------- readconf.c | 19 ++++--------------- readpass.c | 10 +++------- ssh-agent.c | 14 ++++---------- ssh.c | 48 ++++++++---------------------------------------- sshconnect.c | 28 +++++----------------------- sshd.c | 24 +++++------------------- 9 files changed, 60 insertions(+), 135 deletions(-) diff --git a/misc.c b/misc.c index 4623b5755912..b3a6a1cb7fe6 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.153 2020/06/26 05:16:38 djm Exp $ */ +/* $OpenBSD: misc.c,v 1.154 2020/10/03 09:22:26 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -2415,3 +2415,24 @@ ssh_signal(int signum, sshsig_t handler) } return osa.sa_handler; } + +int +stdfd_devnull(int do_stdin, int do_stdout, int do_stderr) +{ + int devnull, ret = 0; + + if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) { + error("%s: open %s: %s", __func__, _PATH_DEVNULL, + strerror(errno)); + return -1; + } + if ((do_stdin && dup2(devnull, STDIN_FILENO) == -1) || + (do_stdout && dup2(devnull, STDOUT_FILENO) == -1) || + (do_stderr && dup2(devnull, STDERR_FILENO) == -1)) { + error("%s: dup2: %s", __func__, strerror(errno)); + ret = -1; + } + if (devnull > STDERR_FILENO) + close(devnull); + return ret; +} diff --git a/misc.h b/misc.h index ab94a79c0e03..106539ec3f89 100644 --- a/misc.h +++ b/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.87 2020/05/29 11:17:56 dtucker Exp $ */ +/* $OpenBSD: misc.h,v 1.88 2020/10/03 09:22:26 djm Exp $ */ /* * Author: Tatu Ylonen @@ -90,6 +90,7 @@ const char *atoi_err(const char *, int *); int parse_absolute_time(const char *, uint64_t *); void format_absolute_time(uint64_t, char *, size_t); int path_absolute(const char *); +int stdfd_devnull(int, int, int); void sock_set_v6only(int); diff --git a/mux.c b/mux.c index 376f0d7119da..4dfcc712a732 100644 --- a/mux.c +++ b/mux.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mux.c,v 1.83 2020/07/05 23:59:45 djm Exp $ */ +/* $OpenBSD: mux.c,v 1.84 2020/10/03 09:22:26 djm Exp $ */ /* * Copyright (c) 2002-2008 Damien Miller * @@ -1902,7 +1902,7 @@ mux_client_request_session(int fd) const char *term; u_int echar, rid, sid, esid, exitval, type, exitval_seen; extern char **environ; - int r, i, devnull, rawmode; + int r, i, rawmode; debug3("%s: entering", __func__); @@ -1913,14 +1913,8 @@ mux_client_request_session(int fd) ssh_signal(SIGPIPE, SIG_IGN); - if (stdin_null_flag) { - if ((devnull = open(_PATH_DEVNULL, O_RDONLY)) == -1) - fatal("open(/dev/null): %s", strerror(errno)); - if (dup2(devnull, STDIN_FILENO) == -1) - fatal("dup2: %s", strerror(errno)); - if (devnull > STDERR_FILENO) - close(devnull); - } + if (stdin_null_flag && stdfd_devnull(1, 0, 0) == -1) + fatal("%s: stdfd_devnull failed", __func__); if ((term = getenv("TERM")) == NULL) term = ""; @@ -2137,7 +2131,7 @@ mux_client_request_stdio_fwd(int fd) struct sshbuf *m; char *e; u_int type, rid, sid; - int r, devnull; + int r; debug3("%s: entering", __func__); @@ -2148,14 +2142,8 @@ mux_client_request_stdio_fwd(int fd) ssh_signal(SIGPIPE, SIG_IGN); - if (stdin_null_flag) { - if ((devnull = open(_PATH_DEVNULL, O_RDONLY)) == -1) - fatal("open(/dev/null): %s", strerror(errno)); - if (dup2(devnull, STDIN_FILENO) == -1) - fatal("dup2: %s", strerror(errno)); - if (devnull > STDERR_FILENO) - close(devnull); - } + if (stdin_null_flag && stdfd_devnull(1, 0, 0) == -1) + fatal("%s: stdfd_devnull failed", __func__); if ((m = sshbuf_new()) == NULL) fatal("%s: sshbuf_new", __func__); diff --git a/readconf.c b/readconf.c index 1963a83bc57a..a4f6cba05194 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.336 2020/10/03 08:30:47 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.337 2020/10/03 09:22:26 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -509,7 +509,7 @@ execute_in_shell(const char *cmd) { char *shell; pid_t pid; - int devnull, status; + int status; if ((shell = getenv("SHELL")) == NULL) shell = _PATH_BSHELL; @@ -519,23 +519,14 @@ execute_in_shell(const char *cmd) shell, strerror(errno)); } - /* Need this to redirect subprocess stdin/out */ - if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) - fatal("open(/dev/null): %s", strerror(errno)); - debug("Executing command: '%.500s'", cmd); /* Fork and execute the command. */ if ((pid = fork()) == 0) { char *argv[4]; - /* Redirect child stdin and stdout. Leave stderr */ - if (dup2(devnull, STDIN_FILENO) == -1) - fatal("dup2: %s", strerror(errno)); - if (dup2(devnull, STDOUT_FILENO) == -1) - fatal("dup2: %s", strerror(errno)); - if (devnull > STDERR_FILENO) - close(devnull); + if (stdfd_devnull(1, 1, 0) == -1) + fatal("%s: stdfd_devnull failed", __func__); closefrom(STDERR_FILENO + 1); argv[0] = shell; @@ -554,8 +545,6 @@ execute_in_shell(const char *cmd) if (pid == -1) fatal("%s: fork: %.100s", __func__, strerror(errno)); - close(devnull); - while (waitpid(pid, &status, 0) == -1) { if (errno != EINTR && errno != EAGAIN) fatal("%s: waitpid: %s", __func__, strerror(errno)); diff --git a/readpass.c b/readpass.c index 122d2a87c465..7e79f49e40d7 100644 --- a/readpass.c +++ b/readpass.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readpass.c,v 1.63 2020/08/11 09:45:54 djm Exp $ */ +/* $OpenBSD: readpass.c,v 1.64 2020/10/03 09:22:26 djm Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * @@ -232,7 +232,6 @@ notify_start(int force_askpass, const char *fmt, ...) { va_list args; char *prompt = NULL; - int devnull; pid_t pid; void (*osigchld)(int); const char *askpass, *s; @@ -270,11 +269,8 @@ notify_start(int force_askpass, const char *fmt, ...) return NULL; } if (pid == 0) { - if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) - fatal("%s: open %s", __func__, strerror(errno)); - if (dup2(devnull, STDIN_FILENO) == -1 || - dup2(devnull, STDOUT_FILENO) == -1) - fatal("%s: dup2: %s", __func__, strerror(errno)); + if (stdfd_devnull(1, 1, 0) == -1) + fatal("%s: stdfd_devnull failed", __func__); closefrom(STDERR_FILENO + 1); setenv("SSH_ASKPASS_PROMPT", "none", 1); /* hint to UI */ execlp(askpass, askpass, prompt, (char *)NULL); diff --git a/ssh-agent.c b/ssh-agent.c index e1fd1f3f689a..853841b5fa00 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.264 2020/09/18 08:16:38 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.265 2020/10/03 09:22:26 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1273,7 +1273,7 @@ int main(int ac, char **av) { int c_flag = 0, d_flag = 0, D_flag = 0, k_flag = 0, s_flag = 0; - int sock, fd, ch, result, saved_errno; + int sock, ch, result, saved_errno; char *shell, *format, *pidstr, *agentsocket = NULL; #ifdef HAVE_SETRLIMIT struct rlimit rlim; @@ -1493,14 +1493,8 @@ main(int ac, char **av) } (void)chdir("/"); - if ((fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { - /* XXX might close listen socket */ - (void)dup2(fd, STDIN_FILENO); - (void)dup2(fd, STDOUT_FILENO); - (void)dup2(fd, STDERR_FILENO); - if (fd > 2) - close(fd); - } + if (stdfd_devnull(1, 1, 1) == -1) + error("%s: stdfd_devnull failed", __func__); #ifdef HAVE_SETRLIMIT /* deny core dumps, since memory contains unencrypted private keys */ diff --git a/ssh.c b/ssh.c index f34ca0d71c4d..0329e484712d 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.536 2020/09/21 07:29:09 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.537 2020/10/03 09:22:26 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1698,7 +1698,6 @@ static void control_persist_detach(void) { pid_t pid; - int devnull, keep_stderr; debug("%s: backgrounding master process", __func__); @@ -1725,18 +1724,8 @@ control_persist_detach(void) /* muxclient() doesn't return on success. */ fatal("Failed to connect to new control master"); } - if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) { - error("%s: open(\"/dev/null\"): %s", __func__, - strerror(errno)); - } else { - keep_stderr = log_is_on_stderr() && debug_flag; - if (dup2(devnull, STDIN_FILENO) == -1 || - dup2(devnull, STDOUT_FILENO) == -1 || - (!keep_stderr && dup2(devnull, STDERR_FILENO) == -1)) - error("%s: dup2: %s", __func__, strerror(errno)); - if (devnull > STDERR_FILENO) - close(devnull); - } + if (stdfd_devnull(1, 1, !(log_is_on_stderr() && debug_flag)) == -1) + error("%s: stdfd_devnull failed", __func__); daemon(1, 1); setproctitle("%s [mux]", options.control_path); } @@ -1745,26 +1734,14 @@ control_persist_detach(void) static void fork_postauth(void) { - int devnull, keep_stderr; - if (need_controlpersist_detach) control_persist_detach(); debug("forking to background"); fork_after_authentication_flag = 0; if (daemon(1, 1) == -1) fatal("daemon() failed: %.200s", strerror(errno)); - if ((devnull = open(_PATH_DEVNULL, O_WRONLY)) == -1) - error("%s: open %s: %s", __func__, - _PATH_DEVNULL, strerror(errno)); - else { - keep_stderr = log_is_on_stderr() && debug_flag; - if (dup2(devnull, STDIN_FILENO) == -1 || - dup2(devnull, STDOUT_FILENO) == -1 || - (!keep_stderr && dup2(devnull, STDOUT_FILENO) == -1)) - fatal("%s: dup2() stdio failed", __func__); - if (devnull > STDERR_FILENO) - close(devnull); - } + if (stdfd_devnull(1, 1, !(log_is_on_stderr() && debug_flag)) == -1) + error("%s: stdfd_devnull failed", __func__); } static void @@ -2075,7 +2052,7 @@ ssh_session2_open(struct ssh *ssh) static int ssh_session2(struct ssh *ssh, struct passwd *pw) { - int r, devnull, id = -1; + int r, id = -1; char *cp, *tun_fwd_ifname = NULL; /* XXX should be pre-session */ @@ -2162,17 +2139,8 @@ ssh_session2(struct ssh *ssh, struct passwd *pw) * NB. this can only happen after LocalCommand has completed, * as it may want to write to stdout. */ - if (!need_controlpersist_detach) { - if ((devnull = open(_PATH_DEVNULL, O_WRONLY)) == -1) { - error("%s: open %s: %s", __func__, - _PATH_DEVNULL, strerror(errno)); - } else { - if (dup2(devnull, STDOUT_FILENO) == -1) - fatal("%s: dup2() stdout failed", __func__); - if (devnull > STDERR_FILENO) - close(devnull); - } - } + if (!need_controlpersist_detach && stdfd_devnull(0, 1, 0) == -1) + error("%s: stdfd_devnull failed", __func__); /* * If requested and we are not interested in replies to remote diff --git a/sshconnect.c b/sshconnect.c index 3c80756bc9ac..b87dc0993b49 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.333 2020/10/03 08:11:28 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.334 2020/10/03 09:22:26 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -105,24 +105,6 @@ expand_proxy_command(const char *proxy_command, const char *user, return ret; } -static void -stderr_null(void) -{ - int devnull; - - if ((devnull = open(_PATH_DEVNULL, O_WRONLY)) == -1) { - error("Can't open %s for stderr redirection: %s", - _PATH_DEVNULL, strerror(errno)); - return; - } - if (devnull == STDERR_FILENO) - return; - if (dup2(devnull, STDERR_FILENO) == -1) - error("Cannot redirect stderr to %s", _PATH_DEVNULL); - if (devnull > STDERR_FILENO) - close(devnull); -} - /* * Connect to the given ssh server using a proxy command that passes a * a connected fd back to us. @@ -169,8 +151,8 @@ ssh_proxy_fdpass_connect(struct ssh *ssh, const char *host, * error messages may be printed on the user's terminal. */ if (!debug_flag && options.control_path != NULL && - options.control_persist) - stderr_null(); + options.control_persist && stdfd_devnull(0, 0, 1) == -1) + error("%s: stdfd_devnull failed", __func__); argv[0] = shell; argv[1] = "-c"; @@ -252,8 +234,8 @@ ssh_proxy_connect(struct ssh *ssh, const char *host, const char *host_arg, * error messages may be printed on the user's terminal. */ if (!debug_flag && options.control_path != NULL && - options.control_persist) - stderr_null(); + options.control_persist && stdfd_devnull(0, 0, 1) == -1) + error("%s: stdfd_devnull failed", __func__); argv[0] = shell; argv[1] = "-c"; diff --git a/sshd.c b/sshd.c index 8aa7f3df61b8..6c990759e928 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.561 2020/08/27 01:06:19 djm Exp $ */ +/* $OpenBSD: sshd.c,v 1.562 2020/10/03 09:22:26 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1024,8 +1024,6 @@ recv_rexec_state(int fd, struct sshbuf *conf) static void server_accept_inetd(int *sock_in, int *sock_out) { - int fd; - if (rexeced_flag) { close(REEXEC_CONFIG_PASS_FD); *sock_in = *sock_out = dup(STDIN_FILENO); @@ -1038,14 +1036,8 @@ server_accept_inetd(int *sock_in, int *sock_out) * as our code for setting the descriptors won't work if * ttyfd happens to be one of those. */ - if ((fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { - dup2(fd, STDIN_FILENO); - dup2(fd, STDOUT_FILENO); - if (!log_stderr) - dup2(fd, STDERR_FILENO); - if (fd > (log_stderr ? STDERR_FILENO : STDOUT_FILENO)) - close(fd); - } + if (stdfd_devnull(1, 1, !log_stderr) == -1) + error("%s: stdfd_devnull failed", __func__); debug("inetd sockets after dupping: %d, %d", *sock_in, *sock_out); } @@ -2092,8 +2084,6 @@ main(int ac, char **av) #endif if (rexec_flag) { - int fd; - debug("rexec start in %d out %d newsock %d pipe %d sock %d", sock_in, sock_out, newsock, startup_pipe, config_s[0]); dup2(newsock, STDIN_FILENO); @@ -2121,12 +2111,8 @@ main(int ac, char **av) /* Clean up fds */ close(REEXEC_CONFIG_PASS_FD); newsock = sock_out = sock_in = dup(STDIN_FILENO); - if ((fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { - dup2(fd, STDIN_FILENO); - dup2(fd, STDOUT_FILENO); - if (fd > STDERR_FILENO) - close(fd); - } + if (stdfd_devnull(1, 1, 0) == -1) + error("%s: stdfd_devnull failed", __func__); debug("rexec cleanup in %d out %d newsock %d pipe %d sock %d", sock_in, sock_out, newsock, startup_pipe, config_s[0]); } From 2d39fc9f7e039351daa3d6aead1538ac29258add Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sun, 4 Oct 2020 03:04:02 +0000 Subject: [PATCH 0015/1788] upstream: Allow full range of UIDs and GIDs for sftp chown and chgrp on 32bit platforms instead of being limited by LONG_MAX. bz#3206, found by booking00 at sina.cn, ok markus@ OpenBSD-Commit-ID: 373b7bbf1f15ae482d39567ce30d18b51c9229b5 --- sftp.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sftp.c b/sftp.c index c88c861185be..e09307b1a02e 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.201 2020/08/03 02:43:41 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.202 2020/10/04 03:04:02 dtucker Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -1330,7 +1330,7 @@ parse_args(const char **cpp, int *ignore_errors, int *disable_echo, int *aflag, const char *cmd, *cp = *cpp; char *cp2, **argv; int base = 0; - long l; + long long ll; int path1_mandatory = 0, i, cmdnum, optidx, argc; /* Skip leading whitespace */ @@ -1488,16 +1488,16 @@ parse_args(const char **cpp, int *ignore_errors, int *disable_echo, int *aflag, if (argc - optidx < 1) goto need_num_arg; errno = 0; - l = strtol(argv[optidx], &cp2, base); + ll = strtoll(argv[optidx], &cp2, base); if (cp2 == argv[optidx] || *cp2 != '\0' || - ((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE) || - l < 0) { + ((ll == LLONG_MIN || ll == LLONG_MAX) && errno == ERANGE) || + ll < 0 || ll > UINT32_MAX) { need_num_arg: error("You must supply a numeric argument " "to the %s command.", cmd); return -1; } - *n_arg = l; + *n_arg = ll; if (cmdnum == I_LUMASK) break; /* Get pathname (mandatory) */ From af889a40ffc113af9105c03d7b32131eb4372d50 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 4 Oct 2020 09:45:01 +0000 Subject: [PATCH 0016/1788] upstream: when ordering host key algorithms in the client, consider the ECDSA key subtype; ok markus@ OpenBSD-Commit-ID: 3097686f853c61ff61772ea35f8b699931392ece --- hostfile.c | 14 +++++++++----- hostfile.h | 4 ++-- sshconnect.c | 5 +++-- sshconnect2.c | 8 +++++--- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/hostfile.c b/hostfile.c index 936d8c9be8a2..00462555f8ba 100644 --- a/hostfile.c +++ b/hostfile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.c,v 1.82 2020/06/26 05:42:16 djm Exp $ */ +/* $OpenBSD: hostfile.c,v 1.83 2020/10/04 09:45:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -338,7 +338,7 @@ check_key_not_revoked(struct hostkeys *hostkeys, struct sshkey *k) */ static HostStatus check_hostkeys_by_key_or_type(struct hostkeys *hostkeys, - struct sshkey *k, int keytype, const struct hostkey_entry **found) + struct sshkey *k, int keytype, int nid, const struct hostkey_entry **found) { u_int i; HostStatus end_return = HOST_NEW; @@ -354,6 +354,10 @@ check_hostkeys_by_key_or_type(struct hostkeys *hostkeys, if (k == NULL) { if (hostkeys->entries[i].key->type != keytype) continue; + if (nid != -1 && + sshkey_type_plain(keytype) == KEY_ECDSA && + hostkeys->entries[i].key->ecdsa_nid != nid) + continue; end_return = HOST_FOUND; if (found != NULL) *found = hostkeys->entries + i; @@ -396,14 +400,14 @@ check_key_in_hostkeys(struct hostkeys *hostkeys, struct sshkey *key, { if (key == NULL) fatal("no key to look up"); - return check_hostkeys_by_key_or_type(hostkeys, key, 0, found); + return check_hostkeys_by_key_or_type(hostkeys, key, 0, -1, found); } int -lookup_key_in_hostkeys_by_type(struct hostkeys *hostkeys, int keytype, +lookup_key_in_hostkeys_by_type(struct hostkeys *hostkeys, int keytype, int nid, const struct hostkey_entry **found) { - return (check_hostkeys_by_key_or_type(hostkeys, NULL, keytype, + return (check_hostkeys_by_key_or_type(hostkeys, NULL, keytype, nid, found) == HOST_FOUND); } diff --git a/hostfile.h b/hostfile.h index de8b677e38c0..7ea31444db81 100644 --- a/hostfile.h +++ b/hostfile.h @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.h,v 1.26 2020/06/26 05:02:03 dtucker Exp $ */ +/* $OpenBSD: hostfile.h,v 1.27 2020/10/04 09:45:01 djm Exp $ */ /* * Author: Tatu Ylonen @@ -37,7 +37,7 @@ void free_hostkeys(struct hostkeys *); HostStatus check_key_in_hostkeys(struct hostkeys *, struct sshkey *, const struct hostkey_entry **); -int lookup_key_in_hostkeys_by_type(struct hostkeys *, int, +int lookup_key_in_hostkeys_by_type(struct hostkeys *, int, int, const struct hostkey_entry **); int lookup_marker_in_hostkeys(struct hostkeys *, int); diff --git a/sshconnect.c b/sshconnect.c index b87dc0993b49..31e012df2975 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.334 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.335 2020/10/04 09:45:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1336,7 +1336,8 @@ show_other_keys(struct hostkeys *hostkeys, struct sshkey *key) for (i = 0; type[i] != -1; i++) { if (type[i] == key->type) continue; - if (!lookup_key_in_hostkeys_by_type(hostkeys, type[i], &found)) + if (!lookup_key_in_hostkeys_by_type(hostkeys, type[i], + -1, &found)) continue; fp = sshkey_fingerprint(found->key, options.fingerprint_hash, SSH_FP_DEFAULT); diff --git a/sshconnect2.c b/sshconnect2.c index 44d7e68227ac..ec539afb3ea0 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.327 2020/10/03 08:11:28 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.328 2020/10/04 09:45:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -146,7 +146,8 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) */ best = first_alg(options.hostkeyalgorithms); if (lookup_key_in_hostkeys_by_type(hostkeys, - sshkey_type_plain(sshkey_type_from_name(best)), NULL)) { + sshkey_type_plain(sshkey_type_from_name(best)), + sshkey_ecdsa_nid_from_name(best), NULL)) { debug3("%s: have matching best-preference key type %s, " "using HostkeyAlgorithms verbatim", __func__, best); ret = xstrdup(options.hostkeyalgorithms); @@ -184,7 +185,8 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) } /* If the key appears in known_hosts then prefer it */ if (lookup_key_in_hostkeys_by_type(hostkeys, - sshkey_type_plain(ktype), NULL)) { + sshkey_type_plain(ktype), + sshkey_ecdsa_nid_from_name(alg), NULL)) { ALG_APPEND(first, alg); continue; } From 3d4c2016bae1a6f14b48c1150a4c79ca4c9968bd Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Tue, 6 Oct 2020 07:12:04 +0000 Subject: [PATCH 0017/1788] upstream: Agent protocol draft is now at rev 4. ok djm@ OpenBSD-Commit-ID: 8c01ea3aae48aab45e01b7421b0fca2dad5e7837 --- PROTOCOL.agent | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/PROTOCOL.agent b/PROTOCOL.agent index 6947b46cd361..ed47146a30ee 100644 --- a/PROTOCOL.agent +++ b/PROTOCOL.agent @@ -1,7 +1,5 @@ This file used to contain a description of the SSH agent protocol -implemented by OpenSSH. It has since been superseded by an Internet- -draft that is available from: +implemented by OpenSSH. It has since been superseded by +https://tools.ietf.org/html/draft-miller-ssh-agent-04 -$OpenBSD: PROTOCOL.agent,v 1.13 2020/08/31 00:17:41 djm Exp $ - -https://tools.ietf.org/html/draft-miller-ssh-agent-02 +$OpenBSD: PROTOCOL.agent,v 1.14 2020/10/06 07:12:04 dtucker Exp $ From e79957e877db42c4c68fabcf6ecff2268e53acb5 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 7 Oct 2020 02:18:45 +0000 Subject: [PATCH 0018/1788] upstream: disable UpdateHostkeys by default if VerifyHostKeyDNS is enabled; suggested by Mark D. Baushke OpenBSD-Commit-ID: 85a1b88592c81bc85df7ee7787dbbe721a0542bf --- readconf.c | 7 ++++--- ssh_config.5 | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/readconf.c b/readconf.c index a4f6cba05194..8655646b47f4 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.337 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.338 2020/10/07 02:18:45 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2168,9 +2168,10 @@ fill_default_options(Options * options) xstrdup(_PATH_SSH_SYSTEM_HOSTFILE2); } if (options->update_hostkeys == -1) { - if (options->num_user_hostfiles == 0 || + if (options->verify_host_key_dns <= 0 && + (options->num_user_hostfiles == 0 || (options->num_user_hostfiles == 1 && strcmp(options-> - user_hostfiles[0], _PATH_SSH_USER_HOSTFILE) == 0)) + user_hostfiles[0], _PATH_SSH_USER_HOSTFILE) == 0))) options->update_hostkeys = SSH_UPDATE_HOSTKEYS_YES; else options->update_hostkeys = SSH_UPDATE_HOSTKEYS_NO; diff --git a/ssh_config.5 b/ssh_config.5 index e085efffce75..2f1886a1b07d 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.334 2020/10/03 08:30:47 djm Exp $ -.Dd $Mdocdate: October 3 2020 $ +.\" $OpenBSD: ssh_config.5,v 1.335 2020/10/07 02:18:45 djm Exp $ +.Dd $Mdocdate: October 7 2020 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1723,7 +1723,9 @@ host was already trusted or explicitly accepted by the user. .Cm UpdateHostKeys is enabled by default if the user has not overridden the default .Cm UserKnownHostsFile -setting, otherwise +setting and has not enabled +.Cm VerifyHostKeyDNS , +otherwise .Cm UpdateHostKeys will be set to .Cm no . From f4f14e023cafee1cd9ebe4bb0db4029e6e1fafac Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 7 Oct 2020 02:20:35 +0000 Subject: [PATCH 0019/1788] upstream: simply disable UpdateHostkeys when a certificate successfully authenticated the host; simpler than the complicated plumbing via kex->flags we have now. ok markus@ OpenBSD-Commit-ID: 80e39644eed75717d563a7f177e8117a0e14f42c --- sshconnect.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sshconnect.c b/sshconnect.c index 31e012df2975..ba07a5ff3a1d 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.335 2020/10/04 09:45:01 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.336 2020/10/07 02:20:35 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -609,7 +609,12 @@ check_host_cert(const char *host, const struct sshkey *key) "(null)" : key->cert->signature_type, ssh_err(r)); return 0; } - + /* Do not attempt hostkey update if a certificate was successful */ + if (options.update_hostkeys != 0) { + options.update_hostkeys = 0; + debug3("%s: certificate host key in use; disabling " + "UpdateHostkeys", __func__); + } return 1; } From aa623142e426ca1ab9db77b06dcc9b1b70bd102b Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 7 Oct 2020 02:22:23 +0000 Subject: [PATCH 0020/1788] upstream: revert kex->flags cert hostkey downgrade back to a plain key (commitid VtF8vozGOF8DMKVg). We now do this a simpler way that needs less plumbing. ok markus@ OpenBSD-Commit-ID: fb92d25b216bff8c136da818ac2221efaadf18ed --- clientloop.c | 8 +------- kex.h | 8 +++----- sshconnect.c | 55 +++++++++++---------------------------------------- sshconnect.h | 4 ++-- sshconnect2.c | 9 ++------- 5 files changed, 20 insertions(+), 64 deletions(-) diff --git a/clientloop.c b/clientloop.c index de13adab9e54..975a85ef9850 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.347 2020/10/03 08:12:59 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.348 2020/10/07 02:22:23 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2227,12 +2227,6 @@ client_input_hostkeys(struct ssh *ssh) debug("%s: wildcard known hosts name found, " "skipping UserKnownHostsFile update", __func__); goto out; - } else if (sshkey_type_is_cert(ssh->kex->hostkey_type) && - ctx->ca_available && - (ssh->kex->flags & KEX_HOSTCERT_CONVERT) == 0) { - debug("%s: server offered certificate host key, " - "skipping UserKnownHostsFile update", __func__); - goto out; } else if (ctx->nnew == 0 && ctx->nold != 0) { /* We have some keys to remove. Just do it. */ update_known_hosts(ctx); diff --git a/kex.h b/kex.h index 07cec477f1bd..0c405e33c95b 100644 --- a/kex.h +++ b/kex.h @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.h,v 1.110 2020/10/03 08:11:28 djm Exp $ */ +/* $OpenBSD: kex.h,v 1.111 2020/10/07 02:22:23 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. @@ -105,10 +105,8 @@ enum kex_exchange { KEX_MAX }; -/* kex->flags values */ -#define KEX_INIT_SENT 0x0001 /* KEXINIT sent */ -#define KEX_INITIAL 0x0002 /* Initial KEX, not rekey */ -#define KEX_HOSTCERT_CONVERT 0x0004 /* Client downgraded hostcert->plain */ +#define KEX_INIT_SENT 0x0001 +#define KEX_INITIAL 0x0002 struct sshenc { char *name; diff --git a/sshconnect.c b/sshconnect.c index ba07a5ff3a1d..4591e6a6ead8 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.336 2020/10/07 02:20:35 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.337 2020/10/07 02:22:23 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -694,10 +694,6 @@ get_hostfile_hostname_ipaddr(char *hostname, struct sockaddr *hostaddr, /* * check whether the supplied host key is valid, return -1 if the key * is not valid. user_hostfile[0] will not be updated if 'readonly' is true. - * - * If cert_fallbackp is not NULL then will attempt to convert certificate host - * keys to plain keys if no certificate match was found and will return - * non-zero via *cert_fallbackp if this fall-back was used. */ #define RDRW 0 #define RDONLY 1 @@ -706,7 +702,7 @@ static int check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, struct sshkey *host_key, int readonly, char **user_hostfiles, u_int num_user_hostfiles, - char **system_hostfiles, u_int num_system_hostfiles, int *cert_fallbackp) + char **system_hostfiles, u_int num_system_hostfiles) { HostStatus host_status; HostStatus ip_status; @@ -717,15 +713,12 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, const char *type; const struct hostkey_entry *host_found, *ip_found; int len, cancelled_forwarding = 0, confirmed; - int local = sockaddr_is_local(hostaddr), cert_fallback = 0; + int local = sockaddr_is_local(hostaddr); int r, want_cert = sshkey_is_cert(host_key), host_ip_differ = 0; int hostkey_trusted = 0; /* Known or explicitly accepted by user */ struct hostkeys *host_hostkeys, *ip_hostkeys; u_int i; - if (cert_fallbackp != NULL) - *cert_fallbackp = 0; - /* * Force accepting of the host key for loopback/localhost. The * problem is that if the home directory is NFS-mounted to multiple @@ -841,15 +834,9 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, if (options.host_key_alias == NULL && port != 0 && port != SSH_DEFAULT_PORT) { debug("checking without port identifier"); - /* - * NB. do not perform cert->key fallback in this - * recursive call. Fallback will only be performed in - * the top-level call. - */ if (check_host_key(hostname, hostaddr, 0, host_key, ROQUIET, user_hostfiles, num_user_hostfiles, - system_hostfiles, num_system_hostfiles, - NULL) == 0) { + system_hostfiles, num_system_hostfiles) == 0) { debug("found matching key w/out port"); break; } @@ -1126,13 +1113,10 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, free_hostkeys(host_hostkeys); if (ip_hostkeys != NULL) free_hostkeys(ip_hostkeys); - if (cert_fallbackp != NULL) - *cert_fallbackp = cert_fallback; return 0; fail: - if (cert_fallbackp != NULL && want_cert && - host_status != HOST_REVOKED) { + if (want_cert && host_status != HOST_REVOKED) { /* * No matching certificate. Downgrade cert to raw key and * search normally. @@ -1144,7 +1128,6 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, if ((r = sshkey_drop_cert(raw_key)) != 0) fatal("Couldn't drop certificate: %s", ssh_err(r)); host_key = raw_key; - cert_fallback = 1; goto retry; } sshkey_free(raw_key); @@ -1157,24 +1140,15 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, return -1; } -/* - * returns 0 if key verifies or -1 if key does NOT verify. - * - * If the host key was a certificate that was downgraded to a plain key in - * the process of matching, then cert_fallbackp will be non-zero. - */ +/* returns 0 if key verifies or -1 if key does NOT verify */ int -verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key, - int *cert_fallbackp) +verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) { u_int i; - int r = -1, flags = 0, cert_fallback = 0; + int r = -1, flags = 0; char valid[64], *fp = NULL, *cafp = NULL; struct sshkey *plain = NULL; - if (cert_fallbackp != NULL) - *cert_fallbackp = 0; - if ((fp = sshkey_fingerprint(host_key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { error("%s: fingerprint host key: %s", __func__, ssh_err(r)); @@ -1265,20 +1239,15 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key, } r = check_host_key(host, hostaddr, options.port, host_key, RDRW, options.user_hostfiles, options.num_user_hostfiles, - options.system_hostfiles, options.num_system_hostfiles, - &cert_fallback); + options.system_hostfiles, options.num_system_hostfiles); out: sshkey_free(plain); free(fp); free(cafp); - if (r == 0) { - if (host_key != NULL) { - sshkey_free(previous_host_key); - r = sshkey_from_private(host_key, &previous_host_key); - } - if (r == 0 && cert_fallbackp != NULL) - *cert_fallbackp = cert_fallback; + if (r == 0 && host_key != NULL) { + sshkey_free(previous_host_key); + r = sshkey_from_private(host_key, &previous_host_key); } return r; diff --git a/sshconnect.h b/sshconnect.h index 6d63075e9638..b2fbf157915b 100644 --- a/sshconnect.h +++ b/sshconnect.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.h,v 1.41 2020/10/03 08:11:28 djm Exp $ */ +/* $OpenBSD: sshconnect.h,v 1.42 2020/10/07 02:22:23 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -41,7 +41,7 @@ void ssh_kill_proxy_command(void); void ssh_login(struct ssh *, Sensitive *, const char *, struct sockaddr *, u_short, struct passwd *, int); -int verify_host_key(char *, struct sockaddr *, struct sshkey *, int *); +int verify_host_key(char *, struct sockaddr *, struct sshkey *); void get_hostfile_hostname_ipaddr(char *, struct sockaddr *, u_short, char **, char **); diff --git a/sshconnect2.c b/sshconnect2.c index ec539afb3ea0..6da2248f59dd 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.328 2020/10/04 09:45:01 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.329 2020/10/07 02:22:23 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -97,13 +97,8 @@ struct sockaddr *xxx_hostaddr; static int verify_host_key_callback(struct sshkey *hostkey, struct ssh *ssh) { - int cert_downgraded = 0; - - if (verify_host_key(xxx_host, xxx_hostaddr, hostkey, - &cert_downgraded) == -1) + if (verify_host_key(xxx_host, xxx_hostaddr, hostkey) == -1) fatal("Host key verification failed."); - if (cert_downgraded) - ssh->kex->flags |= KEX_HOSTCERT_CONVERT; return 0; } From b70e33711291f3081702133175a41cccafc0212a Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 7 Oct 2020 02:24:51 +0000 Subject: [PATCH 0021/1788] upstream: don't UpdateHostkeys when the hostkey is verified by the GlobalKnownHostsFile file, support only UserKnownHostsFile matches suggested by Mark D. Baushke; feedback and ok markus@ OpenBSD-Commit-ID: eabb771a6add676c398d38a143a1aff5f04abbb9 --- sshconnect.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/sshconnect.c b/sshconnect.c index 4591e6a6ead8..c055773f1f89 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.337 2020/10/07 02:22:23 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.338 2020/10/07 02:24:51 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -691,6 +691,19 @@ get_hostfile_hostname_ipaddr(char *hostname, struct sockaddr *hostaddr, } } +/* returns non-zero if path appears in hostfiles, or 0 if not. */ +static int +path_in_hostfiles(const char *path, char **hostfiles, u_int num_hostfiles) +{ + u_int i; + + for (i = 0; i < num_hostfiles; i++) { + if (strcmp(path, hostfiles[i]) == 0) + return 1; + } + return 0; +} + /* * check whether the supplied host key is valid, return -1 if the key * is not valid. user_hostfile[0] will not be updated if 'readonly' is true. @@ -704,14 +717,13 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, char **user_hostfiles, u_int num_user_hostfiles, char **system_hostfiles, u_int num_system_hostfiles) { - HostStatus host_status; - HostStatus ip_status; + HostStatus host_status = -1, ip_status = -1; struct sshkey *raw_key = NULL; char *ip = NULL, *host = NULL; char hostline[1000], *hostp, *fp, *ra; char msg[1024]; const char *type; - const struct hostkey_entry *host_found, *ip_found; + const struct hostkey_entry *host_found = NULL, *ip_found = NULL; int len, cancelled_forwarding = 0, confirmed; int local = sockaddr_is_local(hostaddr); int r, want_cert = sshkey_is_cert(host_key), host_ip_differ = 0; @@ -731,6 +743,7 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, options.host_key_alias == NULL) { debug("Forcing accepting of host key for " "loopback/localhost."); + options.update_hostkeys = 0; return 0; } @@ -802,6 +815,17 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, !check_host_cert(options.host_key_alias == NULL ? hostname : options.host_key_alias, host_key)) goto fail; + /* Turn off UpdateHostkeys if key was in system known_hosts */ + if (options.update_hostkeys != 0 && + (path_in_hostfiles(host_found->file, + system_hostfiles, num_system_hostfiles) || + (ip_status == HOST_OK && ip_found != NULL && + path_in_hostfiles(ip_found->file, + system_hostfiles, num_system_hostfiles)))) { + options.update_hostkeys = 0; + debug3("%s: host key found in GlobalKnownHostsFile; " + "disabling UpdateHostkeys", __func__); + } if (options.check_host_ip && ip_status == HOST_NEW) { if (readonly || want_cert) logit("%s host key for IP address " From 04c06d04475f1f673e9d9743710d194453fe3888 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 7 Oct 2020 02:25:43 +0000 Subject: [PATCH 0022/1788] upstream: Fix UpdateHostkeys/HashKnownHosts/CheckHostIP bug When all of UpdateHostkeys, HashKnownHosts and ChechHostIP were enabled and new host keys were learned, known_hosts IP entries were not being recorded for new host keys. reported by matthieu@ ok markus@ OpenBSD-Commit-ID: a654a8290bd1c930aac509e8158cf85e42e49cb7 --- hostfile.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hostfile.c b/hostfile.c index 00462555f8ba..650ad66f7f9f 100644 --- a/hostfile.c +++ b/hostfile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.c,v 1.83 2020/10/04 09:45:01 djm Exp $ */ +/* $OpenBSD: hostfile.c,v 1.84 2020/10/07 02:25:43 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -451,6 +451,9 @@ write_host_entry(FILE *f, const char *host, const char *ip, else error("%s: sshkey_write failed: %s", __func__, ssh_err(r)); fputc('\n', f); + /* If hashing is enabled, the IP address needs to go on its own line */ + if (success && store_hash && ip != NULL) + success = write_host_entry(f, ip, NULL, key, 1); return success; } From 4aa2717d7517cff4bc423a6cfba3a2defb055aea Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 7 Oct 2020 02:26:28 +0000 Subject: [PATCH 0023/1788] upstream: Disable UpdateHostkeys when hostkey checking fails If host key checking fails (i.e. a wrong host key is recorded for the server) and the user elects to continue (via StrictHostKeyChecking=no), then disable UpdateHostkeys for the session. reminded by Mark D. Baushke; ok markus@ OpenBSD-Commit-ID: 98b524f121f4252309dd21becd8c4cacb0c6042a --- sshconnect.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sshconnect.c b/sshconnect.c index c055773f1f89..d73cecc80951 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.338 2020/10/07 02:24:51 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.339 2020/10/07 02:26:28 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1079,6 +1079,11 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, options.tun_open = SSH_TUNMODE_NO; cancelled_forwarding = 1; } + if (options.update_hostkeys != 0) { + error("UpdateHostkeys is disabled because the host " + "key is not trusted."); + options.update_hostkeys = 0; + } if (options.exit_on_forward_failure && cancelled_forwarding) fatal("Error: forwarding disabled due to host key " "check failure"); From e8dfca9bfeff05de87160407fb3e6a5717fa3dcb Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 7 Oct 2020 06:38:16 +0000 Subject: [PATCH 0024/1788] upstream: remove GlobalKnownHostsFile for this test after UpdateHostkeys change OpenBSD-Regress-ID: a940ad79d59343319613ba8fc46b6ef24aa3f8e1 --- regress/hostkey-rotate.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/regress/hostkey-rotate.sh b/regress/hostkey-rotate.sh index c3e100c3eb10..2852c457c259 100644 --- a/regress/hostkey-rotate.sh +++ b/regress/hostkey-rotate.sh @@ -1,12 +1,15 @@ -# $OpenBSD: hostkey-rotate.sh,v 1.8 2019/11/26 23:43:10 djm Exp $ +# $OpenBSD: hostkey-rotate.sh,v 1.9 2020/10/07 06:38:16 djm Exp $ # Placed in the Public Domain. tid="hostkey rotate" -rm -f $OBJ/hkr.* $OBJ/ssh_proxy.orig +rm -f $OBJ/hkr.* $OBJ/ssh_proxy.orig $OBJ/ssh_proxy.orig grep -vi 'hostkey' $OBJ/sshd_proxy > $OBJ/sshd_proxy.orig +mv $OBJ/ssh_proxy $OBJ/ssh_proxy.orig +grep -vi 'globalknownhostsfile' $OBJ/ssh_proxy.orig > $OBJ/ssh_proxy echo "UpdateHostkeys=yes" >> $OBJ/ssh_proxy +echo "GlobalKnownHostsFile=none" >> $OBJ/ssh_proxy rm $OBJ/known_hosts # The "primary" key type is ed25519 since it's supported even when built From 3205eaa3f8883a34fa4559ddef6c90d1067c5cce Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 8 Oct 2020 00:31:05 +0000 Subject: [PATCH 0025/1788] upstream: clarify conditions for UpdateHostkeys OpenBSD-Commit-ID: 9cba714cf6aeed769f998ccbe8c483077a618e27 --- ssh_config.5 | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index 2f1886a1b07d..8e42776560d6 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.335 2020/10/07 02:18:45 djm Exp $ -.Dd $Mdocdate: October 7 2020 $ +.\" $OpenBSD: ssh_config.5,v 1.336 2020/10/08 00:31:05 djm Exp $ +.Dd $Mdocdate: October 8 2020 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1717,8 +1717,14 @@ or This option allows learning alternate hostkeys for a server and supports graceful key rotation by allowing a server to send replacement public keys before old ones are removed. +.Pp Additional hostkeys are only accepted if the key used to authenticate the -host was already trusted or explicitly accepted by the user. +host was already trusted or explicitly accepted by the user, the host was +authenticated via +.Cm UserKnownHostsFile +(i.e. not +.Cm GlobalKnownHostsFile ) +and the host was authenticated using a plain key and not a certificate. .Pp .Cm UpdateHostKeys is enabled by default if the user has not overridden the default From 67146c7d022a170be3cdad2f5f40259a663fb266 Mon Sep 17 00:00:00 2001 From: wangxp006 Date: Thu, 8 Oct 2020 17:49:59 +0800 Subject: [PATCH 0026/1788] fix TEST_MALLOC_OPTIONS var --- regress/connect-privsep.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regress/connect-privsep.sh b/regress/connect-privsep.sh index b6abb65e3566..76137b06087e 100644 --- a/regress/connect-privsep.sh +++ b/regress/connect-privsep.sh @@ -22,7 +22,7 @@ fi # Because sandbox is sensitive to changes in libc, especially malloc, retest # with every malloc.conf option (and none). -if [ -z "TEST_MALLOC_OPTIONS" ]; then +if [ -z "$TEST_MALLOC_OPTIONS" ]; then mopts="C F G J R S U X < >" else mopts=`echo $TEST_MALLOC_OPTIONS | sed 's/./& /g'` From 6247812c76f70b2245f3c23f5074665b3d436cae Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 8 Oct 2020 01:15:16 +0000 Subject: [PATCH 0027/1788] upstream: don't misdetect comma-separated hostkey names as wildcards; spotted by naddy@ OpenBSD-Commit-ID: 4b874edfec7fc324a21b130bdb42f912177739ce --- clientloop.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clientloop.c b/clientloop.c index 975a85ef9850..f3014b8d577f 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.348 2020/10/07 02:22:23 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.349 2020/10/08 01:15:16 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1872,9 +1872,9 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) /* UpdateHostkeys is skipped for wildcard host names */ if (strchr(l->hosts, '*') != NULL || - strchr(l->hosts, ',') != NULL) { - debug3("%s: hostkeys file %s:%ld contains wildcard or pattern", - __func__, l->path, l->linenum); + strchr(l->hosts, '?') != NULL) { + debug3("%s: hostkeys file %s:%ld contains wildcard", __func__, + l->path, l->linenum); ctx->wildcard_hostspec = 1; } From af5941ae9b013aac12585e84c4cf494f3728982f Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 11 Oct 2020 22:12:44 +0000 Subject: [PATCH 0028/1788] upstream: UpdateHostkeys: better detect manual host entries Disable UpdateHostkeys if the known_hosts line has more than two entries in the pattern-list. ssh(1) only writes "host" or "host,ip" lines so anything else was added by a different tool or by a human. ok markus@ OpenBSD-Commit-ID: e434828191fb5f3877d4887c218682825aa59820 --- clientloop.c | 54 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/clientloop.c b/clientloop.c index f3014b8d577f..9daec13cfaac 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.349 2020/10/08 01:15:16 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.350 2020/10/11 22:12:44 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1830,7 +1830,7 @@ struct hostkeys_update_ctx { size_t nold; /* Various special cases. */ - int wildcard_hostspec; /* saw wildcard or pattern-list host name */ + int complex_hostspec; /* wildcard or manual pattern-list host name */ int ca_available; /* saw CA key for this host */ }; @@ -1853,6 +1853,29 @@ hostkeys_update_ctx_free(struct hostkeys_update_ctx *ctx) free(ctx); } +/* + * Returns non-zero if a known_hosts hostname list is not of a form that + * can be handled by UpdateHostkeys. These include wildcard hostnames and + * hostnames lists that do not follow the form host[,ip]. + */ +static int +hostspec_is_complex(const char *hosts) +{ + char *cp; + + /* wildcard */ + if (strchr(hosts, '*') != NULL || strchr(hosts, '?') != NULL) + return 1; + /* single host/ip = ok */ + if ((cp = strchr(hosts, ',')) == NULL) + return 0; + /* more than two entries on the line */ + if (strchr(cp + 1, ',') != NULL) + return 1; + /* XXX maybe parse cp+1 and ensure it is an IP? */ + return 0; +} + static int hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) { @@ -1860,24 +1883,21 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) size_t i; struct sshkey **tmp; - if (l->status != HKF_STATUS_MATCHED || l->key == NULL) + if (l->status != HKF_STATUS_MATCHED || l->key == NULL || + l->marker != MRK_NONE) return 0; - if (l->marker == MRK_REVOKE) - return 0; - if (l->marker == MRK_CA) { - ctx->ca_available = 1; + /* + * UpdateHostkeys is skipped for wildcard host names and hostnames + * that contain more than two entries (ssh never writes these). + */ + if (hostspec_is_complex(l->hosts)) { + debug3("%s: hostkeys file %s:%ld complex host specification", + __func__, l->path, l->linenum); + ctx->complex_hostspec = 1; return 0; } - /* UpdateHostkeys is skipped for wildcard host names */ - if (strchr(l->hosts, '*') != NULL || - strchr(l->hosts, '?') != NULL) { - debug3("%s: hostkeys file %s:%ld contains wildcard", __func__, - l->path, l->linenum); - ctx->wildcard_hostspec = 1; - } - /* Mark off keys we've already seen for this host */ for (i = 0; i < ctx->nkeys; i++) { if (sshkey_equal(l->key, ctx->keys[i])) { @@ -2223,8 +2243,8 @@ client_input_hostkeys(struct ssh *ssh) debug3("%s: %zu keys from server: %zu new, %zu retained. %zu to remove", __func__, ctx->nkeys, ctx->nnew, ctx->nkeys - ctx->nnew, ctx->nold); - if (ctx->wildcard_hostspec && (ctx->nnew != 0 || ctx->nold != 0)) { - debug("%s: wildcard known hosts name found, " + if (ctx->complex_hostspec && (ctx->nnew != 0 || ctx->nold != 0)) { + debug("%s: manual list or wildcard host pattern found, " "skipping UserKnownHostsFile update", __func__); goto out; } else if (ctx->nnew == 0 && ctx->nold != 0) { From d98f14b5328922ae3085e07007d820c4f655b57a Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 11 Oct 2020 22:13:37 +0000 Subject: [PATCH 0029/1788] upstream: UpdateHostkeys: better CheckHostIP handling When preparing to update the known_hosts file, fully check both entries for both the host and the address (if CheckHostIP enabled) and ensure that, at the end of the operation, entries for both are recorded. Make sure this works with HashKnownHosts too, which requires maintaining a list of entry-types seen across the whole file for each key. ok markus@ OpenBSD-Commit-ID: 374dc263103f6b343d9671f87dbf81ffd0d6abdd --- clientloop.c | 71 +++++++++++++++++++++++++++++++----------------- hostfile.c | 77 +++++++++++++++++++++++++++++++++------------------- 2 files changed, 95 insertions(+), 53 deletions(-) diff --git a/clientloop.c b/clientloop.c index 9daec13cfaac..a4a53dd1947f 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.350 2020/10/11 22:12:44 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.351 2020/10/11 22:13:37 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1814,12 +1814,13 @@ struct hostkeys_update_ctx { /* * Keys received from the server and a flag for each indicating * whether they already exist in known_hosts. - * keys_seen is filled in by hostkeys_find() and later (for new + * keys_match is filled in by hostkeys_find() and later (for new * keys) by client_global_hostkeys_private_confirm(). */ struct sshkey **keys; - int *keys_seen; - size_t nkeys, nnew; + u_int *keys_match; /* mask of HKF_MATCH_* from hostfile.h */ + int *keys_verified; /* flag for new keys verified by server */ + size_t nkeys, nnew, nincomplete; /* total, new keys, incomplete match */ /* * Keys that are in known_hosts, but were not present in the update @@ -1844,7 +1845,8 @@ hostkeys_update_ctx_free(struct hostkeys_update_ctx *ctx) for (i = 0; i < ctx->nkeys; i++) sshkey_free(ctx->keys[i]); free(ctx->keys); - free(ctx->keys_seen); + free(ctx->keys_match); + free(ctx->keys_verified); for (i = 0; i < ctx->nold; i++) sshkey_free(ctx->old_keys[i]); free(ctx->old_keys); @@ -1900,12 +1902,12 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) /* Mark off keys we've already seen for this host */ for (i = 0; i < ctx->nkeys; i++) { - if (sshkey_equal(l->key, ctx->keys[i])) { - debug3("%s: found %s key at %s:%ld", __func__, - sshkey_ssh_name(ctx->keys[i]), l->path, l->linenum); - ctx->keys_seen[i] = 1; - return 0; - } + if (!sshkey_equal(l->key, ctx->keys[i])) + continue; + debug3("%s: found %s key at %s:%ld", __func__, + sshkey_ssh_name(ctx->keys[i]), l->path, l->linenum); + ctx->keys_match[i] |= l->match; + return 0; } /* This line contained a key that not offered by the server */ debug3("%s: deprecated %s key at %s:%ld", __func__, @@ -1940,7 +1942,7 @@ update_known_hosts(struct hostkeys_update_ctx *ctx) struct stat sb; for (i = 0; i < ctx->nkeys; i++) { - if (ctx->keys_seen[i] != 2) + if (!ctx->keys_verified[i]) continue; if ((fp = sshkey_fingerprint(ctx->keys[i], options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) @@ -2053,10 +2055,10 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, /* * Expect a signature for each of the ctx->nnew private keys we * haven't seen before. They will be in the same order as the - * ctx->keys where the corresponding ctx->keys_seen[i] == 0. + * ctx->keys where the corresponding ctx->keys_match[i] == 0. */ for (ndone = i = 0; i < ctx->nkeys; i++) { - if (ctx->keys_seen[i]) + if (ctx->keys_match[i]) continue; /* Prepare data to be signed: session ID, unique string, key */ sshbuf_reset(signdata); @@ -2088,7 +2090,7 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, goto out; } /* Key is good. Mark it as 'seen' */ - ctx->keys_seen[i] = 2; + ctx->keys_verified[i] = 1; ndone++; } if (ndone != ctx->nnew) @@ -2141,6 +2143,7 @@ client_input_hostkeys(struct ssh *ssh) static int hostkeys_seen = 0; /* XXX use struct ssh */ extern struct sockaddr_storage hostaddr; /* XXX from ssh.c */ struct hostkeys_update_ctx *ctx = NULL; + u_int want; if (hostkeys_seen) fatal("%s: server already sent hostkeys", __func__); @@ -2205,8 +2208,10 @@ client_input_hostkeys(struct ssh *ssh) goto out; } - if ((ctx->keys_seen = calloc(ctx->nkeys, - sizeof(*ctx->keys_seen))) == NULL) + if ((ctx->keys_match = calloc(ctx->nkeys, + sizeof(*ctx->keys_match))) == NULL || + (ctx->keys_verified = calloc(ctx->nkeys, + sizeof(*ctx->keys_verified))) == NULL) fatal("%s: calloc failed", __func__); get_hostfile_hostname_ipaddr(host, @@ -2234,21 +2239,37 @@ client_input_hostkeys(struct ssh *ssh) } /* Figure out if we have any new keys to add */ - ctx->nnew = 0; + ctx->nnew = ctx->nincomplete = 0; + want = HKF_MATCH_HOST | ( options.check_host_ip ? HKF_MATCH_IP : 0); for (i = 0; i < ctx->nkeys; i++) { - if (!ctx->keys_seen[i]) + if (ctx->keys_match[i] == 0) ctx->nnew++; + if ((ctx->keys_match[i] & want) != want) + ctx->nincomplete++; } - debug3("%s: %zu keys from server: %zu new, %zu retained. %zu to remove", - __func__, ctx->nkeys, ctx->nnew, ctx->nkeys - ctx->nnew, ctx->nold); + /* + * XXX if removing keys, check whether they appear under different + * names/addresses and refuse to proceed if they do. + */ + + debug3("%s: %zu server keys: %zu new, %zu retained, " + "%zu incomplete match. %zu to remove", __func__, ctx->nkeys, + ctx->nnew, ctx->nkeys - ctx->nnew - ctx->nincomplete, + ctx->nincomplete, ctx->nold); - if (ctx->complex_hostspec && (ctx->nnew != 0 || ctx->nold != 0)) { + if (ctx->complex_hostspec && + (ctx->nnew != 0 || ctx->nold != 0 || ctx->nincomplete != 0)) { debug("%s: manual list or wildcard host pattern found, " "skipping UserKnownHostsFile update", __func__); goto out; - } else if (ctx->nnew == 0 && ctx->nold != 0) { - /* We have some keys to remove. Just do it. */ + } else if (ctx->nnew == 0 && + (ctx->nold != 0 || ctx->nincomplete != 0)) { + /* + * We have some keys to remove or fix matching for. + * We can proceed to do this without requiring a fresh proof + * from the server. + */ update_known_hosts(ctx); } else if (ctx->nnew != 0) { /* @@ -2266,7 +2287,7 @@ client_input_hostkeys(struct ssh *ssh) if ((buf = sshbuf_new()) == NULL) fatal("%s: sshbuf_new", __func__); for (i = 0; i < ctx->nkeys; i++) { - if (ctx->keys_seen[i]) + if (ctx->keys_match[i]) continue; sshbuf_reset(buf); if ((r = sshkey_putb(ctx->keys[i], buf)) != 0) diff --git a/hostfile.c b/hostfile.c index 650ad66f7f9f..373b9d8d06f4 100644 --- a/hostfile.c +++ b/hostfile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.c,v 1.84 2020/10/07 02:25:43 djm Exp $ */ +/* $OpenBSD: hostfile.c,v 1.85 2020/10/11 22:13:37 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -520,8 +520,8 @@ add_host_to_hostfile(const char *filename, const char *host, struct host_delete_ctx { FILE *out; int quiet; - const char *host; - int *skip_keys; /* XXX split for host/ip? might want to ensure both */ + const char *host, *ip; + u_int *match_keys; /* mask of HKF_MATCH_* for this key */ struct sshkey * const *keys; size_t nkeys; int modified; @@ -534,26 +534,21 @@ host_delete(struct hostkey_foreach_line *l, void *_ctx) int loglevel = ctx->quiet ? SYSLOG_LEVEL_DEBUG1 : SYSLOG_LEVEL_VERBOSE; size_t i; - if (l->status == HKF_STATUS_MATCHED) { - if (l->marker != MRK_NONE) { - /* Don't remove CA and revocation lines */ - fprintf(ctx->out, "%s\n", l->line); - return 0; - } - + /* Don't remove CA and revocation lines */ + if (l->status == HKF_STATUS_MATCHED && l->marker == MRK_NONE) { /* * If this line contains one of the keys that we will be * adding later, then don't change it and mark the key for * skipping. */ for (i = 0; i < ctx->nkeys; i++) { - if (sshkey_equal(ctx->keys[i], l->key)) { - ctx->skip_keys[i] = 1; - fprintf(ctx->out, "%s\n", l->line); - debug3("%s: %s key already at %s:%ld", __func__, - sshkey_type(l->key), l->path, l->linenum); - return 0; - } + if (!sshkey_equal(ctx->keys[i], l->key)) + continue; + ctx->match_keys[i] |= l->match; + fprintf(ctx->out, "%s\n", l->line); + debug3("%s: %s key already at %s:%ld", __func__, + sshkey_type(l->key), l->path, l->linenum); + return 0; } /* @@ -584,15 +579,19 @@ hostfile_replace_entries(const char *filename, const char *host, const char *ip, int loglevel = quiet ? SYSLOG_LEVEL_DEBUG1 : SYSLOG_LEVEL_VERBOSE; struct host_delete_ctx ctx; char *fp, *temp = NULL, *back = NULL; + const char *what; mode_t omask; size_t i; + u_int want; omask = umask(077); memset(&ctx, 0, sizeof(ctx)); ctx.host = host; + ctx.ip = ip; ctx.quiet = quiet; - if ((ctx.skip_keys = calloc(nkeys, sizeof(*ctx.skip_keys))) == NULL) + + if ((ctx.match_keys = calloc(nkeys, sizeof(*ctx.match_keys))) == NULL) return SSH_ERR_ALLOC_FAIL; ctx.keys = keys; ctx.nkeys = nkeys; @@ -621,7 +620,7 @@ hostfile_replace_entries(const char *filename, const char *host, const char *ip, goto fail; } - /* Remove all entries for the specified host from the file */ + /* Remove stale/mismatching entries for the specified host */ if ((r = hostkeys_foreach(filename, host_delete, &ctx, host, ip, HKF_WANT_PARSE_KEY)) != 0) { oerrno = errno; @@ -629,23 +628,45 @@ hostfile_replace_entries(const char *filename, const char *host, const char *ip, goto fail; } - /* Add the requested keys */ + /* Re-add the requested keys */ + want = HKF_MATCH_HOST | (ip == NULL ? 0 : HKF_MATCH_IP); for (i = 0; i < nkeys; i++) { - if (ctx.skip_keys[i]) + if ((want & ctx.match_keys[i]) == want) continue; if ((fp = sshkey_fingerprint(keys[i], hash_alg, SSH_FP_DEFAULT)) == NULL) { r = SSH_ERR_ALLOC_FAIL; goto fail; } - do_log2(loglevel, "%s%sAdding new key for %s to %s: %s %s", - quiet ? __func__ : "", quiet ? ": " : "", host, filename, + /* write host/ip */ + what = ""; + if (ctx.match_keys[i] == 0) { + what = "Adding new key"; + if (!write_host_entry(ctx.out, host, ip, + keys[i], store_hash)) { + r = SSH_ERR_INTERNAL_ERROR; + goto fail; + } + } else if ((want & ~ctx.match_keys[i]) == HKF_MATCH_HOST) { + what = "Fixing match (hostname)"; + if (!write_host_entry(ctx.out, host, NULL, + keys[i], store_hash)) { + r = SSH_ERR_INTERNAL_ERROR; + goto fail; + } + } else if ((want & ~ctx.match_keys[i]) == HKF_MATCH_IP) { + what = "Fixing match (address)"; + if (!write_host_entry(ctx.out, ip, NULL, + keys[i], store_hash)) { + r = SSH_ERR_INTERNAL_ERROR; + goto fail; + } + } + do_log2(loglevel, "%s%s%s for %s%s%s to %s: %s %s", + quiet ? __func__ : "", quiet ? ": " : "", what, + host, ip == NULL ? "" : ",", ip == NULL ? "" : ip, filename, sshkey_ssh_name(keys[i]), fp); free(fp); - if (!write_host_entry(ctx.out, host, ip, keys[i], store_hash)) { - r = SSH_ERR_INTERNAL_ERROR; - goto fail; - } ctx.modified = 1; } fclose(ctx.out); @@ -690,7 +711,7 @@ hostfile_replace_entries(const char *filename, const char *host, const char *ip, free(back); if (ctx.out != NULL) fclose(ctx.out); - free(ctx.skip_keys); + free(ctx.match_keys); umask(omask); if (r == SSH_ERR_SYSTEM_ERROR) errno = oerrno; From f92424970c02b78852ff149378c7f2616ada4ccf Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 11 Oct 2020 22:14:38 +0000 Subject: [PATCH 0030/1788] upstream: UpdateHostkeys: check for keys under other names Stop UpdateHostkeys from automatically removing deprecated keys from known_hosts files if the same keys exist under a different name or address to the host that is being connected to. This avoids UpdateHostkeys from making known_hosts inconsistent in some cases. For example, multiple host aliases sharing address-based known_hosts on different lines, or hosts that resolves to multiple addresses. ok markus@ OpenBSD-Commit-ID: 6444a705ba504c3c8ccddccd8d1b94aa33bd11c1 --- clientloop.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 82 insertions(+), 7 deletions(-) diff --git a/clientloop.c b/clientloop.c index a4a53dd1947f..2d4019233711 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.351 2020/10/11 22:13:37 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.352 2020/10/11 22:14:38 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1833,6 +1833,7 @@ struct hostkeys_update_ctx { /* Various special cases. */ int complex_hostspec; /* wildcard or manual pattern-list host name */ int ca_available; /* saw CA key for this host */ + int old_key_seen; /* saw old key with other name/addr */ }; static void @@ -1878,6 +1879,7 @@ hostspec_is_complex(const char *hosts) return 0; } +/* callback to search for ctx->keys in known_hosts */ static int hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) { @@ -1923,6 +1925,63 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) return 0; } +/* callback to search for ctx->old_keys in known_hosts under other names */ +static int +hostkeys_check_old(struct hostkey_foreach_line *l, void *_ctx) +{ + struct hostkeys_update_ctx *ctx = (struct hostkeys_update_ctx *)_ctx; + size_t i; + int hashed; + + /* only care about lines that *don't* match the active host spec */ + if (l->status == HKF_STATUS_MATCHED || l->key == NULL) + return 0; + + hashed = l->match & (HKF_MATCH_HOST_HASHED|HKF_MATCH_IP_HASHED); + for (i = 0; i < ctx->nold; i++) { + if (!sshkey_equal(l->key, ctx->old_keys[i])) + continue; + debug3("%s: found deprecated %s key at %s:%ld as %s", __func__, + sshkey_ssh_name(ctx->keys[i]), l->path, l->linenum, + hashed ? "[HASHED]" : l->hosts); + ctx->old_key_seen = 1; + break; + } + return 0; +} + +/* + * Check known_hosts files for deprecated keys under other names. Returns 0 + * on success or -1 on failure. Updates ctx->old_key_seen if deprecated keys + * exist under names other than the active hostname/IP. + */ +static int +check_old_keys_othernames(struct hostkeys_update_ctx *ctx) +{ + size_t i; + int r; + + debug2("%s: checking for %zu deprecated keys", __func__, ctx->nold); + for (i = 0; i < options.num_user_hostfiles; i++) { + debug3("%s: searching %s for %s / %s", __func__, + options.user_hostfiles[i], ctx->host_str, + ctx->ip_str ? ctx->ip_str : "(none)"); + if ((r = hostkeys_foreach(options.user_hostfiles[i], + hostkeys_check_old, ctx, ctx->host_str, ctx->ip_str, + HKF_WANT_PARSE_KEY)) != 0) { + if (r == SSH_ERR_SYSTEM_ERROR && errno == ENOENT) { + debug("%s: hostkeys file %s does not exist", + __func__, options.user_hostfiles[i]); + continue; + } + error("%s: hostkeys_foreach failed for %s: %s", + __func__, options.user_hostfiles[i], ssh_err(r)); + return -1; + } + } + return 0; +} + static void hostkey_change_preamble(LogLevel loglevel) { @@ -2248,10 +2307,6 @@ client_input_hostkeys(struct ssh *ssh) ctx->nincomplete++; } - /* - * XXX if removing keys, check whether they appear under different - * names/addresses and refuse to proceed if they do. - */ debug3("%s: %zu server keys: %zu new, %zu retained, " "%zu incomplete match. %zu to remove", __func__, ctx->nkeys, @@ -2263,8 +2318,28 @@ client_input_hostkeys(struct ssh *ssh) debug("%s: manual list or wildcard host pattern found, " "skipping UserKnownHostsFile update", __func__); goto out; - } else if (ctx->nnew == 0 && - (ctx->nold != 0 || ctx->nincomplete != 0)) { + } + + /* + * If removing keys, check whether they appear under different + * names/addresses and refuse to proceed if they do. This avoids + * cases such as hosts with multiple names becoming inconsistent + * with regards to CheckHostIP entries. + * XXX UpdateHostkeys=force to override this (and other) checks? + */ + if (ctx->nold != 0) { + if (check_old_keys_othernames(ctx) != 0) + goto out; /* error already logged */ + if (ctx->old_key_seen) { + debug("%s: key(s) for %s%s%s exist under other names; " + "skipping UserKnownHostsFile update", __func__, + ctx->host_str, ctx->ip_str == NULL ? "" : ",", + ctx->ip_str == NULL ? "" : ctx->ip_str); + goto out; + } + } + + if (ctx->nnew == 0 && (ctx->nold != 0 || ctx->nincomplete != 0)) { /* * We have some keys to remove or fix matching for. * We can proceed to do this without requiring a fresh proof From a9c9e91a82bc1a2cf801b4e3ef27a941dbd27717 Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Wed, 16 Sep 2020 16:13:30 +0200 Subject: [PATCH 0031/1788] add -s flag: to install keys via SFTP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is prompted by: https://bugzilla.mindrot.org/show_bug.cgi?id=3201 Thanks go to Matthias Blümel for the idea, and the helpful patch, from which this patch grew. SSH-Copy-ID-Upstream: f7c76dc64427cd20287a6868f672423b62057614 --- contrib/ssh-copy-id | 99 +++++++++++++++++++++++++++++++------------ contrib/ssh-copy-id.1 | 9 +++- 2 files changed, 80 insertions(+), 28 deletions(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index ee3f6374cb07..6b8aca7d994a 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -1,6 +1,7 @@ #!/bin/sh # Copyright (c) 1999-2020 Philip Hands +# 2020 Matthias Blümel # 2017 Sebastien Boyron # 2013 Martin Kletzander # 2010 Adeodato =?iso-8859-1?Q?Sim=F3?= @@ -61,11 +62,14 @@ fi # shellcheck disable=SC2010 DEFAULT_PUB_ID_FILE=$(ls -t "${HOME}"/.ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1) +SSH="ssh -a -x" +umask 0177 usage () { - printf 'Usage: %s [-h|-?|-f|-n] [-i [identity_file]] [-p port] [-F alternative ssh_config file] [[-o ] ...] [user@]hostname\n' "$0" >&2 + printf 'Usage: %s [-h|-?|-f|-n|-s] [-i [identity_file]] [-p port] [-F alternative ssh_config file] [[-o ] ...] [user@]hostname\n' "$0" >&2 printf '\t-f: force mode -- copy keys without trying to check if they are already installed\n' >&2 printf '\t-n: dry run -- no keys are actually copied\n' >&2 + printf '\t-s: use sftp -- use sftp instead of executing remote-commands. Can be useful if the remote only allows sftp\n' >&2 printf '\t-h|-?: print this help\n' >&2 exit 1 } @@ -108,9 +112,8 @@ if [ -n "$SSH_AUTH_SOCK" ] && ssh-add -L >/dev/null 2>&1 ; then GET_ID="ssh-add -L" fi -while getopts "i:o:p:F:fnh?" OPT +while getopts "i:o:p:F:fnsh?" OPT do - case "$OPT" in i) [ "${SEEN_OPT_I}" ] && { @@ -129,6 +132,9 @@ do n) DRY_RUN=1 ;; + s) + SFTP=sftp + ;; h|\?) usage ;; @@ -137,9 +143,6 @@ done #shift all args to keep only USER_HOST shift $((OPTIND-1)) - - - if [ $# = 0 ] ; then usage fi @@ -170,6 +173,8 @@ fi # and has the side effect of setting $NEW_IDS populate_new_ids() { L_SUCCESS="$1" + L_TMP_ID_FILE="$SCRATCH_DIR"/popids_tmp_id + L_OUTPUT_FILE="$SCRATCH_DIR"/popids_output # shellcheck disable=SC2086 if [ "$FORCED" ] ; then @@ -180,15 +185,6 @@ populate_new_ids() { # repopulate "$@" inside this function eval set -- "$SSH_OPTS" - umask 0177 - L_TMP_ID_FILE=$(mktemp ~/.ssh/ssh-copy-id_id.XXXXXXXXXX) - if test $? -ne 0 || test "x$L_TMP_ID_FILE" = "x" ; then - printf '%s: ERROR: mktemp failed\n' "$0" >&2 - exit 1 - fi - L_CLEANUP="rm -f \"$L_TMP_ID_FILE\" \"${L_TMP_ID_FILE}.stderr\"" - # shellcheck disable=SC2064 - trap "$L_CLEANUP" EXIT TERM INT QUIT printf '%s: INFO: attempting to log in with the new key(s), to filter out any that are already installed\n' "$0" >&2 # shellcheck disable=SC2086 NEW_IDS=$( @@ -200,16 +196,19 @@ populate_new_ids() { # assumption will break if we implement the possibility of multiple -i options. # The point being that if file based, ssh needs the private key, which it cannot # find if only given the contents of the .pub file in an unrelated tmpfile - ssh -i "${PRIV_ID_FILE:-$L_TMP_ID_FILE}" \ + $SSH -i "${PRIV_ID_FILE:-$L_TMP_ID_FILE}" \ -o ControlPath=none \ -o LogLevel=INFO \ -o PreferredAuthentications=publickey \ - -o IdentitiesOnly=yes "$@" exit 2>"$L_TMP_ID_FILE.stderr" "$L_OUTPUT_FILE" 2>&1 "$L_TMP_ID_FILE" + elif [ "$SFTP" ] && grep 'allows sftp connections only' "$L_OUTPUT_FILE" >/dev/null ; then + # this error counts as a success when we're setting up an sftp connection + : > "$L_TMP_ID_FILE" else - grep 'Permission denied' "$L_TMP_ID_FILE.stderr" >/dev/null || { - sed -e 's/^/ERROR: /' <"$L_TMP_ID_FILE.stderr" >"$L_TMP_ID_FILE" + grep 'Permission denied' "$L_OUTPUT_FILE" >/dev/null || { + sed -e 's/^/ERROR: /' <"$L_OUTPUT_FILE" >"$L_TMP_ID_FILE" cat >/dev/null #consume the other keys, causing loop to end } fi @@ -218,7 +217,6 @@ populate_new_ids() { done } ) - eval "$L_CLEANUP" && trap - EXIT TERM INT QUIT if expr "$NEW_IDS" : "^ERROR: " >/dev/null ; then printf '\n%s: %s\n\n' "$0" "$NEW_IDS" >&2 @@ -264,7 +262,49 @@ EOF printf "exec sh -c '%s'" "${INSTALLKEYS_SH}" } -REMOTE_VERSION=$(ssh -v -o PreferredAuthentications=',' -o ControlPath=none "$@" 2>&1 | +installkeys_via_sftp() { + + # repopulate "$@" inside this function + eval set -- "$SSH_OPTS" + + L_KEYS=$SCRATCH_DIR/authorized_keys + L_SHARED_CON=$SCRATCH_DIR/master-conn + $SSH -f -N -M -S $L_SHARED_CON "$@" + L_CLEANUP="$SSH -S $L_SHARED_CON -O exit 'ignored' >/dev/null 2>&1 ; $SCRATCH_CLEANUP" + trap "$L_CLEANUP" EXIT TERM INT QUIT + sftp -b - -o "ControlPath=$L_SHARED_CON" "ignored" <<-EOF || return 1 + -get .ssh/authorized_keys $L_KEYS + EOF + # add a newline or create file if it's missing, same like above + [ -z "$(tail -1c $L_KEYS 2>/dev/null)" ] || echo >> $L_KEYS + # append the keys being piped in here + cat >> $L_KEYS + sftp -b - -o "ControlPath=$L_SHARED_CON" "ignored" <<-EOF || return 1 + -mkdir .ssh + chmod 700 .ssh + put $L_KEYS .ssh/authorized_keys + chmod 600 .ssh/authorized_keys + EOF + eval "$L_CLEANUP" && trap "$SCRATCH_CLEANUP" EXIT TERM INT QUIT +} + + +# create a scratch dir for any temporary files needed +SCRATCH_DIR=$(mktemp -d ~/.ssh/ssh-copy-id.XXXXXXXXXX) +if test $? -ne 0 || test "x$SCRATCH_DIR" = "x" ; then + printf '%s: ERROR: mktemp failed\n' "$0" >&2 + exit 1 +fi +chmod 0700 $SCRATCH_DIR +if [ -d "$SCRATCH_DIR" ] ; then + SCRATCH_CLEANUP="rm -rf \"$SCRATCH_DIR\"" + trap "$SCRATCH_CLEANUP" EXIT TERM INT QUIT +else + printf '%s: ERROR: Required scratch directory (%s) was not created\n' "$0" "$SCRATCH_DIR" >&2 + exit 1 +fi + +REMOTE_VERSION=$($SSH -v -o PreferredAuthentications=',' -o ControlPath=none "$@" 2>&1 | sed -ne 's/.*remote software version //p') # shellcheck disable=SC2029 @@ -277,7 +317,7 @@ case "$REMOTE_VERSION" in printf '%s: WARNING: Non-dsa key (#%d) skipped (NetScreen only supports DSA keys)\n' "$0" "$KEY_NO" >&2 continue } - [ "$DRY_RUN" ] || printf 'set ssh pka-dsa key %s\nsave\nexit\n' "$KEY" | ssh -T "$@" >/dev/null 2>&1 + [ "$DRY_RUN" ] || printf 'set ssh pka-dsa key %s\nsave\nexit\n' "$KEY" | $SSH -T "$@" >/dev/null 2>&1 if [ $? = 255 ] ; then printf '%s: ERROR: installation of key #%d failed (please report a bug describing what caused this, so that we can make this message useful)\n' "$0" "$KEY_NO" >&2 else @@ -291,16 +331,21 @@ case "$REMOTE_VERSION" in dropbear*) populate_new_ids 0 [ "$DRY_RUN" ] || printf '%s\n' "$NEW_IDS" | \ - ssh "$@" "$(installkeys_sh /etc/dropbear/authorized_keys)" \ + $SSH "$@" "$(installkeys_sh /etc/dropbear/authorized_keys)" \ || exit 1 ADDED=$(printf '%s\n' "$NEW_IDS" | wc -l) ;; *) # Assuming that the remote host treats ~/.ssh/authorized_keys as one might expect populate_new_ids 0 - [ "$DRY_RUN" ] || printf '%s\n' "$NEW_IDS" | \ - ssh "$@" "$(installkeys_sh)" \ - || exit 1 + if ! [ "$DRY_RUN" ] ; then + printf '%s\n' "$NEW_IDS" | \ + if [ "$SFTP" ] ; then + installkeys_via_sftp + else + $SSH "$@" "$(installkeys_sh)" + fi || exit 1 + fi ADDED=$(printf '%s\n' "$NEW_IDS" | wc -l) ;; esac @@ -318,7 +363,7 @@ else Number of key(s) added: $ADDED - Now try logging into the machine, with: "ssh $SSH_OPTS" + Now try logging into the machine, with: "${SFTP:-ssh} $SSH_OPTS" and check to make sure that only the key(s) you wanted were added. EOF diff --git a/contrib/ssh-copy-id.1 b/contrib/ssh-copy-id.1 index b75a88365396..c141a296f77a 100644 --- a/contrib/ssh-copy-id.1 +++ b/contrib/ssh-copy-id.1 @@ -1,5 +1,5 @@ .ig \" -*- nroff -*- -Copyright (c) 1999-2016 hands.com Ltd. +Copyright (c) 1999-2020 hands.com Ltd. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -31,6 +31,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .Nm .Op Fl f .Op Fl n +.Op Fl s .Op Fl i Op Ar identity_file .Op Fl p Ar port .Op Fl o Ar ssh_option @@ -84,6 +85,12 @@ in more than one copy of the key being installed on the remote system. .It Fl n do a dry-run. Instead of installing keys on the remote system simply prints the key(s) that would have been installed. +.It Fl s +SFTP mode: usually the public keys are installed by executing commands on the remote side. +With this option the user's +.Pa ~/.ssh/authorized_keys +file will be downloaded, modified locally and uploaded with sftp. +This option is useful if the server has restrictions on commands which can be used on the remote side. .It Fl h , Fl ? Print Usage summary .It Fl p Ar port , Fl o Ar ssh_option From 108676c3f26be6c873db0dd8754063699908727b Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Sat, 3 Oct 2020 21:10:03 +0200 Subject: [PATCH 0032/1788] tidy up test of $SCRATCH_DIR creation SSH-Copy-ID-Upstream: 2d8b22d96c105d87743ffe8874887b06f8989b93 --- contrib/ssh-copy-id | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index 6b8aca7d994a..d7c3a61f608c 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -290,17 +290,15 @@ installkeys_via_sftp() { # create a scratch dir for any temporary files needed -SCRATCH_DIR=$(mktemp -d ~/.ssh/ssh-copy-id.XXXXXXXXXX) -if test $? -ne 0 || test "x$SCRATCH_DIR" = "x" ; then - printf '%s: ERROR: mktemp failed\n' "$0" >&2 - exit 1 -fi -chmod 0700 $SCRATCH_DIR -if [ -d "$SCRATCH_DIR" ] ; then +if SCRATCH_DIR=$(mktemp -d ~/.ssh/ssh-copy-id.XXXXXXXXXX) && + [ "$SCRATCH_DIR" ] && [ -d "$SCRATCH_DIR" ] +then + chmod 0700 "$SCRATCH_DIR" SCRATCH_CLEANUP="rm -rf \"$SCRATCH_DIR\"" + #shellcheck disable=SC2064 trap "$SCRATCH_CLEANUP" EXIT TERM INT QUIT else - printf '%s: ERROR: Required scratch directory (%s) was not created\n' "$0" "$SCRATCH_DIR" >&2 + printf '%s: ERROR: failed to create required temporary directory under ~/.ssh\n' "$0" >&2 exit 1 fi From f7c3a39b016dd77709ecbf18da8282f967b86cd7 Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Sat, 3 Oct 2020 21:45:16 +0200 Subject: [PATCH 0033/1788] shellcheck tidyage SSH-Copy-ID-Upstream: 5b08f840e78ac544288b3983010a1b0585e966fd --- contrib/ssh-copy-id | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index d7c3a61f608c..6cea9935bee8 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -262,6 +262,7 @@ EOF printf "exec sh -c '%s'" "${INSTALLKEYS_SH}" } +#shellcheck disable=SC2120 # the 'eval set' confuses this installkeys_via_sftp() { # repopulate "$@" inside this function @@ -269,22 +270,24 @@ installkeys_via_sftp() { L_KEYS=$SCRATCH_DIR/authorized_keys L_SHARED_CON=$SCRATCH_DIR/master-conn - $SSH -f -N -M -S $L_SHARED_CON "$@" + $SSH -f -N -M -S "$L_SHARED_CON" "$@" L_CLEANUP="$SSH -S $L_SHARED_CON -O exit 'ignored' >/dev/null 2>&1 ; $SCRATCH_CLEANUP" + #shellcheck disable=SC2064 trap "$L_CLEANUP" EXIT TERM INT QUIT sftp -b - -o "ControlPath=$L_SHARED_CON" "ignored" <<-EOF || return 1 -get .ssh/authorized_keys $L_KEYS EOF # add a newline or create file if it's missing, same like above - [ -z "$(tail -1c $L_KEYS 2>/dev/null)" ] || echo >> $L_KEYS + [ -z "$(tail -1c "$L_KEYS" 2>/dev/null)" ] || echo >> "$L_KEYS" # append the keys being piped in here - cat >> $L_KEYS + cat >> "$L_KEYS" sftp -b - -o "ControlPath=$L_SHARED_CON" "ignored" <<-EOF || return 1 -mkdir .ssh chmod 700 .ssh put $L_KEYS .ssh/authorized_keys chmod 600 .ssh/authorized_keys EOF + #shellcheck disable=SC2064 eval "$L_CLEANUP" && trap "$SCRATCH_CLEANUP" EXIT TERM INT QUIT } @@ -339,6 +342,7 @@ case "$REMOTE_VERSION" in if ! [ "$DRY_RUN" ] ; then printf '%s\n' "$NEW_IDS" | \ if [ "$SFTP" ] ; then + #shellcheck disable=SC2119 installkeys_via_sftp else $SSH "$@" "$(installkeys_sh)" From fd360174596047b52aa1cddda74d85012a03ca4b Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Sat, 3 Oct 2020 23:15:16 +0200 Subject: [PATCH 0034/1788] combine if/elif to avoid duplication of the action SSH-Copy-ID-Upstream: 42aeb1cc53d3f7f6e78edc210fb121fda0834914 --- contrib/ssh-copy-id | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index 6cea9935bee8..1870aed552c1 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -201,10 +201,11 @@ populate_new_ids() { -o LogLevel=INFO \ -o PreferredAuthentications=publickey \ -o IdentitiesOnly=yes "$@" exit >"$L_OUTPUT_FILE" 2>&1 "$L_TMP_ID_FILE" - elif [ "$SFTP" ] && grep 'allows sftp connections only' "$L_OUTPUT_FILE" >/dev/null ; then - # this error counts as a success when we're setting up an sftp connection + if [ "$?" = "$L_SUCCESS" ] || { + [ "$SFTP" ] && grep 'allows sftp connections only' "$L_OUTPUT_FILE" >/dev/null + # this error counts as a success if we're setting up an sftp connection + } + then : > "$L_TMP_ID_FILE" else grep 'Permission denied' "$L_OUTPUT_FILE" >/dev/null || { From e545d94b713effab8e6c7dfabbfb76c1d84d7498 Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Sun, 4 Oct 2020 00:15:46 +0200 Subject: [PATCH 0035/1788] shift contents of long $() into filter_ids() This was prompted by the fact that posh does not deal with $() that contains comments where the comment includes an odd number of single-quotes. It seems to get befuddled into trying to find the matching quote. Regardless, making a function for filtering the unneeded ids seems much neater than avoiding apostrophes, so that's what I've done. SSH-Copy-ID-Upstream: 3dab3366a584427045c8a690a93282f02c09cf24 --- contrib/ssh-copy-id | 78 +++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index 1870aed552c1..cd1835c1e223 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -169,55 +169,57 @@ if [ -z "$(eval $GET_ID)" ] ; then exit 1 fi -# populate_new_ids() uses several global variables ($USER_HOST, $SSH_OPTS ...) -# and has the side effect of setting $NEW_IDS -populate_new_ids() { +# filter_ids() +# tries to log in using the keys piped to it, and filters out any that work +filter_ids() { L_SUCCESS="$1" L_TMP_ID_FILE="$SCRATCH_DIR"/popids_tmp_id L_OUTPUT_FILE="$SCRATCH_DIR"/popids_output - # shellcheck disable=SC2086 + # repopulate "$@" inside this function + eval set -- "$SSH_OPTS" + + while read -r ID || [ "$ID" ] ; do + printf '%s\n' "$ID" > "$L_TMP_ID_FILE" + + # the next line assumes $PRIV_ID_FILE only set if using a single id file - this + # assumption will break if we implement the possibility of multiple -i options. + # The point being that if file based, ssh needs the private key, which it cannot + # find if only given the contents of the .pub file in an unrelated tmpfile + $SSH -i "${PRIV_ID_FILE:-$L_TMP_ID_FILE}" \ + -o ControlPath=none \ + -o LogLevel=INFO \ + -o PreferredAuthentications=publickey \ + -o IdentitiesOnly=yes "$@" exit >"$L_OUTPUT_FILE" 2>&1 /dev/null + # this error counts as a success if we're setting up an sftp connection + } + then + : > "$L_TMP_ID_FILE" + else + grep 'Permission denied' "$L_OUTPUT_FILE" >/dev/null || { + sed -e 's/^/ERROR: /' <"$L_OUTPUT_FILE" >"$L_TMP_ID_FILE" + cat >/dev/null #consume the other keys, causing loop to end + } + fi + + cat "$L_TMP_ID_FILE" + done +} + +# populate_new_ids() uses several global variables ($USER_HOST, $SSH_OPTS ...) +# and has the side effect of setting $NEW_IDS +populate_new_ids() { if [ "$FORCED" ] ; then + # shellcheck disable=SC2086 NEW_IDS=$(eval $GET_ID) return fi - # repopulate "$@" inside this function - eval set -- "$SSH_OPTS" - printf '%s: INFO: attempting to log in with the new key(s), to filter out any that are already installed\n' "$0" >&2 # shellcheck disable=SC2086 - NEW_IDS=$( - eval $GET_ID | { - while read -r ID || [ "$ID" ] ; do - printf '%s\n' "$ID" > "$L_TMP_ID_FILE" - - # the next line assumes $PRIV_ID_FILE only set if using a single id file - this - # assumption will break if we implement the possibility of multiple -i options. - # The point being that if file based, ssh needs the private key, which it cannot - # find if only given the contents of the .pub file in an unrelated tmpfile - $SSH -i "${PRIV_ID_FILE:-$L_TMP_ID_FILE}" \ - -o ControlPath=none \ - -o LogLevel=INFO \ - -o PreferredAuthentications=publickey \ - -o IdentitiesOnly=yes "$@" exit >"$L_OUTPUT_FILE" 2>&1 /dev/null - # this error counts as a success if we're setting up an sftp connection - } - then - : > "$L_TMP_ID_FILE" - else - grep 'Permission denied' "$L_OUTPUT_FILE" >/dev/null || { - sed -e 's/^/ERROR: /' <"$L_OUTPUT_FILE" >"$L_TMP_ID_FILE" - cat >/dev/null #consume the other keys, causing loop to end - } - fi - - cat "$L_TMP_ID_FILE" - done - } - ) + NEW_IDS=$(eval $GET_ID | filter_ids $1) if expr "$NEW_IDS" : "^ERROR: " >/dev/null ; then printf '\n%s: %s\n\n' "$0" "$NEW_IDS" >&2 From a336ce8c2c55547cc00e0070a18c55f30bb53fb6 Mon Sep 17 00:00:00 2001 From: "kn@openbsd.org" Date: Mon, 12 Oct 2020 08:36:36 +0000 Subject: [PATCH 0036/1788] upstream: Zap unused family parameter from ssh_connect_direct() sshconnect.c r1.241 from 2013 made it unused; found while reading code. OK djm OpenBSD-Commit-ID: 219ba6d7f9925d0b7992918612680399d86712b5 --- ssh.c | 4 ++-- sshconnect.c | 10 +++++----- sshconnect.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ssh.c b/ssh.c index 0329e484712d..563f4cdf265d 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.537 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.538 2020/10/12 08:36:36 kn Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1542,7 +1542,7 @@ main(int ac, char **av) /* Open a connection to the remote host. */ if (ssh_connect(ssh, host, host_arg, addrs, &hostaddr, options.port, - options.address_family, options.connection_attempts, + options.connection_attempts, &timeout_ms, options.tcp_keep_alive) != 0) exit(255); diff --git a/sshconnect.c b/sshconnect.c index d73cecc80951..7426ca99576b 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.339 2020/10/07 02:26:28 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.340 2020/10/12 08:36:37 kn Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -442,8 +442,8 @@ ssh_create_socket(struct addrinfo *ai) */ static int ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop, - struct sockaddr_storage *hostaddr, u_short port, int family, - int connection_attempts, int *timeout_ms, int want_keepalive) + struct sockaddr_storage *hostaddr, u_short port, int connection_attempts, + int *timeout_ms, int want_keepalive) { int on = 1, saved_timeout_ms = *timeout_ms; int oerrno, sock = -1, attempt; @@ -533,13 +533,13 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop, int ssh_connect(struct ssh *ssh, const char *host, const char *host_arg, struct addrinfo *addrs, struct sockaddr_storage *hostaddr, u_short port, - int family, int connection_attempts, int *timeout_ms, int want_keepalive) + int connection_attempts, int *timeout_ms, int want_keepalive) { int in, out; if (options.proxy_command == NULL) { return ssh_connect_direct(ssh, host, addrs, hostaddr, port, - family, connection_attempts, timeout_ms, want_keepalive); + connection_attempts, timeout_ms, want_keepalive); } else if (strcmp(options.proxy_command, "-") == 0) { if ((in = dup(STDIN_FILENO)) == -1 || (out = dup(STDOUT_FILENO)) == -1) { diff --git a/sshconnect.h b/sshconnect.h index b2fbf157915b..13131d301a79 100644 --- a/sshconnect.h +++ b/sshconnect.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.h,v 1.42 2020/10/07 02:22:23 djm Exp $ */ +/* $OpenBSD: sshconnect.h,v 1.43 2020/10/12 08:36:37 kn Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -35,7 +35,7 @@ struct ssh; int ssh_connect(struct ssh *, const char *, const char *, struct addrinfo *, struct sockaddr_storage *, u_short, - int, int, int *, int); + int, int *, int); void ssh_kill_proxy_command(void); void ssh_login(struct ssh *, Sensitive *, const char *, From 95b0bcfd1531d59e056ae8af27bb741391f26ab0 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 14 Oct 2020 00:55:17 +0000 Subject: [PATCH 0037/1788] upstream: make UpdateHostkeys still more conservative: refuse to proceed if one of the keys offered by the server is already in known_hosts under another name. This avoid collisions between address entries for different host aliases when CheckHostIP=yes Also, do not attempt to fix known_hosts with incomplete host/ip matches when there are no new or deprecated hostkeys. OpenBSD-Commit-ID: 95c19842f7c41f9bd9c92aa6441a278c0fd0c4a3 --- clientloop.c | 114 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 76 insertions(+), 38 deletions(-) diff --git a/clientloop.c b/clientloop.c index 2d4019233711..8cd6f710659c 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.352 2020/10/11 22:14:38 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.353 2020/10/14 00:55:17 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1834,6 +1834,7 @@ struct hostkeys_update_ctx { int complex_hostspec; /* wildcard or manual pattern-list host name */ int ca_available; /* saw CA key for this host */ int old_key_seen; /* saw old key with other name/addr */ + int other_name_seen; /* saw key with other name/addr */ }; static void @@ -1887,9 +1888,39 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) size_t i; struct sshkey **tmp; - if (l->status != HKF_STATUS_MATCHED || l->key == NULL || - l->marker != MRK_NONE) + if (l->key == NULL) return 0; + if (l->status != HKF_STATUS_MATCHED) { + /* Record if one of the keys appears on a non-matching line */ + for (i = 0; i < ctx->nkeys; i++) { + if (sshkey_equal(l->key, ctx->keys[i])) { + ctx->other_name_seen = 1; + debug3("%s: found %s key under different " + "name/addr at %s:%ld", __func__, + sshkey_ssh_name(ctx->keys[i]), + l->path, l->linenum); + return 0; + } + } + return 0; + } + /* Don't proceed if revocation or CA markers are present */ + /* XXX relax this */ + if (l->marker != MRK_NONE) { + debug3("%s: hostkeys file %s:%ld has CA/revocation marker", + __func__, l->path, l->linenum); + ctx->complex_hostspec = 1; + return 0; + } + + /* Record if address matched against a different hostname. */ + if (ctx->ip_str != NULL && (l->match & HKF_MATCH_HOST) == 0 && + strchr(l->hosts, ',') != NULL) { + ctx->other_name_seen = 1; + debug3("%s: found address %s against different hostname at " + "%s:%ld", __func__, ctx->ip_str, l->path, l->linenum); + return 0; + } /* * UpdateHostkeys is skipped for wildcard host names and hostnames @@ -2307,19 +2338,28 @@ client_input_hostkeys(struct ssh *ssh) ctx->nincomplete++; } - debug3("%s: %zu server keys: %zu new, %zu retained, " "%zu incomplete match. %zu to remove", __func__, ctx->nkeys, ctx->nnew, ctx->nkeys - ctx->nnew - ctx->nincomplete, ctx->nincomplete, ctx->nold); - if (ctx->complex_hostspec && - (ctx->nnew != 0 || ctx->nold != 0 || ctx->nincomplete != 0)) { - debug("%s: manual list or wildcard host pattern found, " - "skipping UserKnownHostsFile update", __func__); + if (ctx->nnew == 0 && ctx->nold == 0) { + debug("%s: no new or deprecated keys from server", __func__); goto out; } + /* Various reasons why we cannot proceed with the update */ + if (ctx->complex_hostspec) { + debug("%s: CA/revocation marker, manual host list or wildcard " + "host pattern found, skipping UserKnownHostsFile update", + __func__); + goto out; + } + if (ctx->other_name_seen) { + debug("%s: host key found matching a different name/address, " + "skipping UserKnownHostsFile update", __func__); + goto out; + } /* * If removing keys, check whether they appear under different * names/addresses and refuse to proceed if they do. This avoids @@ -2339,45 +2379,43 @@ client_input_hostkeys(struct ssh *ssh) } } - if (ctx->nnew == 0 && (ctx->nold != 0 || ctx->nincomplete != 0)) { + if (ctx->nnew == 0) { /* * We have some keys to remove or fix matching for. * We can proceed to do this without requiring a fresh proof * from the server. */ update_known_hosts(ctx); - } else if (ctx->nnew != 0) { - /* - * We have received hitherto-unseen keys from the server. - * Ask the server to confirm ownership of the private halves. - */ - debug3("%s: asking server to prove ownership for %zu keys", - __func__, ctx->nnew); - if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || - (r = sshpkt_put_cstring(ssh, - "hostkeys-prove-00@openssh.com")) != 0 || - (r = sshpkt_put_u8(ssh, 1)) != 0) /* bool: want reply */ - fatal("%s: cannot prepare packet: %s", + goto out; + } + /* + * We have received previously-unseen keys from the server. + * Ask the server to confirm ownership of the private halves. + */ + debug3("%s: asking server to prove ownership for %zu keys", + __func__, ctx->nnew); + if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || + (r = sshpkt_put_cstring(ssh, + "hostkeys-prove-00@openssh.com")) != 0 || + (r = sshpkt_put_u8(ssh, 1)) != 0) /* bool: want reply */ + fatal("%s: prepare hostkeys-prove: %s", __func__, ssh_err(r)); + if ((buf = sshbuf_new()) == NULL) + fatal("%s: sshbuf_new", __func__); + for (i = 0; i < ctx->nkeys; i++) { + if (ctx->keys_match[i]) + continue; + sshbuf_reset(buf); + if ((r = sshkey_putb(ctx->keys[i], buf)) != 0 || + (r = sshpkt_put_stringb(ssh, buf)) != 0) { + fatal("%s: assemble hostkeys-prove: %s", __func__, ssh_err(r)); - if ((buf = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); - for (i = 0; i < ctx->nkeys; i++) { - if (ctx->keys_match[i]) - continue; - sshbuf_reset(buf); - if ((r = sshkey_putb(ctx->keys[i], buf)) != 0) - fatal("%s: sshkey_putb: %s", - __func__, ssh_err(r)); - if ((r = sshpkt_put_stringb(ssh, buf)) != 0) - fatal("%s: sshpkt_put_string: %s", - __func__, ssh_err(r)); } - if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: sshpkt_send: %s", __func__, ssh_err(r)); - client_register_global_confirm( - client_global_hostkeys_private_confirm, ctx); - ctx = NULL; /* will be freed in callback */ } + if ((r = sshpkt_send(ssh)) != 0) + fatal("%s: sshpkt_send: %s", __func__, ssh_err(r)); + client_register_global_confirm( + client_global_hostkeys_private_confirm, ctx); + ctx = NULL; /* will be freed in callback */ /* Success */ out: From acadbb3402b70f72f14d9a6930ad41be97c2f9dc Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 16 Oct 2020 02:37:12 +0000 Subject: [PATCH 0038/1788] upstream: use do_log2 instead of function pointers to different log functions OpenBSD-Commit-ID: 88077b826d348c58352a6b394755520f4e484480 --- sshconnect2.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sshconnect2.c b/sshconnect2.c index 6da2248f59dd..9e3bd05c9242 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.329 2020/10/07 02:22:23 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.330 2020/10/16 02:37:12 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -1515,8 +1515,9 @@ load_identity_file(Identity *id) struct stat st; if (stat(id->filename, &st) == -1) { - (id->userprovided ? logit : debug3)("no such identity: %s: %s", - id->filename, strerror(errno)); + do_log2(id->userprovided ? + SYSLOG_LEVEL_INFO : SYSLOG_LEVEL_DEBUG3, + "no such identity: %s: %s", id->filename, strerror(errno)); return NULL; } snprintf(prompt, sizeof prompt, From 752250caabda3dd24635503c4cd689b32a650794 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 16 Oct 2020 13:24:45 +0000 Subject: [PATCH 0039/1788] upstream: revised log infrastructure for OpenSSH log functions receive function, filename and line number of caller. We can use this to selectively enable logging via pattern-lists. ok markus@ OpenBSD-Commit-ID: 51a472610cbe37834ce6ce4a3f0e0b1ccc95a349 --- fatal.c | 6 +- log.c | 185 +++++++++++++++++++++++-------------------------- log.h | 59 +++++++++++----- monitor.c | 15 ++-- monitor_wrap.c | 8 ++- monitor_wrap.h | 5 +- ssh-keyscan.c | 9 +-- 7 files changed, 154 insertions(+), 133 deletions(-) diff --git a/fatal.c b/fatal.c index 5e5aa3fe18df..3ecd510f1dcf 100644 --- a/fatal.c +++ b/fatal.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fatal.c,v 1.7 2006/08/03 03:34:42 deraadt Exp $ */ +/* $OpenBSD: fatal.c,v 1.8 2020/10/16 13:24:45 djm Exp $ */ /* * Copyright (c) 2002 Markus Friedl. All rights reserved. * @@ -34,12 +34,12 @@ /* Fatal messages. This function never returns. */ void -fatal(const char *fmt,...) +sshfatal(const char *file, const char *func, int line, const char *fmt, ...) { va_list args; va_start(args, fmt); - do_log(SYSLOG_LEVEL_FATAL, fmt, args); + ssh_log(file, func, line, SYSLOG_LEVEL_FATAL, fmt, args); va_end(args); cleanup_exit(255); } diff --git a/log.c b/log.c index 6b1a7a31417b..159c306deb87 100644 --- a/log.c +++ b/log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: log.c,v 1.52 2020/07/03 06:46:41 djm Exp $ */ +/* $OpenBSD: log.c,v 1.53 2020/10/16 13:24:45 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -51,6 +51,7 @@ #endif #include "log.h" +#include "match.h" static LogLevel log_level = SYSLOG_LEVEL_INFO; static int log_on_stderr = 1; @@ -59,6 +60,8 @@ static int log_facility = LOG_AUTH; static char *argv0; static log_handler_fn *log_handler; static void *log_handler_ctx; +static char **log_verbose; +static size_t nlog_verbose; extern char *__progname; @@ -157,96 +160,30 @@ log_level_name(LogLevel level) return NULL; } -/* Error messages that should be logged. */ - -void -error(const char *fmt,...) -{ - va_list args; - - va_start(args, fmt); - do_log(SYSLOG_LEVEL_ERROR, fmt, args); - va_end(args); -} - -void -sigdie(const char *fmt,...) -{ -#ifdef DO_LOG_SAFE_IN_SIGHAND - va_list args; - - va_start(args, fmt); - do_log(SYSLOG_LEVEL_FATAL, fmt, args); - va_end(args); -#endif - _exit(1); -} - -void -logdie(const char *fmt,...) -{ - va_list args; - - va_start(args, fmt); - do_log(SYSLOG_LEVEL_INFO, fmt, args); - va_end(args); - cleanup_exit(255); -} - -/* Log this message (information that usually should go to the log). */ - -void -logit(const char *fmt,...) -{ - va_list args; - - va_start(args, fmt); - do_log(SYSLOG_LEVEL_INFO, fmt, args); - va_end(args); -} - -/* More detailed messages (information that does not need to go to the log). */ - -void -verbose(const char *fmt,...) -{ - va_list args; - - va_start(args, fmt); - do_log(SYSLOG_LEVEL_VERBOSE, fmt, args); - va_end(args); -} - -/* Debugging messages that should not be logged during normal operation. */ - -void -debug(const char *fmt,...) -{ - va_list args; - - va_start(args, fmt); - do_log(SYSLOG_LEVEL_DEBUG1, fmt, args); - va_end(args); -} - void -debug2(const char *fmt,...) +log_verbose_add(const char *s) { - va_list args; - - va_start(args, fmt); - do_log(SYSLOG_LEVEL_DEBUG2, fmt, args); - va_end(args); + char **tmp; + + /* Ignore failures here */ + if ((tmp = recallocarray(log_verbose, nlog_verbose, nlog_verbose + 1, + sizeof(*log_verbose))) != NULL) { + log_verbose = tmp; + if ((log_verbose[nlog_verbose] = strdup(s)) != NULL) + nlog_verbose++; + } } void -debug3(const char *fmt,...) +log_verbose_reset(void) { - va_list args; + size_t i; - va_start(args, fmt); - do_log(SYSLOG_LEVEL_DEBUG3, fmt, args); - va_end(args); + for (i = 0; i < nlog_verbose; i++) + free(log_verbose[i]); + free(log_verbose); + log_verbose = NULL; + nlog_verbose = 0; } /* @@ -395,18 +332,9 @@ set_log_handler(log_handler_fn *handler, void *ctx) log_handler_ctx = ctx; } -void -do_log2(LogLevel level, const char *fmt,...) -{ - va_list args; - - va_start(args, fmt); - do_log(level, fmt, args); - va_end(args); -} - -void -do_log(LogLevel level, const char *fmt, va_list args) +static void +do_log(const char *file, const char *func, int line, LogLevel level, + int force, const char *fmt, va_list args) { #if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) struct syslog_data sdata = SYSLOG_DATA_INIT; @@ -418,7 +346,7 @@ do_log(LogLevel level, const char *fmt, va_list args) int saved_errno = errno; log_handler_fn *tmp_handler; - if (level > log_level) + if (!force && level > log_level) return; switch (level) { @@ -467,7 +395,7 @@ do_log(LogLevel level, const char *fmt, va_list args) /* Avoid recursion */ tmp_handler = log_handler; log_handler = NULL; - tmp_handler(level, fmtbuf, log_handler_ctx); + tmp_handler(file, func, line, level, fmtbuf, log_handler_ctx); log_handler = tmp_handler; } else if (log_on_stderr) { snprintf(msgbuf, sizeof msgbuf, "%.*s\r\n", @@ -486,3 +414,64 @@ do_log(LogLevel level, const char *fmt, va_list args) } errno = saved_errno; } + +void +sshlog(const char *file, const char *func, int line, int showfunc, + LogLevel level, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + sshlogv(file, func, line, showfunc, level, fmt, args); + va_end(args); +} + +void +sshlogdie(const char *file, const char *func, int line, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + sshlogv(file, func, line, 0, SYSLOG_LEVEL_INFO, fmt, args); + va_end(args); + cleanup_exit(255); +} + +void +sshsigdie(const char *file, const char *func, int line, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + sshlogv(file, func, line, 0, SYSLOG_LEVEL_FATAL, fmt, args); + va_end(args); + _exit(1); +} + +void +sshlogv(const char *file, const char *func, int line, int showfunc, + LogLevel level, const char *fmt, va_list args) +{ + char tag[128], fmt2[MSGBUFSIZ + 128]; + int forced = 0; + const char *cp; + size_t i; + + snprintf(tag, sizeof(tag), "%.48s:%.48s():%d", + (cp = strrchr(file, '/')) == NULL ? file : cp + 1, func, line); + for (i = 0; i < nlog_verbose; i++) { + if (match_pattern_list(tag, log_verbose[i], 0) == 1) { + forced = 1; + break; + } + } + + if (log_handler == NULL && forced) + snprintf(fmt2, sizeof(fmt2), "%s: %s", tag, fmt); + else if (showfunc) + snprintf(fmt2, sizeof(fmt2), "%s: %s", func, fmt); + else + strlcpy(fmt2, fmt, sizeof(fmt2)); + + do_log(file, func, line, level, forced, fmt2, args); +} diff --git a/log.h b/log.h index 78cda287dd6c..b1ab7c7e0b70 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.24 2019/09/06 04:53:27 djm Exp $ */ +/* $OpenBSD: log.h,v 1.25 2020/10/16 13:24:45 djm Exp $ */ /* * Author: Tatu Ylonen @@ -48,36 +48,57 @@ typedef enum { SYSLOG_LEVEL_NOT_SET = -1 } LogLevel; -typedef void (log_handler_fn)(LogLevel, const char *, void *); +typedef void (log_handler_fn)(const char *, const char *, int, LogLevel, + const char *, void *); void log_init(char *, LogLevel, SyslogFacility, int); LogLevel log_level_get(void); int log_change_level(LogLevel); int log_is_on_stderr(void); void log_redirect_stderr_to(const char *); +void log_verbose_add(const char *); +void log_verbose_reset(void); SyslogFacility log_facility_number(char *); const char * log_facility_name(SyslogFacility); LogLevel log_level_number(char *); const char * log_level_name(LogLevel); -void fatal(const char *, ...) __attribute__((noreturn)) - __attribute__((format(printf, 1, 2))); -void error(const char *, ...) __attribute__((format(printf, 1, 2))); -void sigdie(const char *, ...) __attribute__((noreturn)) - __attribute__((format(printf, 1, 2))); -void logdie(const char *, ...) __attribute__((noreturn)) - __attribute__((format(printf, 1, 2))); -void logit(const char *, ...) __attribute__((format(printf, 1, 2))); -void verbose(const char *, ...) __attribute__((format(printf, 1, 2))); -void debug(const char *, ...) __attribute__((format(printf, 1, 2))); -void debug2(const char *, ...) __attribute__((format(printf, 1, 2))); -void debug3(const char *, ...) __attribute__((format(printf, 1, 2))); - - void set_log_handler(log_handler_fn *, void *); -void do_log2(LogLevel, const char *, ...) - __attribute__((format(printf, 2, 3))); -void do_log(LogLevel, const char *, va_list); void cleanup_exit(int) __attribute__((noreturn)); + +void sshlog(const char *, const char *, int, int, + LogLevel, const char *, ...) __attribute__((format(printf, 6, 7))); +void sshlogv(const char *, const char *, int, int, + LogLevel, const char *, va_list); +void sshsigdie(const char *, const char *, int, const char *, ...) + __attribute__((noreturn)) __attribute__((format(printf, 4, 5))); +void sshlogdie(const char *, const char *, int, const char *, ...) + __attribute__((noreturn)) __attribute__((format(printf, 4, 5))); +void sshfatal(const char *, const char *, int, const char *, ...) + __attribute__((noreturn)) __attribute__((format(printf, 4, 5))); + +#define ssh_nlog(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, __VA_ARGS__) +#define ssh_debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, __VA_ARGS__) +#define ssh_debug2(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, __VA_ARGS__) +#define ssh_debug(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG1, __VA_ARGS__) +#define ssh_verbose(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, __VA_ARGS__) +#define ssh_log(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, __VA_ARGS__) +#define ssh_error(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) +#define ssh_fatal(...) sshfatal(__FILE__, __func__, __LINE__, __VA_ARGS__) +#define ssh_logdie(...) sshlogdie(__FILE__, __func__, __LINE__, __VA_ARGS__) +#define ssh_sigdie(...) sshsigdie(__FILE__, __func__, __LINE__, __VA_ARGS__) + +#define debug ssh_debug +#define debug1 ssh_debug1 +#define debug2 ssh_debug2 +#define debug3 ssh_debug3 +#define error ssh_error +#define logit ssh_log +#define verbose ssh_verbose +#define fatal ssh_fatal +#define logdie ssh_logdie +#define sigdie ssh_sigdie +#define do_log2 ssh_nlog + #endif diff --git a/monitor.c b/monitor.c index 4cf79dfc98cd..9f22f0681488 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.214 2020/08/27 01:07:09 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.215 2020/10/16 13:24:45 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -420,8 +420,8 @@ static int monitor_read_log(struct monitor *pmonitor) { struct sshbuf *logmsg; - u_int len, level; - char *msg; + u_int len, level, line; + char *msg, *file, *func; u_char *p; int r; @@ -452,7 +452,10 @@ monitor_read_log(struct monitor *pmonitor) fatal("%s: reserve: %s", __func__, ssh_err(r)); if (atomicio(read, pmonitor->m_log_recvfd, p, len) != len) fatal("%s: log fd read: %s", __func__, strerror(errno)); - if ((r = sshbuf_get_u32(logmsg, &level)) != 0 || + if ((r = sshbuf_get_cstring(logmsg, &file, NULL)) != 0 || + (r = sshbuf_get_cstring(logmsg, &func, NULL)) != 0 || + (r = sshbuf_get_u32(logmsg, &line)) != 0 || + (r = sshbuf_get_u32(logmsg, &level)) != 0 || (r = sshbuf_get_cstring(logmsg, &msg, NULL)) != 0) fatal("%s: decode: %s", __func__, ssh_err(r)); @@ -460,9 +463,11 @@ monitor_read_log(struct monitor *pmonitor) if (log_level_name(level) == NULL) fatal("%s: invalid log level %u (corrupted message?)", __func__, level); - do_log2(level, "%s [preauth]", msg); + sshlog(file, func, line, 0, level, "%s [preauth]", msg); sshbuf_free(logmsg); + free(file); + free(func); free(msg); return 0; diff --git a/monitor_wrap.c b/monitor_wrap.c index 5e38d83eb052..c18ee1819dad 100644 --- a/monitor_wrap.c +++ b/monitor_wrap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_wrap.c,v 1.118 2020/08/27 01:06:18 djm Exp $ */ +/* $OpenBSD: monitor_wrap.c,v 1.119 2020/10/16 13:24:45 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -82,7 +82,8 @@ extern struct sshbuf *loginmsg; extern ServerOptions options; void -mm_log_handler(LogLevel level, const char *msg, void *ctx) +mm_log_handler(const char *file, const char *func, int line, + LogLevel level, const char *msg, void *ctx) { struct sshbuf *log_msg; struct monitor *mon = (struct monitor *)ctx; @@ -96,6 +97,9 @@ mm_log_handler(LogLevel level, const char *msg, void *ctx) fatal("%s: sshbuf_new failed", __func__); if ((r = sshbuf_put_u32(log_msg, 0)) != 0 || /* length; filled below */ + (r = sshbuf_put_cstring(log_msg, file)) != 0 || + (r = sshbuf_put_cstring(log_msg, func)) != 0 || + (r = sshbuf_put_u32(log_msg, (u_int)line)) != 0 || (r = sshbuf_put_u32(log_msg, level)) != 0 || (r = sshbuf_put_cstring(log_msg, msg)) != 0) fatal("%s: buffer error: %s", __func__, ssh_err(r)); diff --git a/monitor_wrap.h b/monitor_wrap.h index 0db38c20657f..8507f1c11ef8 100644 --- a/monitor_wrap.h +++ b/monitor_wrap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_wrap.h,v 1.45 2020/08/27 01:06:18 djm Exp $ */ +/* $OpenBSD: monitor_wrap.h,v 1.46 2020/10/16 13:24:45 djm Exp $ */ /* * Copyright 2002 Niels Provos @@ -40,7 +40,8 @@ struct sshkey; struct sshauthopt; struct sshkey_sig_details; -void mm_log_handler(LogLevel, const char *, void *); +void mm_log_handler(const char *, const char *, int, LogLevel, + const char *, void *); int mm_is_monitor(void); #ifdef WITH_OPENSSL DH *mm_choose_dh(int, int, int); diff --git a/ssh-keyscan.c b/ssh-keyscan.c index ca190428a78b..ac7bfcd188cc 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.132 2020/08/12 01:23:45 cheloha Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.133 2020/10/16 13:24:45 djm Exp $ */ /* * Copyright 1995, 1996 by David Mazieres . * @@ -635,14 +635,15 @@ do_host(char *host) } void -fatal(const char *fmt,...) +sshfatal(const char *file, const char *func, int line, + const char *fmt, ...) { va_list args; va_start(args, fmt); - do_log(SYSLOG_LEVEL_FATAL, fmt, args); + ssh_log(file, func, line, SYSLOG_LEVEL_FATAL, fmt, args); va_end(args); - exit(255); + cleanup_exit(255); } static void From 793b583d097381730adaf6f68bed3c343139a013 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 16 Oct 2020 13:26:13 +0000 Subject: [PATCH 0040/1788] upstream: LogVerbose keyword for ssh and sshd Allows forcing maximum debug logging by file/function/line pattern- lists. ok markus@ OpenBSD-Commit-ID: c294c25732d1b4fe7e345cb3e044df00531a6356 --- auth.c | 6 +++++- monitor_wrap.c | 5 ++++- readconf.c | 23 ++++++++++++++++++++--- readconf.h | 5 +++-- servconf.c | 19 +++++++++++++++++-- servconf.h | 5 ++++- ssh.c | 4 +++- ssh_config.5 | 21 +++++++++++++++++++-- sshd.c | 7 +++++-- sshd_config.5 | 21 +++++++++++++++++++-- 10 files changed, 99 insertions(+), 17 deletions(-) diff --git a/auth.c b/auth.c index 9a5498b66d50..6e988424361f 100644 --- a/auth.c +++ b/auth.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth.c,v 1.147 2020/08/27 01:07:09 djm Exp $ */ +/* $OpenBSD: auth.c,v 1.148 2020/10/16 13:26:13 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -569,11 +569,15 @@ getpwnamallow(struct ssh *ssh, const char *user) #endif struct passwd *pw; struct connection_info *ci; + u_int i; ci = get_connection_info(ssh, 1, options.use_dns); ci->user = user; parse_server_match_config(&options, &includes, ci); log_change_level(options.log_level); + log_verbose_reset(); + for (i = 0; i < options.num_log_verbose; i++) + log_verbose_add(options.log_verbose[i]); process_permitopen(ssh, &options); #if defined(_AIX) && defined(HAVE_SETAUTHDB) diff --git a/monitor_wrap.c b/monitor_wrap.c index c18ee1819dad..b425cab107ac 100644 --- a/monitor_wrap.c +++ b/monitor_wrap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_wrap.c,v 1.119 2020/10/16 13:24:45 djm Exp $ */ +/* $OpenBSD: monitor_wrap.c,v 1.120 2020/10/16 13:26:13 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -332,6 +332,9 @@ mm_getpwnamallow(struct ssh *ssh, const char *username) copy_set_server_options(&options, newopts, 1); log_change_level(options.log_level); + log_verbose_reset(); + for (i = 0; i < options.num_log_verbose; i++) + log_verbose_add(options.log_verbose[i]); process_permitopen(ssh, &options); free(newopts); diff --git a/readconf.c b/readconf.c index 8655646b47f4..ea13bf99b1a1 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.338 2020/10/07 02:18:45 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.339 2020/10/16 13:26:13 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -152,7 +152,7 @@ typedef enum { oGlobalKnownHostsFile, oUserKnownHostsFile, oConnectionAttempts, oBatchMode, oCheckHostIP, oStrictHostKeyChecking, oCompression, oTCPKeepAlive, oNumberOfPasswordPrompts, - oLogFacility, oLogLevel, oCiphers, oMacs, + oLogFacility, oLogLevel, oLogVerbose, oCiphers, oMacs, oPubkeyAuthentication, oKbdInteractiveAuthentication, oKbdInteractiveDevices, oHostKeyAlias, oDynamicForward, oPreferredAuthentications, oHostbasedAuthentication, @@ -263,6 +263,7 @@ static struct { { "numberofpasswordprompts", oNumberOfPasswordPrompts }, { "syslogfacility", oLogFacility }, { "loglevel", oLogLevel }, + { "logverbose", oLogVerbose }, { "dynamicforward", oDynamicForward }, { "preferredauthentications", oPreferredAuthentications }, { "hostkeyalgorithms", oHostKeyAlgorithms }, @@ -901,7 +902,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, int linenum, int *activep, int flags, int *want_final_pass, int depth) { char *s, **charptr, *endofnumber, *keyword, *arg, *arg2; - char **cpptr, fwdarg[256]; + char **cpptr, ***cppptr, fwdarg[256]; u_int i, *uintptr, max_entries = 0; int r, oactive, negated, opcode, *intptr, value, value2, cmdline = 0; int remotefwd, dynamicfwd; @@ -1349,6 +1350,18 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, *log_facility_ptr = (SyslogFacility) value; break; + case oLogVerbose: + cppptr = &options->log_verbose; + uintptr = &options->num_log_verbose; + if (*activep && *uintptr == 0) { + while ((arg = strdelim(&s)) != NULL && *arg != '\0') { + *cppptr = xrecallocarray(*cppptr, *uintptr, + *uintptr + 1, sizeof(**cppptr)); + (*cppptr)[(*uintptr)++] = xstrdup(arg); + } + } + return 0; + case oLocalForward: case oRemoteForward: case oDynamicForward: @@ -2004,6 +2017,8 @@ initialize_options(Options * options) options->num_remote_forwards = 0; options->log_facility = SYSLOG_FACILITY_NOT_SET; options->log_level = SYSLOG_LEVEL_NOT_SET; + options->num_log_verbose = 0; + options->log_verbose = NULL; options->preferred_authentications = NULL; options->bind_address = NULL; options->bind_interface = NULL; @@ -2839,6 +2854,8 @@ dump_client_config(Options *o, const char *host) dump_cfg_strarray_oneline(oUserKnownHostsFile, o->num_user_hostfiles, o->user_hostfiles); dump_cfg_strarray(oSendEnv, o->num_send_env, o->send_env); dump_cfg_strarray(oSetEnv, o->num_setenv, o->setenv); + dump_cfg_strarray_oneline(oLogVerbose, + o->num_log_verbose, o->log_verbose); /* Special cases */ diff --git a/readconf.h b/readconf.h index d6a15550d8f3..be9154da0452 100644 --- a/readconf.h +++ b/readconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.h,v 1.134 2020/08/11 09:49:57 djm Exp $ */ +/* $OpenBSD: readconf.h,v 1.135 2020/10/16 13:26:13 djm Exp $ */ /* * Author: Tatu Ylonen @@ -55,7 +55,8 @@ typedef struct { int ip_qos_bulk; /* IP ToS/DSCP/class for bulk traffic */ SyslogFacility log_facility; /* Facility for system logging. */ LogLevel log_level; /* Level for logging. */ - + u_int num_log_verbose; /* Verbose log overrides */ + char **log_verbose; int port; /* Port to connect. */ int address_family; int connection_attempts; /* Max attempts (seconds) before diff --git a/servconf.c b/servconf.c index f08e37477957..cd5834df12a1 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.369 2020/08/28 03:15:52 dtucker Exp $ */ +/* $OpenBSD: servconf.c,v 1.370 2020/10/16 13:26:13 djm Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -122,6 +122,8 @@ initialize_server_options(ServerOptions *options) options->tcp_keep_alive = -1; options->log_facility = SYSLOG_FACILITY_NOT_SET; options->log_level = SYSLOG_LEVEL_NOT_SET; + options->num_log_verbose = 0; + options->log_verbose = NULL; options->hostbased_authentication = -1; options->hostbased_uses_name_from_packet_only = -1; options->hostbased_key_types = NULL; @@ -504,7 +506,7 @@ typedef enum { sUsePAM, /* Standard Options */ sPort, sHostKeyFile, sLoginGraceTime, - sPermitRootLogin, sLogFacility, sLogLevel, + sPermitRootLogin, sLogFacility, sLogLevel, sLogVerbose, sRhostsRSAAuthentication, sRSAAuthentication, sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup, sKerberosGetAFSToken, sChallengeResponseAuthentication, @@ -569,6 +571,7 @@ static struct { { "permitrootlogin", sPermitRootLogin, SSHCFG_ALL }, { "syslogfacility", sLogFacility, SSHCFG_GLOBAL }, { "loglevel", sLogLevel, SSHCFG_ALL }, + { "logverbose", sLogVerbose, SSHCFG_ALL }, { "rhostsauthentication", sDeprecated, SSHCFG_GLOBAL }, { "rhostsrsaauthentication", sDeprecated, SSHCFG_ALL }, { "hostbasedauthentication", sHostbasedAuthentication, SSHCFG_ALL }, @@ -1717,6 +1720,16 @@ process_server_config_line_depth(ServerOptions *options, char *line, *log_level_ptr = (LogLevel) value; break; + case sLogVerbose: + while ((arg = strdelim(&cp)) && *arg != '\0') { + if (!*activep) + continue; + array_append(filename, linenum, "oLogVerbose", + &options->log_verbose, &options->num_log_verbose, + arg); + } + break; + case sAllowTcpForwarding: intptr = &options->allow_tcp_forwarding; multistate_ptr = multistate_tcpfwd; @@ -2884,6 +2897,8 @@ dump_config(ServerOptions *o) dump_cfg_strarray(sSetEnv, o->num_setenv, o->setenv); dump_cfg_strarray_oneline(sAuthenticationMethods, o->num_auth_methods, o->auth_methods); + dump_cfg_strarray_oneline(sLogVerbose, + o->num_log_verbose, o->log_verbose); /* other arguments */ for (i = 0; i < o->num_subsystems; i++) diff --git a/servconf.h b/servconf.h index 1df8f3db8df3..7005aea95501 100644 --- a/servconf.h +++ b/servconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: servconf.h,v 1.146 2020/08/27 01:07:10 djm Exp $ */ +/* $OpenBSD: servconf.h,v 1.147 2020/10/16 13:26:13 djm Exp $ */ /* * Author: Tatu Ylonen @@ -118,6 +118,8 @@ typedef struct { struct ForwardOptions fwd_opts; /* forwarding options */ SyslogFacility log_facility; /* Facility for system logging. */ LogLevel log_level; /* Level for system logging. */ + u_int num_log_verbose; /* Verbose log overrides */ + char **log_verbose; int hostbased_authentication; /* If true, permit ssh2 hostbased auth */ int hostbased_uses_name_from_packet_only; /* experimental */ char *hostbased_key_types; /* Key types allowed for hostbased */ @@ -280,6 +282,7 @@ TAILQ_HEAD(include_list, include_item); M_CP_STRARRAYOPT(auth_methods, num_auth_methods); \ M_CP_STRARRAYOPT(permitted_opens, num_permitted_opens); \ M_CP_STRARRAYOPT(permitted_listens, num_permitted_listens); \ + M_CP_STRARRAYOPT(log_verbose, num_log_verbose); \ } while (0) struct connection_info *get_connection_info(struct ssh *, int, int); diff --git a/ssh.c b/ssh.c index 563f4cdf265d..3d5ca9b03511 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.538 2020/10/12 08:36:36 kn Exp $ */ +/* $OpenBSD: ssh.c,v 1.539 2020/10/16 13:26:13 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1355,6 +1355,8 @@ main(int ac, char **av) /* reinit */ log_init(argv0, options.log_level, options.log_facility, !use_syslog); + for (j = 0; j < options.num_log_verbose; j++) + log_verbose_add(options.log_verbose[j]); if (options.request_tty == REQUEST_TTY_YES || options.request_tty == REQUEST_TTY_FORCE) diff --git a/ssh_config.5 b/ssh_config.5 index 8e42776560d6..c0ebe37a6e17 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.336 2020/10/08 00:31:05 djm Exp $ -.Dd $Mdocdate: October 8 2020 $ +.\" $OpenBSD: ssh_config.5,v 1.337 2020/10/16 13:26:13 djm Exp $ +.Dd $Mdocdate: October 16 2020 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1183,6 +1183,23 @@ QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3. The default is INFO. DEBUG and DEBUG1 are equivalent. DEBUG2 and DEBUG3 each specify higher levels of verbose output. +.It Cm LogVerbose +Specify one or more overrides to LogLevel. +An override consists of a pattern lists that matches the source file, function +and line number to force detailed logging for. +For example, an override pattern of: +.Bd -literal -offset indent +kex.c:*:1000,*:kex_exchange_identification():*,packet.c:* +.Ed +.Pp +would enable detailed logging for line 1000 of +.Pa kex.c, +everything in the +.Fn kex_exchange_identification +function, and all code in the +.Pa packet.c +file. +This option is intended for debugging and no overrides are enabled by default. .It Cm MACs Specifies the MAC (message authentication code) algorithms in order of preference. diff --git a/sshd.c b/sshd.c index 6c990759e928..a196441092af 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.562 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: sshd.c,v 1.563 2020/10/16 13:26:13 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2006,7 +2006,10 @@ main(int ac, char **av) /* Initialize the log (it is reinitialized below in case we forked). */ if (debug_flag && (!inetd_flag || rexeced_flag)) log_stderr = 1; - log_init(__progname, options.log_level, options.log_facility, log_stderr); + log_init(__progname, options.log_level, + options.log_facility, log_stderr); + for (i = 0; i < options.num_log_verbose; i++) + log_verbose_add(options.log_verbose[i]); /* * If not in debugging mode, not started from inetd and not already diff --git a/sshd_config.5 b/sshd_config.5 index f68369f8fe66..b5d201dc2012 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.316 2020/10/03 04:15:06 djm Exp $ -.Dd $Mdocdate: October 3 2020 $ +.\" $OpenBSD: sshd_config.5,v 1.317 2020/10/16 13:26:13 djm Exp $ +.Dd $Mdocdate: October 16 2020 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -1028,6 +1028,23 @@ The default is INFO. DEBUG and DEBUG1 are equivalent. DEBUG2 and DEBUG3 each specify higher levels of debugging output. Logging with a DEBUG level violates the privacy of users and is not recommended. +.It Cm LogVerbose +Specify one or more overrides to LogLevel. +An override consists of a pattern lists that matches the source file, function +and line number to force detailed logging for. +For example, an override pattern of: +.Bd -literal -offset indent +kex.c:*:1000,*:kex_exchange_identification():*,packet.c:* +.Ed +.Pp +would enable detailed logging for line 1000 of +.Pa kex.c, +everything in the +.Fn kex_exchange_identification +function, and all code in the +.Pa packet.c +file. +This option is intended for debugging and no overrides are enabled by default. .It Cm MACs Specifies the available MAC (message authentication code) algorithms. The MAC algorithm is used for data integrity protection. From afbd9ec9e2dbad04834ce7ce53e58740434f32a5 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 17 Oct 2020 11:33:13 +1100 Subject: [PATCH 0041/1788] fix netcat build problem --- regress/netcat.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/regress/netcat.c b/regress/netcat.c index d583176f1f28..20ec3f5954fa 100644 --- a/regress/netcat.c +++ b/regress/netcat.c @@ -69,6 +69,9 @@ # include #endif +/* rename to avoid collision in libssh */ +#define timeout_connect netcat_timeout_connect + /* Telnet options from arpa/telnet.h */ #define IAC 255 #define DONT 254 From 0f938f998626e8359324f803157cd7c9f8f403e2 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 17 Oct 2020 11:42:26 +1100 Subject: [PATCH 0042/1788] adapt sk-dummy's fatal implementation to changes --- regress/misc/sk-dummy/fatal.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/regress/misc/sk-dummy/fatal.c b/regress/misc/sk-dummy/fatal.c index 7cdc74b97b57..f711f6e92fba 100644 --- a/regress/misc/sk-dummy/fatal.c +++ b/regress/misc/sk-dummy/fatal.c @@ -1,14 +1,17 @@ /* public domain */ +#include "includes.h" + #include #include #include #include -void fatal(char *fmt, ...); +void +sshfatal(const char *file, const char *func, int line, const char *fmt, ...); void -fatal(char *fmt, ...) +sshfatal(const char *file, const char *func, int line, const char *fmt, ...) { va_list ap; From f9ea6515202b59a1e2d5b885cafc1b12eff33016 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 17 Oct 2020 11:51:20 +1100 Subject: [PATCH 0043/1788] logging is now macros, remove function pointers --- openbsd-compat/port-linux.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c index f46094faf84d..89915eb87717 100644 --- a/openbsd-compat/port-linux.c +++ b/openbsd-compat/port-linux.c @@ -182,7 +182,7 @@ ssh_selinux_change_context(const char *newname) { int len, newlen; char *oldctx, *newctx, *cx; - void (*switchlog) (const char *fmt,...) = logit; + LogLevel log_level = SYSLOG_LEVEL_INFO; if (!ssh_selinux_enabled()) return; @@ -193,7 +193,7 @@ ssh_selinux_change_context(const char *newname) } if ((cx = index(oldctx, ':')) == NULL || (cx = index(cx + 1, ':')) == NULL) { - logit ("%s: unparsable context %s", __func__, oldctx); + logit("%s: unparsable context %s", __func__, oldctx); return; } @@ -203,7 +203,7 @@ ssh_selinux_change_context(const char *newname) */ if (strncmp(cx, SSH_SELINUX_UNCONFINED_TYPE, sizeof(SSH_SELINUX_UNCONFINED_TYPE) - 1) == 0) - switchlog = debug3; + log_level = SYSLOG_LEVEL_DEBUG3; newlen = strlen(oldctx) + strlen(newname) + 1; newctx = xmalloc(newlen); @@ -215,8 +215,8 @@ ssh_selinux_change_context(const char *newname) debug3("%s: setting context from '%s' to '%s'", __func__, oldctx, newctx); if (setcon(newctx) < 0) - switchlog("%s: setcon %s from %s failed with %s", __func__, - newctx, oldctx, strerror(errno)); + do_log2(log_level, "%s: setcon %s from %s failed with %s", + __func__, newctx, oldctx, strerror(errno)); free(oldctx); free(newctx); } From f812a36cee5727147bc897d34ab9af068dd4561e Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 17 Oct 2020 12:03:34 +1100 Subject: [PATCH 0044/1788] check for and require a C99 capable compiler recent logging changes use __VA_ARGS__. --- configure.ac | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/configure.ac b/configure.ac index 7005a503e022..05f7b713b5fa 100644 --- a/configure.ac +++ b/configure.ac @@ -22,6 +22,12 @@ AC_CONFIG_HEADER([config.h]) AC_PROG_CC([cc gcc]) AC_CANONICAL_HOST AC_C_BIGENDIAN +AC_PROG_CC_C99 + +# XXX relax this after reimplementing logit() etc. +if test "x$ac_cv_prog_cc_c99" = "xno" ; then + AC_MSG_ERROR([*** OpenSSH requires a C99 capable compiler ***]) +fi # Checks for programs. AC_PROG_AWK From 616029a85ad7529b24bb8c4631d9607c0d6e7afe Mon Sep 17 00:00:00 2001 From: "jmc@openbsd.org" Date: Fri, 16 Oct 2020 14:34:33 +0000 Subject: [PATCH 0045/1788] upstream: add space between macro arg and punctuation; OpenBSD-Commit-ID: bb81e2ed5a77832fe62ab30a915ae67cda57633e --- ssh_config.5 | 4 ++-- sshd_config.5 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index c0ebe37a6e17..98035a2f40b9 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.337 2020/10/16 13:26:13 djm Exp $ +.\" $OpenBSD: ssh_config.5,v 1.338 2020/10/16 14:34:33 jmc Exp $ .Dd $Mdocdate: October 16 2020 $ .Dt SSH_CONFIG 5 .Os @@ -1193,7 +1193,7 @@ kex.c:*:1000,*:kex_exchange_identification():*,packet.c:* .Ed .Pp would enable detailed logging for line 1000 of -.Pa kex.c, +.Pa kex.c , everything in the .Fn kex_exchange_identification function, and all code in the diff --git a/sshd_config.5 b/sshd_config.5 index b5d201dc2012..a35c8d8cd5d5 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.317 2020/10/16 13:26:13 djm Exp $ +.\" $OpenBSD: sshd_config.5,v 1.318 2020/10/16 14:34:33 jmc Exp $ .Dd $Mdocdate: October 16 2020 $ .Dt SSHD_CONFIG 5 .Os @@ -1038,7 +1038,7 @@ kex.c:*:1000,*:kex_exchange_identification():*,packet.c:* .Ed .Pp would enable detailed logging for line 1000 of -.Pa kex.c, +.Pa kex.c , everything in the .Fn kex_exchange_identification function, and all code in the From 3554b4afa38b3483a3302f1be18eaa6f843bb260 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 17 Oct 2020 01:28:20 +0000 Subject: [PATCH 0046/1788] upstream: make the log functions that exit (sshlogdie(), sshfatal(), etc) have identical signatures. Makes things a bit more consistent... OpenBSD-Commit-ID: bd0ae124733389d7c0042e135c71ee9091362eb9 --- fatal.c | 7 ++++--- log.c | 12 +++++++----- log.h | 23 +++++++++++++---------- ssh-keyscan.c | 8 ++++---- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/fatal.c b/fatal.c index 3ecd510f1dcf..40daa08b8ba6 100644 --- a/fatal.c +++ b/fatal.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fatal.c,v 1.8 2020/10/16 13:24:45 djm Exp $ */ +/* $OpenBSD: fatal.c,v 1.9 2020/10/17 01:28:20 djm Exp $ */ /* * Copyright (c) 2002 Markus Friedl. All rights reserved. * @@ -34,12 +34,13 @@ /* Fatal messages. This function never returns. */ void -sshfatal(const char *file, const char *func, int line, const char *fmt, ...) +sshfatal(const char *file, const char *func, int line, int showfunc, + LogLevel level, const char *fmt, ...) { va_list args; va_start(args, fmt); - ssh_log(file, func, line, SYSLOG_LEVEL_FATAL, fmt, args); + ssh_log(file, func, line, showfunc, level, fmt, args); va_end(args); cleanup_exit(255); } diff --git a/log.c b/log.c index 159c306deb87..164a843d0908 100644 --- a/log.c +++ b/log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: log.c,v 1.53 2020/10/16 13:24:45 djm Exp $ */ +/* $OpenBSD: log.c,v 1.54 2020/10/17 01:28:20 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -427,23 +427,25 @@ sshlog(const char *file, const char *func, int line, int showfunc, } void -sshlogdie(const char *file, const char *func, int line, const char *fmt, ...) +sshlogdie(const char *file, const char *func, int line, int showfunc, + LogLevel level, const char *fmt, ...) { va_list args; va_start(args, fmt); - sshlogv(file, func, line, 0, SYSLOG_LEVEL_INFO, fmt, args); + sshlogv(file, func, line, showfunc, SYSLOG_LEVEL_INFO, fmt, args); va_end(args); cleanup_exit(255); } void -sshsigdie(const char *file, const char *func, int line, const char *fmt, ...) +sshsigdie(const char *file, const char *func, int line, int showfunc, + LogLevel level, const char *fmt, ...) { va_list args; va_start(args, fmt); - sshlogv(file, func, line, 0, SYSLOG_LEVEL_FATAL, fmt, args); + sshlogv(file, func, line, showfunc, SYSLOG_LEVEL_FATAL, fmt, args); va_end(args); _exit(1); } diff --git a/log.h b/log.h index b1ab7c7e0b70..136bffc1ac93 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.25 2020/10/16 13:24:45 djm Exp $ */ +/* $OpenBSD: log.h,v 1.26 2020/10/17 01:28:20 djm Exp $ */ /* * Author: Tatu Ylonen @@ -71,12 +71,15 @@ void sshlog(const char *, const char *, int, int, LogLevel, const char *, ...) __attribute__((format(printf, 6, 7))); void sshlogv(const char *, const char *, int, int, LogLevel, const char *, va_list); -void sshsigdie(const char *, const char *, int, const char *, ...) - __attribute__((noreturn)) __attribute__((format(printf, 4, 5))); -void sshlogdie(const char *, const char *, int, const char *, ...) - __attribute__((noreturn)) __attribute__((format(printf, 4, 5))); -void sshfatal(const char *, const char *, int, const char *, ...) - __attribute__((noreturn)) __attribute__((format(printf, 4, 5))); +void sshsigdie(const char *, const char *, int, int, + LogLevel, const char *, ...) __attribute__((noreturn)) + __attribute__((format(printf, 6, 7))); +void sshlogdie(const char *, const char *, int, int, + LogLevel, const char *, ...) __attribute__((noreturn)) + __attribute__((format(printf, 6, 7))); +void sshfatal(const char *, const char *, int, int, + LogLevel, const char *, ...) __attribute__((noreturn)) + __attribute__((format(printf, 6, 7))); #define ssh_nlog(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, __VA_ARGS__) #define ssh_debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, __VA_ARGS__) @@ -85,9 +88,9 @@ void sshfatal(const char *, const char *, int, const char *, ...) #define ssh_verbose(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, __VA_ARGS__) #define ssh_log(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, __VA_ARGS__) #define ssh_error(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) -#define ssh_fatal(...) sshfatal(__FILE__, __func__, __LINE__, __VA_ARGS__) -#define ssh_logdie(...) sshlogdie(__FILE__, __func__, __LINE__, __VA_ARGS__) -#define ssh_sigdie(...) sshsigdie(__FILE__, __func__, __LINE__, __VA_ARGS__) +#define ssh_fatal(...) sshfatal(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_FATAL, __VA_ARGS__) +#define ssh_logdie(...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) +#define ssh_sigdie(...) sshsigdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) #define debug ssh_debug #define debug1 ssh_debug1 diff --git a/ssh-keyscan.c b/ssh-keyscan.c index ac7bfcd188cc..11816559597f 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.133 2020/10/16 13:24:45 djm Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.134 2020/10/17 01:28:20 djm Exp $ */ /* * Copyright 1995, 1996 by David Mazieres . * @@ -635,13 +635,13 @@ do_host(char *host) } void -sshfatal(const char *file, const char *func, int line, - const char *fmt, ...) +sshfatal(const char *file, const char *func, int line, int showfunc, + LogLevel level, const char *fmt, ...) { va_list args; va_start(args, fmt); - ssh_log(file, func, line, SYSLOG_LEVEL_FATAL, fmt, args); + ssh_log(file, func, line, showfunc, level, fmt, args); va_end(args); cleanup_exit(255); } From 999d7cb79a3a73d92a6dfbf174c33da0d984c7a2 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 17 Oct 2020 22:47:52 +1100 Subject: [PATCH 0047/1788] sync regress/misc/sk-dummy/fatal.c --- regress/misc/sk-dummy/fatal.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/regress/misc/sk-dummy/fatal.c b/regress/misc/sk-dummy/fatal.c index f711f6e92fba..0aea5b46ca40 100644 --- a/regress/misc/sk-dummy/fatal.c +++ b/regress/misc/sk-dummy/fatal.c @@ -7,14 +7,17 @@ #include #include -void -sshfatal(const char *file, const char *func, int line, const char *fmt, ...); +void sshfatal(const char *file, const char *func, int line, int showfunc, + LogLevel level, const char *fmt, ...); void -sshfatal(const char *file, const char *func, int line, const char *fmt, ...) +sshfatal(const char *file, const char *func, int line, int showfunc, + LogLevel level, const char *fmt, ...) { va_list ap; + if (showfunc) + fprintf(stderr, "%s: ", func); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); From d55dfed34ef6ef1f028d552a90d5f3dba8dd6f7b Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 17 Oct 2020 22:55:24 +1100 Subject: [PATCH 0048/1788] missing header --- regress/misc/sk-dummy/fatal.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/regress/misc/sk-dummy/fatal.c b/regress/misc/sk-dummy/fatal.c index 0aea5b46ca40..f0c5bb479824 100644 --- a/regress/misc/sk-dummy/fatal.c +++ b/regress/misc/sk-dummy/fatal.c @@ -7,6 +7,8 @@ #include #include +#include "log.h" + void sshfatal(const char *file, const char *func, int line, int showfunc, LogLevel level, const char *fmt, ...); From 9cac1db52e6c4961c447910fe02cd68a3b2f9460 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 18 Oct 2020 11:13:45 +0000 Subject: [PATCH 0049/1788] upstream: add some variant log.h calls that prepend the calling function name; ok markus@ OpenBSD-Commit-ID: 4be1b2e2455b271ddb7457bc195c5367644f4e48 --- log.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/log.h b/log.h index 136bffc1ac93..f9d7c5a9364b 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.26 2020/10/17 01:28:20 djm Exp $ */ +/* $OpenBSD: log.h,v 1.27 2020/10/18 11:13:45 djm Exp $ */ /* * Author: Tatu Ylonen @@ -92,6 +92,18 @@ void sshfatal(const char *, const char *, int, int, #define ssh_logdie(...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) #define ssh_sigdie(...) sshsigdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) +/* Variants that prepend the caller's function */ +#define ssh_nlog_f(level, ...) sshlog(__FILE__, __func__, __LINE__, 1, level, __VA_ARGS__) +#define ssh_debug3_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG3, __VA_ARGS__) +#define ssh_debug2_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG2, __VA_ARGS__) +#define ssh_debug_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG1, __VA_ARGS__) +#define ssh_verbose_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_VERBOSE, __VA_ARGS__) +#define ssh_log_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_INFO, __VA_ARGS__) +#define ssh_error_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, __VA_ARGS__) +#define ssh_fatal_f(...) sshfatal(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_FATAL, __VA_ARGS__) +#define ssh_logdie_f(...) sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, __VA_ARGS__) +#define ssh_sigdie_f(...) sshsigdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, __VA_ARGS__) + #define debug ssh_debug #define debug1 ssh_debug1 #define debug2 ssh_debug2 From 28cb0a4b03940d1ee576eb767a81a4113bdc917e Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 18 Oct 2020 11:14:27 +0000 Subject: [PATCH 0050/1788] upstream: remove a level of macro indirection; ok markus@ OpenBSD-Commit-ID: 0c529d06e902c5d1a6b231e1bec6157f76dc67c9 --- log.h | 46 +++++++++++----------------------------------- 1 file changed, 11 insertions(+), 35 deletions(-) diff --git a/log.h b/log.h index f9d7c5a9364b..a8892f762a50 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.27 2020/10/18 11:13:45 djm Exp $ */ +/* $OpenBSD: log.h,v 1.28 2020/10/18 11:14:27 djm Exp $ */ /* * Author: Tatu Ylonen @@ -81,39 +81,15 @@ void sshfatal(const char *, const char *, int, int, LogLevel, const char *, ...) __attribute__((noreturn)) __attribute__((format(printf, 6, 7))); -#define ssh_nlog(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, __VA_ARGS__) -#define ssh_debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, __VA_ARGS__) -#define ssh_debug2(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, __VA_ARGS__) -#define ssh_debug(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG1, __VA_ARGS__) -#define ssh_verbose(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, __VA_ARGS__) -#define ssh_log(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, __VA_ARGS__) -#define ssh_error(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) -#define ssh_fatal(...) sshfatal(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_FATAL, __VA_ARGS__) -#define ssh_logdie(...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) -#define ssh_sigdie(...) sshsigdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) - -/* Variants that prepend the caller's function */ -#define ssh_nlog_f(level, ...) sshlog(__FILE__, __func__, __LINE__, 1, level, __VA_ARGS__) -#define ssh_debug3_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG3, __VA_ARGS__) -#define ssh_debug2_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG2, __VA_ARGS__) -#define ssh_debug_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG1, __VA_ARGS__) -#define ssh_verbose_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_VERBOSE, __VA_ARGS__) -#define ssh_log_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_INFO, __VA_ARGS__) -#define ssh_error_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, __VA_ARGS__) -#define ssh_fatal_f(...) sshfatal(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_FATAL, __VA_ARGS__) -#define ssh_logdie_f(...) sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, __VA_ARGS__) -#define ssh_sigdie_f(...) sshsigdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, __VA_ARGS__) - -#define debug ssh_debug -#define debug1 ssh_debug1 -#define debug2 ssh_debug2 -#define debug3 ssh_debug3 -#define error ssh_error -#define logit ssh_log -#define verbose ssh_verbose -#define fatal ssh_fatal -#define logdie ssh_logdie -#define sigdie ssh_sigdie -#define do_log2 ssh_nlog +#define do_log2(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, __VA_ARGS__) +#define debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, __VA_ARGS__) +#define debug2(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, __VA_ARGS__) +#define debug(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG1, __VA_ARGS__) +#define verbose(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, __VA_ARGS__) +#define logit(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, __VA_ARGS__) +#define error(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) +#define fatal(...) sshfatal(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_FATAL, __VA_ARGS__) +#define logdie(...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) +#define sigdie(...) sshsigdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) #endif From 9e2c4f64224f68fb84c49b5182e449f94b0dc985 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 18 Oct 2020 11:21:59 +0000 Subject: [PATCH 0051/1788] upstream: variants of the log methods that append a ssherr.h string from a supplied error code; ok markus@ OpenBSD-Commit-ID: aed98c4435d48d036ae6740300f6a8357b7cc0bf --- fatal.c | 6 ++--- log.c | 26 +++++++++++------- log.h | 74 ++++++++++++++++++++++++++++++++++++++------------- monitor.c | 7 +++-- ssh-keyscan.c | 6 ++--- 5 files changed, 80 insertions(+), 39 deletions(-) diff --git a/fatal.c b/fatal.c index 40daa08b8ba6..da5bf906986a 100644 --- a/fatal.c +++ b/fatal.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fatal.c,v 1.9 2020/10/17 01:28:20 djm Exp $ */ +/* $OpenBSD: fatal.c,v 1.10 2020/10/18 11:21:59 djm Exp $ */ /* * Copyright (c) 2002 Markus Friedl. All rights reserved. * @@ -35,12 +35,12 @@ void sshfatal(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *fmt, ...) + LogLevel level, const char *suffix, const char *fmt, ...) { va_list args; va_start(args, fmt); - ssh_log(file, func, line, showfunc, level, fmt, args); + sshlog(file, func, line, showfunc, level, suffix, fmt, args); va_end(args); cleanup_exit(255); } diff --git a/log.c b/log.c index 164a843d0908..f57e7550656e 100644 --- a/log.c +++ b/log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: log.c,v 1.54 2020/10/17 01:28:20 djm Exp $ */ +/* $OpenBSD: log.c,v 1.55 2020/10/18 11:21:59 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -334,7 +334,7 @@ set_log_handler(log_handler_fn *handler, void *ctx) static void do_log(const char *file, const char *func, int line, LogLevel level, - int force, const char *fmt, va_list args) + int force, const char *suffix, const char *fmt, va_list args) { #if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) struct syslog_data sdata = SYSLOG_DATA_INIT; @@ -389,6 +389,10 @@ do_log(const char *file, const char *func, int line, LogLevel level, } else { vsnprintf(msgbuf, sizeof(msgbuf), fmt, args); } + if (suffix != NULL) { + snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", msgbuf, suffix); + strlcpy(msgbuf, fmtbuf, sizeof(msgbuf)); + } strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), log_on_stderr ? LOG_STDERR_VIS : LOG_SYSLOG_VIS); if (log_handler != NULL) { @@ -417,42 +421,44 @@ do_log(const char *file, const char *func, int line, LogLevel level, void sshlog(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *fmt, ...) + LogLevel level, const char *suffix, const char *fmt, ...) { va_list args; va_start(args, fmt); - sshlogv(file, func, line, showfunc, level, fmt, args); + sshlogv(file, func, line, showfunc, level, suffix, fmt, args); va_end(args); } void sshlogdie(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *fmt, ...) + LogLevel level, const char *suffix, const char *fmt, ...) { va_list args; va_start(args, fmt); - sshlogv(file, func, line, showfunc, SYSLOG_LEVEL_INFO, fmt, args); + sshlogv(file, func, line, showfunc, SYSLOG_LEVEL_INFO, + suffix, fmt, args); va_end(args); cleanup_exit(255); } void sshsigdie(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *fmt, ...) + LogLevel level, const char *suffix, const char *fmt, ...) { va_list args; va_start(args, fmt); - sshlogv(file, func, line, showfunc, SYSLOG_LEVEL_FATAL, fmt, args); + sshlogv(file, func, line, showfunc, SYSLOG_LEVEL_FATAL, + suffix, fmt, args); va_end(args); _exit(1); } void sshlogv(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *fmt, va_list args) + LogLevel level, const char *suffix, const char *fmt, va_list args) { char tag[128], fmt2[MSGBUFSIZ + 128]; int forced = 0; @@ -475,5 +481,5 @@ sshlogv(const char *file, const char *func, int line, int showfunc, else strlcpy(fmt2, fmt, sizeof(fmt2)); - do_log(file, func, line, level, forced, fmt2, args); + do_log(file, func, line, level, forced, suffix, fmt2, args); } diff --git a/log.h b/log.h index a8892f762a50..ee81ec568832 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.28 2020/10/18 11:14:27 djm Exp $ */ +/* $OpenBSD: log.h,v 1.29 2020/10/18 11:21:59 djm Exp $ */ /* * Author: Tatu Ylonen @@ -16,6 +16,7 @@ #define SSH_LOG_H #include /* va_list */ +#include /* ssh_err() */ /* Supported syslog facilities and levels. */ typedef enum { @@ -68,28 +69,63 @@ void set_log_handler(log_handler_fn *, void *); void cleanup_exit(int) __attribute__((noreturn)); void sshlog(const char *, const char *, int, int, - LogLevel, const char *, ...) __attribute__((format(printf, 6, 7))); + LogLevel, const char *, const char *, ...) + __attribute__((format(printf, 7, 8))); void sshlogv(const char *, const char *, int, int, - LogLevel, const char *, va_list); + LogLevel, const char *, const char *, va_list); void sshsigdie(const char *, const char *, int, int, - LogLevel, const char *, ...) __attribute__((noreturn)) - __attribute__((format(printf, 6, 7))); + LogLevel, const char *, const char *, ...) __attribute__((noreturn)) + __attribute__((format(printf, 7, 8))); void sshlogdie(const char *, const char *, int, int, - LogLevel, const char *, ...) __attribute__((noreturn)) - __attribute__((format(printf, 6, 7))); + LogLevel, const char *, const char *, ...) __attribute__((noreturn)) + __attribute__((format(printf, 7, 8))); void sshfatal(const char *, const char *, int, int, - LogLevel, const char *, ...) __attribute__((noreturn)) - __attribute__((format(printf, 6, 7))); + LogLevel, const char *, const char *, ...) __attribute__((noreturn)) + __attribute__((format(printf, 7, 8))); -#define do_log2(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, __VA_ARGS__) -#define debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, __VA_ARGS__) -#define debug2(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, __VA_ARGS__) -#define debug(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG1, __VA_ARGS__) -#define verbose(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, __VA_ARGS__) -#define logit(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, __VA_ARGS__) -#define error(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) -#define fatal(...) sshfatal(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_FATAL, __VA_ARGS__) -#define logdie(...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) -#define sigdie(...) sshsigdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__) +#define do_log2(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, NULL, __VA_ARGS__) +#define debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, NULL, __VA_ARGS__) +#define debug2(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, NULL, __VA_ARGS__) +#define debug(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG1, NULL, __VA_ARGS__) +#define verbose(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, NULL, __VA_ARGS__) +#define logit(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, NULL, __VA_ARGS__) +#define error(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__) +#define fatal(...) sshfatal(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_FATAL, NULL, __VA_ARGS__) +#define logdie(...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__) +#define sigdie(...) sshsigdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__) + +/* Variants that prepend the caller's function */ +#define do_log2_f(level, ...) sshlog(__FILE__, __func__, __LINE__, 1, level, NULL, __VA_ARGS__) +#define debug3_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG3, NULL, __VA_ARGS__) +#define debug2_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG2, NULL, __VA_ARGS__) +#define debug_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG1, NULL, __VA_ARGS__) +#define verbose_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_VERBOSE, NULL, __VA_ARGS__) +#define logit_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_INFO, NULL, __VA_ARGS__) +#define error_f(...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__) +#define fatal_f(...) sshfatal(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_FATAL, NULL, __VA_ARGS__) +#define logdie_f(...) sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__) +#define sigdie_f(...) sshsigdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__) + +/* Variants that appends a ssh_err message */ +#define do_log2_r(r, level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, ssh_err(r), __VA_ARGS__) +#define debug3_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, ssh_err(r), __VA_ARGS__) +#define debug2_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, ssh_err(r), __VA_ARGS__) +#define debug_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG1, ssh_err(r), __VA_ARGS__) +#define verbose_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_VERBOSE, ssh_err(r), __VA_ARGS__) +#define logit_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_INFO, ssh_err(r), __VA_ARGS__) +#define error_r(r, ...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__) +#define fatal_r(r, ...) sshfatal(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_FATAL, ssh_err(r), __VA_ARGS__) +#define logdie_r(r, ...) sshlogdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__) +#define sigdie_r(r, ...) sshsigdie(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__) +#define do_log2_fr(r, level, ...) sshlog(__FILE__, __func__, __LINE__, 1, level, ssh_err(r), __VA_ARGS__) +#define debug3_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG3, ssh_err(r), __VA_ARGS__) +#define debug2_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG2, ssh_err(r), __VA_ARGS__) +#define debug_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_DEBUG1, ssh_err(r), __VA_ARGS__) +#define verbose_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_VERBOSE, ssh_err(r), __VA_ARGS__) +#define logit_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_INFO, ssh_err(r), __VA_ARGS__) +#define error_fr(r, ...) sshlog(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__) +#define fatal_fr(r, ...) sshfatal(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_FATAL, ssh_err(r), __VA_ARGS__) +#define logdie_fr(r, ...) sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__) +#define sigdie_fr(r, ...) sshsigdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__) #endif diff --git a/monitor.c b/monitor.c index 9f22f0681488..c4e07ba4dfe2 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.215 2020/10/16 13:24:45 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.216 2020/10/18 11:21:59 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -461,9 +461,8 @@ monitor_read_log(struct monitor *pmonitor) /* Log it */ if (log_level_name(level) == NULL) - fatal("%s: invalid log level %u (corrupted message?)", - __func__, level); - sshlog(file, func, line, 0, level, "%s [preauth]", msg); + fatal_f("invalid log level %u (corrupted message?)", level); + sshlog(file, func, line, 0, level, NULL, "%s [preauth]", msg); sshbuf_free(logmsg); free(file); diff --git a/ssh-keyscan.c b/ssh-keyscan.c index 11816559597f..034ed48c778f 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.134 2020/10/17 01:28:20 djm Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.135 2020/10/18 11:21:59 djm Exp $ */ /* * Copyright 1995, 1996 by David Mazieres . * @@ -636,12 +636,12 @@ do_host(char *host) void sshfatal(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *fmt, ...) + LogLevel level, const char *suffix, const char *fmt, ...) { va_list args; va_start(args, fmt); - ssh_log(file, func, line, showfunc, level, fmt, args); + sshlog(file, func, line, showfunc, level, suffix, fmt, args); va_end(args); cleanup_exit(255); } From 816036f142ecd284c12bb3685ae316a68d2ef190 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 18 Oct 2020 11:32:01 +0000 Subject: [PATCH 0052/1788] upstream: use the new variant log macros instead of prepending __func__ and appending ssh_err(r) manually; ok markus@ OpenBSD-Commit-ID: 1f14b80bcfa85414b2a1a6ff714fb5362687ace8 --- .depend | 192 ++++++------ addrmatch.c | 20 +- auth-options.c | 15 +- auth-passwd.c | 6 +- auth-rhosts.c | 6 +- auth.c | 38 ++- auth2-chall.c | 37 ++- auth2-gss.c | 26 +- auth2-hostbased.c | 51 ++-- auth2-kbdint.c | 4 +- auth2-none.c | 4 +- auth2-passwd.c | 4 +- auth2-pubkey.c | 104 +++---- auth2.c | 56 ++-- canohost.c | 8 +- channels.c | 463 ++++++++++++----------------- clientloop.c | 336 ++++++++++----------- compat.c | 14 +- dh.c | 6 +- dns.c | 7 +- gss-genr.c | 12 +- hostfile.c | 57 ++-- kex.c | 100 +++---- krl.c | 100 +++---- misc.c | 97 +++--- monitor.c | 295 +++++++++---------- monitor_fdpass.c | 24 +- monitor_wrap.c | 227 +++++++------- msg.c | 16 +- mux.c | 538 ++++++++++++++++------------------ nchan.c | 63 ++-- packet.c | 51 ++-- readconf.c | 23 +- readpass.c | 30 +- regress/misc/sk-dummy/fatal.c | 6 +- sandbox-pledge.c | 8 +- sandbox-rlimit.c | 18 +- scp.c | 6 +- servconf.c | 34 +-- serverloop.c | 84 +++--- session.c | 131 ++++----- sftp-client.c | 165 +++++------ sftp-common.c | 4 +- sftp-server.c | 121 ++++---- sftp.c | 4 +- sk-usbhid.c | 6 +- ssh-add.c | 32 +- ssh-agent.c | 172 +++++------ ssh-ed25519-sk.c | 5 +- ssh-ed25519.c | 5 +- ssh-keygen.c | 304 +++++++++---------- ssh-keyscan.c | 12 +- ssh-keysign.c | 53 ++-- ssh-pkcs11-client.c | 53 ++-- ssh-pkcs11-helper.c | 72 ++--- ssh-pkcs11.c | 77 +++-- ssh-sk-client.c | 77 +++-- ssh-sk-helper.c | 47 +-- ssh-sk.c | 87 +++--- ssh-xmss.c | 5 +- ssh.c | 106 ++++--- ssh_api.c | 20 +- sshconnect.c | 68 ++--- sshconnect2.c | 218 +++++++------- sshd.c | 151 +++++----- sshlogin.c | 4 +- sshsig.c | 114 ++++--- ttymodes.c | 42 ++- 68 files changed, 2473 insertions(+), 2868 deletions(-) diff --git a/.depend b/.depend index f05bd9d7483c..03b73ea6814d 100644 --- a/.depend +++ b/.depend @@ -2,103 +2,103 @@ # Run "make depend" to rebuild. # DO NOT DELETE -addrmatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h match.h log.h +addrmatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h match.h log.h ./ssherr.h atomicio.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h audit-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h audit-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h audit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h sshbuf.h sshkey.h misc.h servconf.h uidswap.h hostfile.h auth.h auth-pam.h audit.h loginrec.h -auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h log.h sshbuf.h misc.h sshkey.h match.h ssh2.h auth-options.h +auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h sshbuf.h sshkey.h misc.h servconf.h uidswap.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ./ssherr.h log.h sshbuf.h misc.h sshkey.h match.h ssh2.h auth-options.h auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h ssherr.h log.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h -auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h uidswap.h pathnames.h log.h misc.h sshbuf.h sshkey.h servconf.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h ./ssherr.h log.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h +auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h uidswap.h pathnames.h log.h ./ssherr.h misc.h sshbuf.h sshkey.h servconf.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -auth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h groupaccess.h log.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h canohost.h uidswap.h packet.h dispatch.h authfile.h -auth.o: monitor_wrap.h ssherr.h compat.h channels.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h ssherr.h log.h misc.h servconf.h +auth.o: authfile.h monitor_wrap.h compat.h channels.h +auth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h groupaccess.h log.h ./ssherr.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h canohost.h uidswap.h packet.h dispatch.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h ./ssherr.h log.h misc.h servconf.h auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h canohost.h monitor_wrap.h pathnames.h -auth2-hostbased.o: ssherr.h match.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h misc.h servconf.h ssherr.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h misc.h servconf.h compat.h ssh2.h ssherr.h monitor_wrap.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h ssherr.h log.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h monitor_wrap.h misc.h servconf.h -auth2-pubkey.o: canohost.h monitor_wrap.h authfile.h match.h ssherr.h channels.h session.h sk-api.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h uidswap.h auth-options.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h log.h ./ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h canohost.h monitor_wrap.h +auth2-hostbased.o: pathnames.h match.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h ./ssherr.h misc.h servconf.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h misc.h servconf.h compat.h ssh2.h monitor_wrap.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h ./ssherr.h log.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h monitor_wrap.h misc.h servconf.h +auth2-pubkey.o: auth-options.h canohost.h monitor_wrap.h authfile.h match.h channels.h session.h sk-api.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h log.h ./ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h uidswap.h auth2.o: digest.h -auth2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h sshbuf.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h ssherr.h monitor_wrap.h -authfd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h compat.h log.h atomicio.h misc.h ssherr.h -authfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h ssh.h log.h authfile.h misc.h atomicio.h sshkey.h sshbuf.h ssherr.h krl.h +auth2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h sshbuf.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h monitor_wrap.h +authfd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h compat.h log.h ./ssherr.h atomicio.h misc.h +authfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h ssh.h log.h ./ssherr.h authfile.h misc.h atomicio.h sshkey.h sshbuf.h krl.h bitmap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h bitmap.h -canohost.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h canohost.h misc.h +canohost.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h canohost.h misc.h chacha.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h chacha.h -channels.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h ssherr.h sshbuf.h packet.h dispatch.h log.h misc.h channels.h compat.h canohost.h sshkey.h authfd.h pathnames.h match.h +channels.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h ./ssherr.h sshbuf.h packet.h dispatch.h log.h misc.h channels.h compat.h canohost.h sshkey.h authfd.h pathnames.h match.h cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher-aesctr.h rijndael.h cipher-chachapoly-libcrypto.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h sshbuf.h ssherr.h cipher-chachapoly.h chacha.h poly1305.h +cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h sshbuf.h cipher-chachapoly.h chacha.h poly1305.h cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -cipher.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h misc.h sshbuf.h ssherr.h digest.h openbsd-compat/openssl-compat.h -cleanup.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h +cipher.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h misc.h sshbuf.h ./ssherr.h digest.h openbsd-compat/openssl-compat.h +cleanup.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h clientloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h packet.h dispatch.h sshbuf.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h -clientloop.o: myproposal.h log.h misc.h readconf.h clientloop.h sshconnect.h authfd.h atomicio.h sshpty.h match.h msg.h ssherr.h hostfile.h -compat.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h log.h match.h kex.h mac.h crypto_api.h +clientloop.o: myproposal.h log.h ./ssherr.h misc.h readconf.h clientloop.h sshconnect.h authfd.h atomicio.h sshpty.h match.h msg.h hostfile.h +compat.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h log.h ./ssherr.h match.h kex.h mac.h crypto_api.h dh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -digest-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h digest.h +digest-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h digest.h digest-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -dispatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh2.h log.h dispatch.h packet.h openbsd-compat/sys-queue.h compat.h ssherr.h -dns.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h ssherr.h dns.h log.h digest.h +dispatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh2.h log.h ./ssherr.h dispatch.h packet.h openbsd-compat/sys-queue.h compat.h +dns.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h ./ssherr.h dns.h log.h digest.h 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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ge25519.h fe25519.h sc25519.h entropy.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -fatal.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h +fatal.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h fe25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h fe25519.h crypto_api.h ge25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h fe25519.h crypto_api.h sc25519.h ge25519.h ge25519_base.data -groupaccess.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h groupaccess.h match.h log.h +groupaccess.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h groupaccess.h match.h log.h ./ssherr.h gss-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h gss-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h gss-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h hmac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h digest.h hmac.h -hostfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h sshkey.h hostfile.h log.h misc.h pathnames.h ssherr.h digest.h hmac.h -kex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh.h ssh2.h atomicio.h version.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h log.h match.h -kex.o: misc.h monitor.h ssherr.h sshbuf.h digest.h -kexc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ssherr.h ssh2.h +hostfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h sshkey.h hostfile.h log.h ./ssherr.h misc.h pathnames.h digest.h hmac.h +kex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh.h ssh2.h atomicio.h version.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h log.h ./ssherr.h +kex.o: match.h misc.h monitor.h sshbuf.h digest.h +kexc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ./ssherr.h ssh2.h kexdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -kexecdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h -kexgen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h log.h packet.h openbsd-compat/sys-queue.h dispatch.h ssh2.h sshbuf.h digest.h ssherr.h +kexecdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h +kexgen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h log.h ./ssherr.h packet.h openbsd-compat/sys-queue.h dispatch.h ssh2.h sshbuf.h digest.h kexgex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h kexgexc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h kexgexs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -kexsntrup4591761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ssherr.h -krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h utf8.h krl.h -log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h -loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h canohost.h auth.h auth-pam.h audit.h sshbuf.h ssherr.h +kexsntrup4591761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ./ssherr.h +krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ./ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h utf8.h krl.h +log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h match.h +loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h ./ssherr.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h canohost.h auth.h auth-pam.h audit.h sshbuf.h logintest.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h loginrec.h -mac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h hmac.h umac.h mac.h misc.h ssherr.h sshbuf.h openbsd-compat/openssl-compat.h +mac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h hmac.h umac.h mac.h misc.h ./ssherr.h sshbuf.h openbsd-compat/openssl-compat.h match.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h misc.h md5crypt.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h log.h ssh.h sshbuf.h ssherr.h +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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h log.h ./ssherr.h ssh.h sshbuf.h moduli.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h dh.h packet.h dispatch.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h ssherr.h sk-api.h +monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h dh.h packet.h dispatch.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h ./ssherr.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h sk-api.h monitor.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h openbsd-compat/openssl-compat.h atomicio.h xmalloc.h ssh.h sshkey.h sshbuf.h hostfile.h auth.h auth-pam.h audit.h loginrec.h cipher.h cipher-chachapoly.h -monitor_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h monitor_fdpass.h +monitor_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h monitor_fdpass.h monitor_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h -monitor_wrap.o: loginrec.h auth-options.h packet.h dispatch.h log.h monitor.h monitor_wrap.h atomicio.h monitor_fdpass.h misc.h channels.h session.h servconf.h ssherr.h -msg.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h ssherr.h log.h atomicio.h msg.h misc.h -mux.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h log.h ssh.h ssh2.h pathnames.h misc.h match.h sshbuf.h channels.h msg.h packet.h dispatch.h monitor_fdpass.h sshpty.h sshkey.h readconf.h clientloop.h ssherr.h -nchan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h ssh2.h sshbuf.h ssherr.h packet.h dispatch.h channels.h compat.h log.h -packet.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h compat.h ssh2.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h digest.h log.h canohost.h misc.h channels.h ssh.h -packet.o: packet.h dispatch.h ssherr.h sshbuf.h +monitor_wrap.o: loginrec.h auth-options.h packet.h dispatch.h log.h ./ssherr.h monitor.h monitor_wrap.h atomicio.h monitor_fdpass.h misc.h channels.h session.h servconf.h +msg.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h ./ssherr.h log.h atomicio.h msg.h misc.h +mux.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h log.h ./ssherr.h ssh.h ssh2.h pathnames.h misc.h match.h sshbuf.h channels.h msg.h packet.h dispatch.h monitor_fdpass.h sshpty.h sshkey.h readconf.h clientloop.h +nchan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h ssh2.h sshbuf.h ./ssherr.h packet.h dispatch.h channels.h compat.h log.h +packet.o: channels.h ssh.h packet.h dispatch.h sshbuf.h +packet.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h compat.h ssh2.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h digest.h log.h ./ssherr.h canohost.h misc.h platform-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h platform-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -platform-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h -platform.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +platform-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h +platform.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h poly1305.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h poly1305.h progressmeter.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h progressmeter.h atomicio.h misc.h utf8.h -readconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h xmalloc.h ssh.h ssherr.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h pathnames.h log.h sshkey.h misc.h readconf.h match.h kex.h mac.h crypto_api.h +readconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h xmalloc.h ssh.h ./ssherr.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h pathnames.h log.h sshkey.h misc.h readconf.h match.h kex.h mac.h crypto_api.h readconf.o: uidswap.h myproposal.h digest.h -readpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h pathnames.h log.h ssh.h uidswap.h +readpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h pathnames.h log.h ./ssherr.h ssh.h uidswap.h rijndael.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h rijndael.h sandbox-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sandbox-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h @@ -109,70 +109,70 @@ sandbox-seccomp-filter.o: includes.h config.h defines.h platform.h openbsd-compa sandbox-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sandbox-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sc25519.h crypto_api.h -scp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h atomicio.h pathnames.h log.h misc.h progressmeter.h utf8.h -servconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h openbsd-compat/sys-queue.h xmalloc.h ssh.h log.h sshbuf.h misc.h servconf.h compat.h pathnames.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h -servconf.o: mac.h crypto_api.h match.h channels.h groupaccess.h canohost.h packet.h dispatch.h ssherr.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h -serverloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h sshbuf.h log.h misc.h servconf.h canohost.h sshpty.h channels.h compat.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h -serverloop.o: rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h loginrec.h session.h auth-options.h serverloop.h ssherr.h -session.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h sshbuf.h ssherr.h match.h uidswap.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h +scp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h atomicio.h pathnames.h log.h ./ssherr.h misc.h progressmeter.h utf8.h +servconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h openbsd-compat/sys-queue.h xmalloc.h ssh.h log.h ./ssherr.h sshbuf.h misc.h servconf.h compat.h pathnames.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h +servconf.o: sshkey.h kex.h mac.h crypto_api.h match.h channels.h groupaccess.h canohost.h packet.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h +serverloop.o: cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h loginrec.h session.h auth-options.h serverloop.h +serverloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h sshbuf.h log.h ./ssherr.h misc.h servconf.h canohost.h sshpty.h channels.h compat.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h +session.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h sshbuf.h ./ssherr.h match.h uidswap.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h session.o: rijndael.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h authfd.h pathnames.h log.h misc.h servconf.h sshlogin.h serverloop.h canohost.h session.h kex.h mac.h crypto_api.h monitor_wrap.h sftp.h atomicio.h -sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h sshbuf.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h -sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssherr.h sshbuf.h log.h misc.h sftp.h sftp-common.h +sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ./ssherr.h sshbuf.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h +sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ./ssherr.h sshbuf.h log.h misc.h sftp.h sftp-common.h sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h sftp-realpath.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h sftp.h misc.h xmalloc.h -sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h -sftp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h pathnames.h misc.h utf8.h sftp.h ssherr.h sshbuf.h sftp-common.h sftp-client.h openbsd-compat/glob.h +sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h sftp.h misc.h xmalloc.h +sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h ./ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h +sftp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h pathnames.h misc.h utf8.h sftp.h sshbuf.h sftp-common.h sftp-client.h openbsd-compat/glob.h sk-usbhid.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sntrup4591761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h log.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h ssherr.h digest.h ssh-sk.h sk-api.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h compat.h log.h misc.h digest.h ssherr.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h log.h ./ssherr.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h digest.h ssh-sk.h sk-api.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h compat.h log.h ./ssherr.h misc.h digest.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -ssh-ecdsa-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h sshbuf.h ssherr.h digest.h sshkey.h +ssh-ecdsa-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h sshbuf.h ./ssherr.h digest.h sshkey.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -ssh-ed25519-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h sshbuf.h sshkey.h ssherr.h ssh.h digest.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h sshbuf.h sshkey.h ssherr.h ssh.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h sshbuf.h pathnames.h log.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssherr.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h sshsig.h ssh-sk.h sk-api.h -ssh-keyscan.o: atomicio.h misc.h hostfile.h ssherr.h ssh_api.h ssh2.h dns.h +ssh-ed25519-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ./ssherr.h sshbuf.h sshkey.h ssh.h digest.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ./ssherr.h sshbuf.h sshkey.h ssh.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h sshbuf.h pathnames.h log.h ./ssherr.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h sshsig.h ssh-sk.h sk-api.h +ssh-keyscan.o: ./ssherr.h atomicio.h misc.h hostfile.h ssh_api.h ssh2.h dns.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h compat.h myproposal.h packet.h dispatch.h log.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h ssherr.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h sshbuf.h log.h misc.h sshkey.h authfd.h ssh-pkcs11.h ssherr.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h sshkey.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h sshbuf.h log.h ./ssherr.h misc.h sshkey.h authfd.h ssh-pkcs11.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h sshkey.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -ssh-sk-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshbuf.h sshkey.h msg.h digest.h pathnames.h ssh-sk.h misc.h -ssh-sk-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h sshkey.h authfd.h misc.h sshbuf.h msg.h uidswap.h ssherr.h ssh-sk.h +ssh-sk-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h sshbuf.h sshkey.h msg.h digest.h pathnames.h ssh-sk.h misc.h +ssh-sk-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h sshkey.h authfd.h misc.h sshbuf.h msg.h uidswap.h ssh-sk.h ssh-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h canohost.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h packet.h dispatch.h sshbuf.h channels.h -ssh.o: sshkey.h authfd.h authfile.h pathnames.h clientloop.h log.h misc.h readconf.h sshconnect.h kex.h mac.h crypto_api.h sshpty.h match.h msg.h version.h ssherr.h myproposal.h utf8.h -ssh_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh_api.h openbsd-compat/sys-queue.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h ssh.h ssh2.h packet.h dispatch.h compat.h log.h authfile.h misc.h -ssh_api.o: version.h myproposal.h ssherr.h sshbuf.h openbsd-compat/openssl-compat.h -sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h +ssh.o: sshkey.h authfd.h authfile.h pathnames.h clientloop.h log.h ./ssherr.h misc.h readconf.h sshconnect.h kex.h mac.h crypto_api.h sshpty.h match.h msg.h version.h myproposal.h utf8.h +ssh_api.o: authfile.h misc.h version.h myproposal.h sshbuf.h openbsd-compat/openssl-compat.h +ssh_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh_api.h openbsd-compat/sys-queue.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h ssh.h ssh2.h packet.h dispatch.h compat.h log.h ./ssherr.h +sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -sshbuf-io.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h atomicio.h -sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h -sshbuf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h misc.h +sshbuf-io.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h atomicio.h +sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h +sshbuf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h misc.h sshconnect.o: authfd.h kex.h mac.h crypto_api.h -sshconnect.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h hostfile.h ssh.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h sshkey.h sshconnect.h log.h misc.h readconf.h atomicio.h dns.h monitor_fdpass.h ssh2.h version.h authfile.h ssherr.h +sshconnect.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h hostfile.h ssh.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h sshkey.h sshconnect.h log.h ./ssherr.h misc.h readconf.h atomicio.h dns.h monitor_fdpass.h ssh2.h version.h authfile.h sshconnect2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h packet.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h -sshconnect2.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 ssh-sk.h sk-api.h -sshd.o: cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h crypto_api.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h ssherr.h sk-api.h -sshd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h log.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h -ssherr.o: ssherr.h +sshconnect2.o: myproposal.h sshconnect.h authfile.h dh.h authfd.h log.h ./ssherr.h misc.h readconf.h match.h canohost.h msg.h pathnames.h uidswap.h hostfile.h utf8.h ssh-sk.h sk-api.h +sshd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h log.h ./ssherr.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h chacha.h +sshd.o: poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h crypto_api.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h sk-api.h +ssherr.o: ./ssherr.h sshkey-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h match.h ssh-sk.h openbsd-compat/openssl-compat.h -sshlogin.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshlogin.h ssherr.h loginrec.h log.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h -sshpty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h log.h misc.h -sshsig.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h authfd.h authfile.h log.h misc.h sshbuf.h sshsig.h ssherr.h sshkey.h match.h digest.h +sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ./ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h match.h ssh-sk.h openbsd-compat/openssl-compat.h +sshlogin.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshlogin.h ./ssherr.h loginrec.h log.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h +sshpty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h log.h ./ssherr.h misc.h +sshsig.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h authfd.h authfile.h log.h ./ssherr.h misc.h sshbuf.h sshsig.h sshkey.h match.h digest.h sshtty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h -ttymodes.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h compat.h sshbuf.h ssherr.h ttymodes.h -uidswap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h uidswap.h xmalloc.h +ttymodes.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h compat.h sshbuf.h ttymodes.h +uidswap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h uidswap.h xmalloc.h umac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h umac128.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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h utf8.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h utf8.h verify.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h -xmalloc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h +xmalloc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h xmss_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmss_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmss_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h diff --git a/addrmatch.c b/addrmatch.c index 5a402d065612..c86195d2836c 100644 --- a/addrmatch.c +++ b/addrmatch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: addrmatch.c,v 1.14 2018/07/31 03:07:24 djm Exp $ */ +/* $OpenBSD: addrmatch.c,v 1.15 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2004-2008 Damien Miller @@ -381,7 +381,7 @@ addr_match_list(const char *addr, const char *_list) int ret = 0, r; if (addr != NULL && addr_pton(addr, &try_addr) != 0) { - debug2("%s: couldn't parse address %.100s", __func__, addr); + debug2_f("couldn't parse address %.100s", addr); return 0; } if ((o = list = strdup(_list)) == NULL) @@ -397,8 +397,8 @@ addr_match_list(const char *addr, const char *_list) /* Prefer CIDR address matching */ r = addr_pton_cidr(cp, &match_addr, &masklen); if (r == -2) { - debug2("%s: inconsistent mask length for " - "match network \"%.100s\"", __func__, cp); + debug2_f("inconsistent mask length for " + "match network \"%.100s\"", cp); ret = -2; break; } else if (r == 0) { @@ -441,15 +441,14 @@ addr_match_cidr_list(const char *addr, const char *_list) int ret = 0, r; if (addr != NULL && addr_pton(addr, &try_addr) != 0) { - debug2("%s: couldn't parse address %.100s", __func__, addr); + debug2_f("couldn't parse address %.100s", addr); return 0; } if ((o = list = strdup(_list)) == NULL) return -1; while ((cp = strsep(&list, ",")) != NULL) { if (*cp == '\0') { - error("%s: empty entry in list \"%.100s\"", - __func__, o); + error_f("empty entry in list \"%.100s\"", o); ret = -1; break; } @@ -462,15 +461,14 @@ addr_match_cidr_list(const char *addr, const char *_list) /* Stop junk from reaching getaddrinfo. +3 is for masklen */ if (strlen(cp) > INET6_ADDRSTRLEN + 3) { - error("%s: list entry \"%.100s\" too long", - __func__, cp); + error_f("list entry \"%.100s\" too long", cp); ret = -1; break; } #define VALID_CIDR_CHARS "0123456789abcdefABCDEF.:/" if (strspn(cp, VALID_CIDR_CHARS) != strlen(cp)) { - error("%s: list entry \"%.100s\" contains invalid " - "characters", __func__, cp); + error_f("list entry \"%.100s\" contains invalid " + "characters", cp); ret = -1; } diff --git a/auth-options.c b/auth-options.c index 98afdf5fe701..55b2e9b4cf1c 100644 --- a/auth-options.c +++ b/auth-options.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth-options.c,v 1.93 2020/08/27 01:07:09 djm Exp $ */ +/* $OpenBSD: auth-options.c,v 1.94 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2018 Damien Miller * @@ -79,7 +79,7 @@ cert_option_list(struct sshauthopt *opts, struct sshbuf *oblob, int r, ret = -1, found; if ((c = sshbuf_fromb(oblob)) == NULL) { - error("%s: sshbuf_fromb failed", __func__); + error_f("sshbuf_fromb failed"); goto out; } @@ -88,8 +88,7 @@ cert_option_list(struct sshauthopt *opts, struct sshbuf *oblob, data = NULL; if ((r = sshbuf_get_cstring(c, &name, NULL)) != 0 || (r = sshbuf_froms(c, &data)) != 0) { - error("Unable to parse certificate options: %s", - ssh_err(r)); + error_r(r, "Unable to parse certificate options"); goto out; } debug3("found certificate option \"%.100s\" len %zu", @@ -125,8 +124,8 @@ cert_option_list(struct sshauthopt *opts, struct sshbuf *oblob, } else if (strcmp(name, "force-command") == 0) { if ((r = sshbuf_get_cstring(data, &command, NULL)) != 0) { - error("Unable to parse \"%s\" " - "section: %s", name, ssh_err(r)); + error_r(r, "Unable to parse \"%s\" " + "section", name); goto out; } if (opts->force_command != NULL) { @@ -140,8 +139,8 @@ cert_option_list(struct sshauthopt *opts, struct sshbuf *oblob, } else if (strcmp(name, "source-address") == 0) { if ((r = sshbuf_get_cstring(data, &allowed, NULL)) != 0) { - error("Unable to parse \"%s\" " - "section: %s", name, ssh_err(r)); + error_r(r, "Unable to parse \"%s\" " + "section", name); goto out; } if (opts->required_from_host_cert != NULL) { diff --git a/auth-passwd.c b/auth-passwd.c index 24fcb67b2383..347d91e25192 100644 --- a/auth-passwd.c +++ b/auth-passwd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth-passwd.c,v 1.47 2018/07/09 21:26:02 markus Exp $ */ +/* $OpenBSD: auth-passwd.c,v 1.48 2020/10/18 11:32:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -152,14 +152,14 @@ warn_expiry(Authctxt *authctxt, auth_session_t *as) if ((r = sshbuf_putf(loginmsg, "Your password will expire in %lld day%s.\n", daysleft, daysleft == 1 ? "" : "s")) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "buffer error"); } if (actimeleft != 0 && actimeleft < acwarntime) { daysleft = actimeleft / DAY + 1; if ((r = sshbuf_putf(loginmsg, "Your account will expire in %lld day%s.\n", daysleft, daysleft == 1 ? "" : "s")) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "buffer error"); } } diff --git a/auth-rhosts.c b/auth-rhosts.c index e81321b49c00..0bc4d424c781 100644 --- a/auth-rhosts.c +++ b/auth-rhosts.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth-rhosts.c,v 1.52 2020/04/17 03:30:05 djm Exp $ */ +/* $OpenBSD: auth-rhosts.c,v 1.53 2020/10/18 11:32:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -223,7 +223,7 @@ auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname, if (!rhosts_files[rhosts_file_index] && stat(_PATH_RHOSTS_EQUIV, &st) == -1 && stat(_PATH_SSH_HOSTS_EQUIV, &st) == -1) { - debug3("%s: no hosts access files exist", __func__); + debug3_f("no hosts access files exist"); return 0; } @@ -232,7 +232,7 @@ auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname, * shosts.equiv. */ if (pw->pw_uid == 0) - debug3("%s: root user, ignoring system hosts files", __func__); + debug3_f("root user, ignoring system hosts files"); else { if (check_rhosts_file(_PATH_RHOSTS_EQUIV, hostname, ipaddr, client_user, pw->pw_name)) { diff --git a/auth.c b/auth.c index 6e988424361f..e82d7feadbff 100644 --- a/auth.c +++ b/auth.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth.c,v 1.148 2020/10/16 13:26:13 djm Exp $ */ +/* $OpenBSD: auth.c,v 1.149 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -492,10 +492,10 @@ check_key_in_hostfiles(struct passwd *pw, struct sshkey *key, const char *host, error("WARNING: revoked key for %s attempted authentication", host); else if (host_status == HOST_OK) - debug("%s: key for %s found at %s:%ld", __func__, + debug_f("key for %s found at %s:%ld", found->host, found->file, found->line); else - debug("%s: key for host %s not found", __func__, host); + debug_f("key for host %s not found", host); free_hostkeys(hostkeys); @@ -635,7 +635,7 @@ auth_key_is_revoked(struct sshkey *key) if ((fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { r = SSH_ERR_ALLOC_FAIL; - error("%s: fingerprint key: %s", __func__, ssh_err(r)); + error_fr(r, "fingerprint key"); goto out; } @@ -648,9 +648,9 @@ auth_key_is_revoked(struct sshkey *key) sshkey_type(key), fp, options.revoked_keys_file); goto out; default: - error("Error checking authentication key %s %s in " - "revoked keys file %s: %s", sshkey_type(key), fp, - options.revoked_keys_file, ssh_err(r)); + error_r(r, "Error checking authentication key %s %s in " + "revoked keys file %s", sshkey_type(key), fp, + options.revoked_keys_file); goto out; } @@ -676,7 +676,7 @@ auth_debug_add(const char *fmt,...) vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); if ((r = sshbuf_put_cstring(auth_debug, buf)) != 0) - fatal("%s: sshbuf_put_cstring: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put_cstring"); } void @@ -689,8 +689,7 @@ auth_debug_send(struct ssh *ssh) return; while (sshbuf_len(auth_debug) != 0) { if ((r = sshbuf_get_cstring(auth_debug, &msg, NULL)) != 0) - fatal("%s: sshbuf_get_cstring: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_get_cstring"); ssh_packet_send_debug(ssh, "%s", msg); free(msg); } @@ -702,7 +701,7 @@ auth_debug_reset(void) if (auth_debug != NULL) sshbuf_reset(auth_debug); else if ((auth_debug = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); } struct passwd * @@ -866,17 +865,17 @@ subprocess(const char *tag, struct passwd *pw, const char *command, if (child != NULL) *child = NULL; - debug3("%s: %s command \"%s\" running as %s (flags 0x%x)", __func__, + debug3_f("%s command \"%s\" running as %s (flags 0x%x)", tag, command, pw->pw_name, flags); /* Check consistency */ if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 && (flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) { - error("%s: inconsistent flags", __func__); + error_f("inconsistent flags"); return 0; } if (((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) != (child == NULL)) { - error("%s: inconsistent flags/output", __func__); + error_f("inconsistent flags/output"); return 0; } @@ -988,7 +987,7 @@ subprocess(const char *tag, struct passwd *pw, const char *command, return 0; } /* Success */ - debug3("%s: %s pid %ld", __func__, tag, (long)pid); + debug3_f("%s pid %ld", tag, (long)pid); if (child != NULL) *child = f; return pid; @@ -1073,7 +1072,7 @@ auth_activate_options(struct ssh *ssh, struct sshauthopt *opts) struct sshauthopt *old = auth_opts; const char *emsg = NULL; - debug("%s: setting new authentication options", __func__); + debug_f("setting new authentication options"); if ((auth_opts = sshauthopt_merge(old, opts, &emsg)) == NULL) { error("Inconsistent authentication options: %s", emsg); return -1; @@ -1087,7 +1086,7 @@ auth_restrict_session(struct ssh *ssh) { struct sshauthopt *restricted; - debug("%s: restricting session", __func__); + debug_f("restricting session"); /* A blank sshauthopt defaults to permitting nothing */ restricted = sshauthopt_new(); @@ -1095,7 +1094,7 @@ auth_restrict_session(struct ssh *ssh) restricted->restricted = 1; if (auth_activate_options(ssh, restricted) != 0) - fatal("%s: failed to restrict session", __func__); + fatal_f("failed to restrict session"); sshauthopt_free(restricted); } @@ -1170,8 +1169,7 @@ auth_authorise_keyopts(struct ssh *ssh, struct passwd *pw, case -1: default: /* invalid */ - error("%s: Certificate source-address invalid", - loc); + error("%s: Certificate source-address invalid", loc); /* FALLTHROUGH */ case 0: logit("%s: Authentication tried for %.100s with valid " diff --git a/auth2-chall.c b/auth2-chall.c index 3acd0a837c9f..021df8291736 100644 --- a/auth2-chall.c +++ b/auth2-chall.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-chall.c,v 1.53 2020/02/26 13:40:09 jsg Exp $ */ +/* $OpenBSD: auth2-chall.c,v 1.54 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * Copyright (c) 2001 Per Allansson. All rights reserved. @@ -112,15 +112,14 @@ kbdint_alloc(const char *devs) kbdintctxt = xcalloc(1, sizeof(KbdintAuthctxt)); if (strcmp(devs, "") == 0) { if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); for (i = 0; devices[i]; i++) { if ((r = sshbuf_putf(b, "%s%s", sshbuf_len(b) ? "," : "", devices[i]->name)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "buffer error"); } if ((kbdintctxt->devices = sshbuf_dup_string(b)) == NULL) - fatal("%s: sshbuf_dup_string failed", __func__); + fatal_f("sshbuf_dup_string failed"); sshbuf_free(b); } else { kbdintctxt->devices = xstrdup(devs); @@ -268,15 +267,15 @@ send_userauth_info_request(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, instr)) != 0 || (r = sshpkt_put_cstring(ssh, "")) != 0 || /* language not used */ (r = sshpkt_put_u32(ssh, kbdintctxt->nreq)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "start packet"); for (i = 0; i < kbdintctxt->nreq; i++) { if ((r = sshpkt_put_cstring(ssh, prompts[i])) != 0 || (r = sshpkt_put_u8(ssh, echo_on[i])) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble packet"); } if ((r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); for (i = 0; i < kbdintctxt->nreq; i++) free(prompts[i]); @@ -299,29 +298,29 @@ input_userauth_info_response(int type, u_int32_t seq, struct ssh *ssh) char **response = NULL; if (authctxt == NULL) - fatal("input_userauth_info_response: no authctxt"); + fatal_f("no authctxt"); kbdintctxt = authctxt->kbdintctxt; if (kbdintctxt == NULL || kbdintctxt->ctxt == NULL) - fatal("input_userauth_info_response: no kbdintctxt"); + fatal_f("no kbdintctxt"); if (kbdintctxt->device == NULL) - fatal("input_userauth_info_response: no device"); + fatal_f("no device"); authctxt->postponed = 0; /* reset */ if ((r = sshpkt_get_u32(ssh, &nresp)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); if (nresp != kbdintctxt->nreq) - fatal("input_userauth_info_response: wrong number of replies"); + fatal_f("wrong number of replies"); if (nresp > 100) - fatal("input_userauth_info_response: too many replies"); + fatal_f("too many replies"); if (nresp > 0) { response = xcalloc(nresp, sizeof(char *)); - for (i = 0; i < nresp; i++) - if ((r = sshpkt_get_cstring(ssh, &response[i], - NULL)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + for (i = 0; i < nresp; i++) { + if ((r = sshpkt_get_cstring(ssh, &response[i], NULL)) != 0) + fatal_fr(r, "parse response"); + } } if ((r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); res = kbdintctxt->device->respond(kbdintctxt->ctxt, nresp, response); diff --git a/auth2-gss.c b/auth2-gss.c index 9351e042819f..9dae012235b7 100644 --- a/auth2-gss.c +++ b/auth2-gss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-gss.c,v 1.29 2018/07/31 03:10:27 djm Exp $ */ +/* $OpenBSD: auth2-gss.c,v 1.30 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved. @@ -71,7 +71,7 @@ userauth_gssapi(struct ssh *ssh) u_char *doid = NULL; if ((r = sshpkt_get_u32(ssh, &mechs)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); if (mechs == 0) { debug("Mechanism negotiation is not supported"); @@ -85,7 +85,7 @@ userauth_gssapi(struct ssh *ssh) present = 0; if ((r = sshpkt_get_string(ssh, &doid, &len)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse oid"); if (len > 2 && doid[0] == SSH_GSS_OIDTYPE && doid[1] == len - 2) { @@ -104,7 +104,7 @@ userauth_gssapi(struct ssh *ssh) } if (!authctxt->valid || authctxt->user == NULL) { - debug2("%s: disabled because of invalid user", __func__); + debug2_f("disabled because of invalid user"); free(doid); return (0); } @@ -123,7 +123,7 @@ userauth_gssapi(struct ssh *ssh) if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_GSSAPI_RESPONSE)) != 0 || (r = sshpkt_put_string(ssh, doid, len)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); free(doid); @@ -152,7 +152,7 @@ input_gssapi_token(int type, u_int32_t plen, struct ssh *ssh) gssctxt = authctxt->methoddata; if ((r = sshpkt_get_string(ssh, &p, &len)) != 0 || (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); recv_tok.value = p; recv_tok.length = len; @@ -168,7 +168,7 @@ input_gssapi_token(int type, u_int32_t plen, struct ssh *ssh) (r = sshpkt_put_string(ssh, send_tok.value, send_tok.length)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send ERRTOK packet"); } authctxt->postponed = 0; ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_GSSAPI_TOKEN, NULL); @@ -180,7 +180,7 @@ input_gssapi_token(int type, u_int32_t plen, struct ssh *ssh) (r = sshpkt_put_string(ssh, send_tok.value, send_tok.length)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send TOKEN packet"); } if (maj_status == GSS_S_COMPLETE) { ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_GSSAPI_TOKEN, NULL); @@ -216,7 +216,7 @@ input_gssapi_errtok(int type, u_int32_t plen, struct ssh *ssh) gssctxt = authctxt->methoddata; if ((r = sshpkt_get_string(ssh, &p, &len)) != 0 || (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); recv_tok.value = p; recv_tok.length = len; @@ -258,7 +258,7 @@ input_gssapi_exchange_complete(int type, u_int32_t plen, struct ssh *ssh) */ if ((r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); authenticated = PRIVSEP(ssh_gssapi_userok(authctxt->user)); @@ -293,16 +293,16 @@ input_gssapi_mic(int type, u_int32_t plen, struct ssh *ssh) gssctxt = authctxt->methoddata; if ((r = sshpkt_get_string(ssh, &p, &len)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); mic.value = p; mic.length = len; ssh_gssapi_buildmic(b, authctxt->user, authctxt->service, "gssapi-with-mic"); if ((gssbuf.value = sshbuf_mutable_ptr(b)) == NULL) - fatal("%s: sshbuf_mutable_ptr failed", __func__); + fatal_f("sshbuf_mutable_ptr failed"); gssbuf.length = sshbuf_len(b); if (!GSS_ERROR(PRIVSEP(ssh_gssapi_checkmic(gssctxt, &gssbuf, &mic)))) diff --git a/auth2-hostbased.c b/auth2-hostbased.c index 5e9b7c65d325..527537000117 100644 --- a/auth2-hostbased.c +++ b/auth2-hostbased.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-hostbased.c,v 1.42 2019/11/25 00:51:37 djm Exp $ */ +/* $OpenBSD: auth2-hostbased.c,v 1.43 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -74,9 +74,9 @@ userauth_hostbased(struct ssh *ssh) (r = sshpkt_get_cstring(ssh, &chost, NULL)) != 0 || (r = sshpkt_get_cstring(ssh, &cuser, NULL)) != 0 || (r = sshpkt_get_string(ssh, &sig, &slen)) != 0) - fatal("%s: packet parsing: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); - debug("%s: cuser %s chost %s pkalg %s slen %zu", __func__, + debug_f("cuser %s chost %s pkalg %s slen %zu", cuser, chost, pkalg, slen); #ifdef DEBUG_PK debug("signature:"); @@ -85,21 +85,21 @@ userauth_hostbased(struct ssh *ssh) pktype = sshkey_type_from_name(pkalg); if (pktype == KEY_UNSPEC) { /* this is perfectly legal */ - logit("%s: unsupported public key algorithm: %s", - __func__, pkalg); + logit_f("unsupported public key algorithm: %s", + pkalg); goto done; } if ((r = sshkey_from_blob(pkblob, blen, &key)) != 0) { - error("%s: key_from_blob: %s", __func__, ssh_err(r)); + error_fr(r, "key_from_blob"); goto done; } if (key == NULL) { - error("%s: cannot decode key: %s", __func__, pkalg); + error_f("cannot decode key: %s", pkalg); goto done; } if (key->type != pktype) { - error("%s: type mismatch for decoded key " - "(received %d, expected %d)", __func__, key->type, pktype); + error_f("type mismatch for decoded key " + "(received %d, expected %d)", key->type, pktype); goto done; } if (sshkey_type_plain(key->type) == KEY_RSA && @@ -109,25 +109,25 @@ userauth_hostbased(struct ssh *ssh) goto done; } if (match_pattern_list(pkalg, options.hostbased_key_types, 0) != 1) { - logit("%s: key type %s not in HostbasedAcceptedKeyTypes", - __func__, sshkey_type(key)); + logit_f("key type %s not in HostbasedAcceptedKeyTypes", + sshkey_type(key)); goto done; } if ((r = sshkey_check_cert_sigtype(key, options.ca_sign_algorithms)) != 0) { - logit("%s: certificate signature algorithm %s: %s", __func__, + logit_fr(r, "certificate signature algorithm %s", (key->cert == NULL || key->cert->signature_type == NULL) ? - "(null)" : key->cert->signature_type, ssh_err(r)); + "(null)" : key->cert->signature_type); goto done; } if (!authctxt->valid || authctxt->user == NULL) { - debug2("%s: disabled because of invalid user", __func__); + debug2_f("disabled because of invalid user"); goto done; } if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); /* reconstruct packet */ if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || @@ -138,7 +138,7 @@ userauth_hostbased(struct ssh *ssh) (r = sshbuf_put_string(b, pkblob, blen)) != 0 || (r = sshbuf_put_cstring(b, chost)) != 0 || (r = sshbuf_put_cstring(b, cuser)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "reconstruct packet"); #ifdef DEBUG_PK sshbuf_dump(b, stderr); #endif @@ -157,7 +157,7 @@ userauth_hostbased(struct ssh *ssh) auth2_record_key(authctxt, authenticated, key); sshbuf_free(b); done: - debug2("%s: authenticated %d", __func__, authenticated); + debug2_f("authenticated %d", authenticated); sshkey_free(key); free(pkalg); free(pkblob); @@ -183,7 +183,7 @@ hostbased_key_allowed(struct ssh *ssh, struct passwd *pw, resolvedname = auth_get_canonical_hostname(ssh, options.use_dns); ipaddr = ssh_remote_ipaddr(ssh); - debug2("%s: chost %s resolvedname %s ipaddr %s", __func__, + debug2_f("chost %s resolvedname %s ipaddr %s", chost, resolvedname, ipaddr); if (((len = strlen(chost)) > 0) && chost[len - 1] == '.') { @@ -193,9 +193,8 @@ hostbased_key_allowed(struct ssh *ssh, struct passwd *pw, if (options.hostbased_uses_name_from_packet_only) { if (auth_rhosts2(pw, cuser, chost, chost) == 0) { - debug2("%s: auth_rhosts2 refused " - "user \"%.100s\" host \"%.100s\" (from packet)", - __func__, cuser, chost); + debug2_f("auth_rhosts2 refused user \"%.100s\" " + "host \"%.100s\" (from packet)", cuser, chost); return 0; } lookup = chost; @@ -205,14 +204,14 @@ hostbased_key_allowed(struct ssh *ssh, struct passwd *pw, "client sends %s, but we resolve %s to %s", chost, ipaddr, resolvedname); if (auth_rhosts2(pw, cuser, resolvedname, ipaddr) == 0) { - debug2("%s: auth_rhosts2 refused " + debug2_f("auth_rhosts2 refused " "user \"%.100s\" host \"%.100s\" addr \"%.100s\"", - __func__, cuser, resolvedname, ipaddr); + cuser, resolvedname, ipaddr); return 0; } lookup = resolvedname; } - debug2("%s: access allowed by auth_rhosts2", __func__); + debug2_f("access allowed by auth_rhosts2"); if (sshkey_is_cert(key) && sshkey_cert_check_authority(key, 1, 0, lookup, &reason)) { @@ -237,7 +236,7 @@ hostbased_key_allowed(struct ssh *ssh, struct passwd *pw, if (sshkey_is_cert(key)) { if ((fp = sshkey_fingerprint(key->cert->signature_key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint fail", __func__); + fatal_f("sshkey_fingerprint fail"); verbose("Accepted certificate ID \"%s\" signed by " "%s CA %s from %s@%s", key->cert->key_id, sshkey_type(key->cert->signature_key), fp, @@ -245,7 +244,7 @@ hostbased_key_allowed(struct ssh *ssh, struct passwd *pw, } else { if ((fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint fail", __func__); + fatal_f("sshkey_fingerprint fail"); verbose("Accepted %s public key %s from %s@%s", sshkey_type(key), fp, cuser, lookup); } diff --git a/auth2-kbdint.c b/auth2-kbdint.c index e23d2edd20f1..111f2d29fcf3 100644 --- a/auth2-kbdint.c +++ b/auth2-kbdint.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-kbdint.c,v 1.11 2019/11/13 04:47:52 deraadt Exp $ */ +/* $OpenBSD: auth2-kbdint.c,v 1.12 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -52,7 +52,7 @@ userauth_kbdint(struct ssh *ssh) if ((r = sshpkt_get_cstring(ssh, &lang, NULL)) != 0 || (r = sshpkt_get_cstring(ssh, &devs, NULL)) != 0 || (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); debug("keyboard-interactive devs %s", devs); diff --git a/auth2-none.c b/auth2-none.c index dacb5fb839e2..02d6e341ca4c 100644 --- a/auth2-none.c +++ b/auth2-none.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-none.c,v 1.22 2018/07/09 21:35:50 markus Exp $ */ +/* $OpenBSD: auth2-none.c,v 1.23 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -65,7 +65,7 @@ userauth_none(struct ssh *ssh) none_enabled = 0; if ((r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); if (options.permit_empty_passwd && options.password_authentication) return (PRIVSEP(auth_password(ssh, ""))); return (0); diff --git a/auth2-passwd.c b/auth2-passwd.c index bb5f8192d7b5..be4b8606a6c7 100644 --- a/auth2-passwd.c +++ b/auth2-passwd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-passwd.c,v 1.18 2020/02/26 13:40:09 jsg Exp $ */ +/* $OpenBSD: auth2-passwd.c,v 1.19 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -60,7 +60,7 @@ userauth_passwd(struct ssh *ssh) (r = sshpkt_get_cstring(ssh, &password, &len)) != 0 || (change && (r = sshpkt_get_cstring(ssh, NULL, NULL)) != 0) || (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); if (change) logit("password change not supported"); diff --git a/auth2-pubkey.c b/auth2-pubkey.c index c3ecd9afc3aa..b331216c82c9 100644 --- a/auth2-pubkey.c +++ b/auth2-pubkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-pubkey.c,v 1.100 2020/08/27 01:07:09 djm Exp $ */ +/* $OpenBSD: auth2-pubkey.c,v 1.101 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -104,17 +104,17 @@ userauth_pubkey(struct ssh *ssh) if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0 || (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 || (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0) - fatal("%s: parse request failed: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); if (log_level_get() >= SYSLOG_LEVEL_DEBUG2) { char *keystring; struct sshbuf *pkbuf; if ((pkbuf = sshbuf_from(pkblob, blen)) == NULL) - fatal("%s: sshbuf_from failed", __func__); + fatal_f("sshbuf_from failed"); if ((keystring = sshbuf_dtob64_string(pkbuf, 0)) == NULL) - fatal("%s: sshbuf_dtob64 failed", __func__); - debug2("%s: %s user %s %s public key %s %s", __func__, + fatal_f("sshbuf_dtob64 failed"); + debug2_f("%s user %s %s public key %s %s", authctxt->valid ? "valid" : "invalid", authctxt->user, have_sig ? "attempting" : "querying", pkalg, keystring); sshbuf_free(pkbuf); @@ -124,21 +124,20 @@ userauth_pubkey(struct ssh *ssh) pktype = sshkey_type_from_name(pkalg); if (pktype == KEY_UNSPEC) { /* this is perfectly legal */ - verbose("%s: unsupported public key algorithm: %s", - __func__, pkalg); + verbose_f("unsupported public key algorithm: %s", pkalg); goto done; } if ((r = sshkey_from_blob(pkblob, blen, &key)) != 0) { - error("%s: could not parse key: %s", __func__, ssh_err(r)); + error_fr(r, "parse key"); goto done; } if (key == NULL) { - error("%s: cannot decode key: %s", __func__, pkalg); + error_f("cannot decode key: %s", pkalg); goto done; } if (key->type != pktype) { - error("%s: type mismatch for decoded key " - "(received %d, expected %d)", __func__, key->type, pktype); + error_f("type mismatch for decoded key " + "(received %d, expected %d)", key->type, pktype); goto done; } if (sshkey_type_plain(key->type) == KEY_RSA && @@ -152,15 +151,15 @@ userauth_pubkey(struct ssh *ssh) goto done; } if (match_pattern_list(pkalg, options.pubkey_key_types, 0) != 1) { - logit("%s: key type %s not in PubkeyAcceptedKeyTypes", - __func__, sshkey_ssh_name(key)); + logit_f("key type %s not in PubkeyAcceptedKeyTypes", + sshkey_ssh_name(key)); goto done; } if ((r = sshkey_check_cert_sigtype(key, options.ca_sign_algorithms)) != 0) { - logit("%s: certificate signature algorithm %s: %s", __func__, + logit_fr(r, "certificate signature algorithm %s", (key->cert == NULL || key->cert->signature_type == NULL) ? - "(null)" : key->cert->signature_type, ssh_err(r)); + "(null)" : key->cert->signature_type); goto done; } key_s = format_key(key); @@ -168,29 +167,23 @@ userauth_pubkey(struct ssh *ssh) ca_s = format_key(key->cert->signature_key); if (have_sig) { - debug3("%s: have %s signature for %s%s%s", - __func__, pkalg, key_s, - ca_s == NULL ? "" : " CA ", - ca_s == NULL ? "" : ca_s); + debug3_f("have %s signature for %s%s%s", pkalg, key_s, + ca_s == NULL ? "" : " CA ", ca_s == NULL ? "" : ca_s); if ((r = sshpkt_get_string(ssh, &sig, &slen)) != 0 || (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse signature packet"); if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if (ssh->compat & SSH_OLD_SESSIONID) { - if ((r = sshbuf_put(b, session_id2, - session_id2_len)) != 0) - fatal("%s: sshbuf_put session id: %s", - __func__, ssh_err(r)); + if ((r = sshbuf_put(b, session_id2, session_id2_len)) != 0) + fatal_fr(r, "put old session id"); } else { if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0) - fatal("%s: sshbuf_put_string session id: %s", - __func__, ssh_err(r)); + fatal_fr(r, "put session id"); } if (!authctxt->valid || authctxt->user == NULL) { - debug2("%s: disabled because of invalid user", - __func__); + debug2_f("disabled because of invalid user"); goto done; } /* reconstruct packet */ @@ -204,8 +197,7 @@ userauth_pubkey(struct ssh *ssh) (r = sshbuf_put_u8(b, have_sig)) != 0 || (r = sshbuf_put_cstring(b, pkalg)) != 0 || (r = sshbuf_put_string(b, pkblob, blen)) != 0) - fatal("%s: build packet failed: %s", - __func__, ssh_err(r)); + fatal_fr(r, "reconstruct packet"); #ifdef DEBUG_PK sshbuf_dump(b, stderr); #endif @@ -221,9 +213,8 @@ userauth_pubkey(struct ssh *ssh) if (authenticated == 1 && sig_details != NULL) { auth2_record_info(authctxt, "signature count = %u", sig_details->sk_counter); - debug("%s: sk_counter = %u, sk_flags = 0x%02x", - __func__, sig_details->sk_counter, - sig_details->sk_flags); + debug_f("sk_counter = %u, sk_flags = 0x%02x", + sig_details->sk_counter, sig_details->sk_flags); req_presence = (options.pubkey_auth_options & PUBKEYAUTH_TOUCH_REQUIRED) || !authopts->no_require_user_presence; @@ -256,17 +247,14 @@ userauth_pubkey(struct ssh *ssh) } auth2_record_key(authctxt, authenticated, key); } else { - debug("%s: test pkalg %s pkblob %s%s%s", - __func__, pkalg, key_s, - ca_s == NULL ? "" : " CA ", - ca_s == NULL ? "" : ca_s); + debug_f("test pkalg %s pkblob %s%s%s", pkalg, key_s, + ca_s == NULL ? "" : " CA ", ca_s == NULL ? "" : ca_s); if ((r = sshpkt_get_end(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); if (!authctxt->valid || authctxt->user == NULL) { - debug2("%s: disabled because of invalid user", - __func__); + debug2_f("disabled because of invalid user"); goto done; } /* XXX fake reply and always send PK_OK ? */ @@ -284,16 +272,16 @@ userauth_pubkey(struct ssh *ssh) (r = sshpkt_put_string(ssh, pkblob, blen)) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); authctxt->postponed = 1; } } done: if (authenticated == 1 && auth_activate_options(ssh, authopts) != 0) { - debug("%s: key options inconsistent with existing", __func__); + debug_f("key options inconsistent with existing"); authenticated = 0; } - debug2("%s: authenticated %d pkalg %s", __func__, authenticated, pkalg); + debug2_f("authenticated %d pkalg %s", authenticated, pkalg); sshbuf_free(b); sshauthopt_free(authopts); @@ -500,20 +488,20 @@ match_principals_command(struct ssh *ssh, struct passwd *user_pw, } if ((ca_fp = sshkey_fingerprint(cert->signature_key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { - error("%s: sshkey_fingerprint failed", __func__); + error_f("sshkey_fingerprint failed"); goto out; } if ((key_fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { - error("%s: sshkey_fingerprint failed", __func__); + error_f("sshkey_fingerprint failed"); goto out; } if ((r = sshkey_to_base64(cert->signature_key, &catext)) != 0) { - error("%s: sshkey_to_base64 failed: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_to_base64 failed"); goto out; } if ((r = sshkey_to_base64(key, &keytext)) != 0) { - error("%s: sshkey_to_base64 failed: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_to_base64 failed"); goto out; } snprintf(serial_s, sizeof(serial_s), "%llu", @@ -535,7 +523,7 @@ match_principals_command(struct ssh *ssh, struct passwd *user_pw, "s", serial_s, (char *)NULL); if (tmp == NULL) - fatal("%s: percent_expand failed", __func__); + fatal_f("percent_expand failed"); free(av[i]); av[i] = tmp; } @@ -598,7 +586,7 @@ check_authkey_line(struct ssh *ssh, struct passwd *pw, struct sshkey *key, *authoptsp = NULL; if ((found = sshkey_new(want_keytype)) == NULL) { - debug3("%s: keytype %d failed", __func__, want_keytype); + debug3_f("keytype %d failed", want_keytype); goto out; } @@ -640,7 +628,7 @@ check_authkey_line(struct ssh *ssh, struct passwd *pw, struct sshkey *key, /* We have a candidate key, perform authorisation checks */ if ((fp = sshkey_fingerprint(found, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: fingerprint failed", __func__); + fatal_f("fingerprint failed"); debug("%s: matching %s found: %s %s", loc, sshkey_is_cert(key) ? "CA" : "key", sshkey_type(found), fp); @@ -697,7 +685,7 @@ check_authkey_line(struct ssh *ssh, struct passwd *pw, struct sshkey *key, success: if (finalopts == NULL) - fatal("%s: internal error: missing options", __func__); + fatal_f("internal error: missing options"); if (authoptsp != NULL) { *authoptsp = finalopts; finalopts = NULL; @@ -776,9 +764,9 @@ user_cert_trusted_ca(struct ssh *ssh, struct passwd *pw, struct sshkey *key, if ((r = sshkey_in_file(key->cert->signature_key, options.trusted_user_ca_keys, 1, 0)) != 0) { - debug2("%s: CA %s %s is not listed in %s: %s", __func__, + debug2_fr(r, "CA %s %s is not listed in %s", sshkey_type(key->cert->signature_key), ca_fp, - options.trusted_user_ca_keys, ssh_err(r)); + options.trusted_user_ca_keys); goto out; } /* @@ -803,7 +791,7 @@ user_cert_trusted_ca(struct ssh *ssh, struct passwd *pw, struct sshkey *key, goto fail_reason; } if (use_authorized_principals && principals_opts == NULL) - fatal("%s: internal error: missing principals_opts", __func__); + fatal_f("internal error: missing principals_opts"); if (sshkey_cert_check_authority(key, 0, 1, use_authorized_principals ? NULL : pw->pw_name, &reason) != 0) goto fail_reason; @@ -928,11 +916,11 @@ user_key_command_allowed2(struct ssh *ssh, struct passwd *user_pw, /* Prepare AuthorizedKeysCommand */ if ((key_fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { - error("%s: sshkey_fingerprint failed", __func__); + error_f("sshkey_fingerprint failed"); goto out; } if ((r = sshkey_to_base64(key, &keytext)) != 0) { - error("%s: sshkey_to_base64 failed: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_to_base64 failed"); goto out; } @@ -959,7 +947,7 @@ user_key_command_allowed2(struct ssh *ssh, struct passwd *user_pw, "k", keytext, (char *)NULL); if (tmp == NULL) - fatal("%s: percent_expand failed", __func__); + fatal_f("percent_expand failed"); free(av[i]); av[i] = tmp; } diff --git a/auth2.c b/auth2.c index 242a7adbefe5..fbbf1961d1f6 100644 --- a/auth2.c +++ b/auth2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2.c,v 1.158 2020/03/06 18:16:21 markus Exp $ */ +/* $OpenBSD: auth2.c,v 1.159 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -145,7 +145,7 @@ userauth_send_banner(struct ssh *ssh, const char *msg) (r = sshpkt_put_cstring(ssh, msg)) != 0 || (r = sshpkt_put_cstring(ssh, "")) != 0 || /* language, unused */ (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); debug("%s: sent", __func__); } @@ -232,11 +232,11 @@ user_specific_delay(const char *user) (void)snprintf(b, sizeof b, "%llu%s", (unsigned long long)options.timing_secret, user); if (ssh_digest_memory(SSH_DIGEST_SHA512, b, strlen(b), hash, len) != 0) - fatal("%s: ssh_digest_memory", __func__); + fatal_f("ssh_digest_memory"); /* 0-4.2 ms of delay */ delay = (double)PEEK_U32(hash) / 1000 / 1000 / 1000 / 1000; freezero(hash, len); - debug3("%s: user specific delay %0.3lfms", __func__, delay/1000); + debug3_f("user specific delay %0.3lfms", delay/1000); return MIN_FAIL_DELAY_SECONDS + delay; } @@ -252,8 +252,8 @@ ensure_minimum_time_since(double start, double seconds) ts.tv_sec = remain; ts.tv_nsec = (remain - ts.tv_sec) * 1000000000; - debug3("%s: elapsed %0.3lfms, delaying %0.3lfms (requested %0.3lfms)", - __func__, elapsed*1000, remain*1000, req*1000); + debug3_f("elapsed %0.3lfms, delaying %0.3lfms (requested %0.3lfms)", + elapsed*1000, remain*1000, req*1000); nanosleep(&ts, NULL); } @@ -286,8 +286,7 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh) authctxt->user = xstrdup(user); if (authctxt->pw && strcmp(service, "ssh-connection")==0) { authctxt->valid = 1; - debug2("%s: setting up authctxt for %s", - __func__, user); + debug2_f("setting up authctxt for %s", user); } else { /* Invalid user, fake password information */ authctxt->pw = fakepw(); @@ -417,7 +416,7 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method, if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_SUCCESS)) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send success packet"); /* now we can break out */ authctxt->success = 1; ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user); @@ -433,14 +432,14 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method, auth_maxtries_exceeded(ssh); } methods = authmethods_get(authctxt); - debug3("%s: failure partial=%d next methods=\"%s\"", __func__, + debug3_f("failure partial=%d next methods=\"%s\"", partial, methods); if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_FAILURE)) != 0 || (r = sshpkt_put_cstring(ssh, methods)) != 0 || (r = sshpkt_put_u8(ssh, partial)) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send failure packet"); free(methods); } } @@ -478,7 +477,7 @@ authmethods_get(Authctxt *authctxt) int i, r; if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); for (i = 0; authmethods[i] != NULL; i++) { if (strcmp(authmethods[i]->name, "none") == 0) continue; @@ -490,10 +489,10 @@ authmethods_get(Authctxt *authctxt) continue; if ((r = sshbuf_putf(b, "%s%s", sshbuf_len(b) ? "," : "", authmethods[i]->name)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "buffer error"); } if ((list = sshbuf_dup_string(b)) == NULL) - fatal("%s: sshbuf_dup_string failed", __func__); + fatal_f("sshbuf_dup_string failed"); sshbuf_free(b); return list; } @@ -585,7 +584,7 @@ auth2_setup_methods_lists(Authctxt *authctxt) if (options.num_auth_methods == 0) return 0; - debug3("%s: checking methods", __func__); + debug3_f("checking methods"); authctxt->auth_methods = xcalloc(options.num_auth_methods, sizeof(*authctxt->auth_methods)); authctxt->num_auth_methods = 0; @@ -673,7 +672,7 @@ auth2_update_methods_lists(Authctxt *authctxt, const char *method, { u_int i, found = 0; - debug3("%s: updating methods list after \"%s\"", __func__, method); + debug3_f("updating methods list after \"%s\"", method); for (i = 0; i < authctxt->num_auth_methods; i++) { if (!remove_method(&(authctxt->auth_methods[i]), method, submethod)) @@ -688,7 +687,7 @@ auth2_update_methods_lists(Authctxt *authctxt, const char *method, } /* This should not happen, but would be bad if it did */ if (!found) - fatal("%s: method not in AuthenticationMethods", __func__); + fatal_f("method not in AuthenticationMethods"); return 0; } @@ -716,7 +715,7 @@ auth2_record_info(Authctxt *authctxt, const char *fmt, ...) va_end(ap); if (i == -1) - fatal("%s: vasprintf failed", __func__); + fatal_f("vasprintf failed"); } /* @@ -732,7 +731,7 @@ auth2_record_key(Authctxt *authctxt, int authenticated, int r; if ((r = sshkey_from_private(key, &dup)) != 0) - fatal("%s: copy key: %s", __func__, ssh_err(r)); + fatal_fr(r, "copy key"); sshkey_free(authctxt->auth_method_key); authctxt->auth_method_key = dup; @@ -741,11 +740,11 @@ auth2_record_key(Authctxt *authctxt, int authenticated, /* If authenticated, make sure we don't accept this key again */ if ((r = sshkey_from_private(key, &dup)) != 0) - fatal("%s: copy key: %s", __func__, ssh_err(r)); + fatal_fr(r, "copy key"); if (authctxt->nprev_keys >= INT_MAX || (tmp = recallocarray(authctxt->prev_keys, authctxt->nprev_keys, authctxt->nprev_keys + 1, sizeof(*authctxt->prev_keys))) == NULL) - fatal("%s: reallocarray failed", __func__); + fatal_f("reallocarray failed"); authctxt->prev_keys = tmp; authctxt->prev_keys[authctxt->nprev_keys] = dup; authctxt->nprev_keys++; @@ -763,7 +762,7 @@ auth2_key_already_used(Authctxt *authctxt, const struct sshkey *key) if (sshkey_equal_public(key, authctxt->prev_keys[i])) { fp = sshkey_fingerprint(authctxt->prev_keys[i], options.fingerprint_hash, SSH_FP_DEFAULT); - debug3("%s: key already used: %s %s", __func__, + debug3_f("key already used: %s %s", sshkey_type(authctxt->prev_keys[i]), fp == NULL ? "UNKNOWN" : fp); free(fp); @@ -785,35 +784,34 @@ auth2_update_session_info(Authctxt *authctxt, const char *method, if (authctxt->session_info == NULL) { if ((authctxt->session_info = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); } /* Append method[/submethod] */ if ((r = sshbuf_putf(authctxt->session_info, "%s%s%s", method, submethod == NULL ? "" : "/", submethod == NULL ? "" : submethod)) != 0) - fatal("%s: append method: %s", __func__, ssh_err(r)); + fatal_fr(r, "append method"); /* Append key if present */ if (authctxt->auth_method_key != NULL) { if ((r = sshbuf_put_u8(authctxt->session_info, ' ')) != 0 || (r = sshkey_format_text(authctxt->auth_method_key, authctxt->session_info)) != 0) - fatal("%s: append key: %s", __func__, ssh_err(r)); + fatal_fr(r, "append key"); } if (authctxt->auth_method_info != NULL) { /* Ensure no ambiguity here */ if (strchr(authctxt->auth_method_info, '\n') != NULL) - fatal("%s: auth_method_info contains \\n", __func__); + fatal_f("auth_method_info contains \\n"); if ((r = sshbuf_put_u8(authctxt->session_info, ' ')) != 0 || (r = sshbuf_putf(authctxt->session_info, "%s", authctxt->auth_method_info)) != 0) { - fatal("%s: append method info: %s", - __func__, ssh_err(r)); + fatal_fr(r, "append method info"); } } if ((r = sshbuf_put_u8(authctxt->session_info, '\n')) != 0) - fatal("%s: append: %s", __func__, ssh_err(r)); + fatal_fr(r, "append"); } diff --git a/canohost.c b/canohost.c index abea9c6e66e8..a810da0eeb73 100644 --- a/canohost.c +++ b/canohost.c @@ -1,4 +1,4 @@ -/* $OpenBSD: canohost.c,v 1.74 2019/06/28 13:35:04 deraadt Exp $ */ +/* $OpenBSD: canohost.c,v 1.75 2020/10/18 11:32:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -96,7 +96,7 @@ get_socket_address(int sock, int remote, int flags) /* Get the address in ascii. */ if ((r = getnameinfo((struct sockaddr *)&addr, addrlen, ntop, sizeof(ntop), NULL, 0, flags)) != 0) { - error("%s: getnameinfo %d failed: %s", __func__, + error_f("getnameinfo %d failed: %s", flags, ssh_gai_strerror(r)); return NULL; } @@ -141,7 +141,7 @@ get_local_name(int fd) /* Handle the case where we were passed a pipe */ if (gethostname(myname, sizeof(myname)) == -1) { - verbose("%s: gethostname: %s", __func__, strerror(errno)); + verbose_f("gethostname: %s", strerror(errno)); host = xstrdup("UNKNOWN"); } else { host = xstrdup(myname); @@ -186,7 +186,7 @@ get_sock_port(int sock, int local) /* Return port number. */ if ((r = getnameinfo((struct sockaddr *)&from, fromlen, NULL, 0, strport, sizeof(strport), NI_NUMERICSERV)) != 0) - fatal("%s: getnameinfo NI_NUMERICSERV failed: %s", __func__, + fatal_f("getnameinfo NI_NUMERICSERV failed: %s", ssh_gai_strerror(r)); return atoi(strport); } diff --git a/channels.c b/channels.c index e4917f3c92a8..cb19a7b03d1c 100644 --- a/channels.c +++ b/channels.c @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.c,v 1.402 2020/09/20 05:47:25 djm Exp $ */ +/* $OpenBSD: channels.c,v 1.403 2020/10/18 11:32:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -228,7 +228,7 @@ channel_init_channels(struct ssh *ssh) struct ssh_channels *sc; if ((sc = calloc(1, sizeof(*sc))) == NULL) - fatal("%s: allocation failed", __func__); + fatal_f("allocation failed"); sc->channels_alloc = 10; sc->channels = xcalloc(sc->channels_alloc, sizeof(*sc->channels)); sc->IPv4or6 = AF_UNSPEC; @@ -243,12 +243,12 @@ channel_by_id(struct ssh *ssh, int id) Channel *c; if (id < 0 || (u_int)id >= ssh->chanctxt->channels_alloc) { - logit("%s: %d: bad id", __func__, id); + logit_f("%d: bad id", id); return NULL; } c = ssh->chanctxt->channels[id]; if (c == NULL) { - logit("%s: %d: bad id: channel free", __func__, id); + logit_f("%d: bad id: channel free", id); return NULL; } return c; @@ -371,8 +371,8 @@ channel_new(struct ssh *ssh, char *ctype, int type, int rfd, int wfd, int efd, */ found = sc->channels_alloc; if (sc->channels_alloc > CHANNELS_MAX_CHANNELS) - fatal("%s: internal error: channels_alloc %d too big", - __func__, sc->channels_alloc); + fatal_f("internal error: channels_alloc %d too big", + sc->channels_alloc); sc->channels = xrecallocarray(sc->channels, sc->channels_alloc, sc->channels_alloc + 10, sizeof(*sc->channels)); sc->channels_alloc += 10; @@ -383,9 +383,9 @@ channel_new(struct ssh *ssh, char *ctype, int type, int rfd, int wfd, int efd, if ((c->input = sshbuf_new()) == NULL || (c->output = sshbuf_new()) == NULL || (c->extended = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_set_max_size(c->input, CHAN_INPUT_MAX)) != 0) - fatal("%s: sshbuf_set_max_size: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_set_max_size"); c->ostate = CHAN_OUTPUT_OPEN; c->istate = CHAN_INPUT_OPEN; channel_register_fds(ssh, c, rfd, wfd, efd, extusage, nonblock, 0); @@ -492,7 +492,7 @@ permission_set_get(struct ssh *ssh, int where) return &sc->remote_perms; break; default: - fatal("%s: invalid forwarding direction %d", __func__, where); + fatal_f("invalid forwarding direction %d", where); } } @@ -513,7 +513,7 @@ permission_set_get_array(struct ssh *ssh, int who, int where, *npermpp = &pset->num_permitted_admin; break; default: - fatal("%s: invalid forwarding client %d", __func__, who); + fatal_f("invalid forwarding client %d", who); } } @@ -530,7 +530,7 @@ permission_set_add(struct ssh *ssh, int who, int where, permission_set_get_array(ssh, who, where, &permp, &npermp); if (*npermp >= INT_MAX) - fatal("%s: %s overflow", __func__, fwd_ident(who, where)); + fatal_f("%s overflow", fwd_ident(who, where)); *permp = xrecallocarray(*permp, *npermp, *npermp + 1, sizeof(**permp)); n = (*npermp)++; @@ -570,8 +570,7 @@ mux_remove_remote_forwardings(struct ssh *ssh, Channel *c) channel_rfwd_bind_host(perm->listen_host))) != 0 || (r = sshpkt_put_u32(ssh, perm->listen_port)) != 0 || (r = sshpkt_send(ssh)) != 0) { - fatal("%s: channel %i: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i", c->self); } fwd_perm_clear(perm); /* unregister */ } @@ -771,7 +770,7 @@ channel_still_open(struct ssh *ssh) case SSH_CHANNEL_MUX_PROXY: return 1; default: - fatal("%s: bad channel type %d", __func__, c->type); + fatal_f("bad channel type %d", c->type); /* NOTREACHED */ } } @@ -813,7 +812,7 @@ channel_find_open(struct ssh *ssh) case SSH_CHANNEL_X11_OPEN: return i; default: - fatal("%s: bad channel type %d", __func__, c->type); + fatal_f("bad channel type %d", c->type); /* NOTREACHED */ } } @@ -870,10 +869,10 @@ channel_open_message(struct ssh *ssh) char *cp, *ret; if ((buf = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_putf(buf, "The following connections are open:\r\n")) != 0) - fatal("%s: sshbuf_putf: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { c = ssh->chanctxt->channels[i]; if (c == NULL) @@ -904,18 +903,17 @@ channel_open_message(struct ssh *ssh) if ((r = sshbuf_putf(buf, " #%d %.300s (%s)\r\n", c->self, c->remote_name, cp)) != 0) { free(cp); - fatal("%s: sshbuf_putf: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); } free(cp); continue; default: - fatal("%s: bad channel type %d", __func__, c->type); + fatal_f("bad channel type %d", c->type); /* NOTREACHED */ } } if ((ret = sshbuf_dup_string(buf)) == NULL) - fatal("%s: sshbuf_dup_string", __func__); + fatal_f("sshbuf_dup_string"); sshbuf_free(buf); return ret; } @@ -930,7 +928,7 @@ open_preamble(struct ssh *ssh, const char *where, Channel *c, const char *type) (r = sshpkt_put_u32(ssh, c->self)) != 0 || (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0) { - fatal("%s: channel %i: open: %s", where, c->self, ssh_err(r)); + fatal_r(r, "%s: channel %i: open", where, c->self); } } @@ -947,7 +945,7 @@ channel_send_open(struct ssh *ssh, int id) debug2("channel %d: send open", id); open_preamble(ssh, __func__, c, c->ctype); if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i", c->self); } void @@ -957,18 +955,18 @@ channel_request_start(struct ssh *ssh, int id, char *service, int wantconfirm) int r; if (c == NULL) { - logit("%s: %d: unknown channel id", __func__, id); + logit_f("%d: unknown channel id", id); return; } if (!c->have_remote_id) - fatal(":%s: channel %d: no remote id", __func__, c->self); + fatal_f("channel %d: no remote id", c->self); debug2("channel %d: request %s confirm %d", id, service, wantconfirm); if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_REQUEST)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_cstring(ssh, service)) != 0 || (r = sshpkt_put_u8(ssh, wantconfirm)) != 0) { - fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i", c->self); } } @@ -980,7 +978,7 @@ channel_register_status_confirm(struct ssh *ssh, int id, Channel *c; if ((c = channel_lookup(ssh, id)) == NULL) - fatal("%s: %d: bad id", __func__, id); + fatal_f("%d: bad id", id); cc = xcalloc(1, sizeof(*cc)); cc->cb = cb; @@ -996,7 +994,7 @@ channel_register_open_confirm(struct ssh *ssh, int id, Channel *c = channel_lookup(ssh, id); if (c == NULL) { - logit("%s: %d: bad id", __func__, id); + logit_f("%d: bad id", id); return; } c->open_confirm = fn; @@ -1010,7 +1008,7 @@ channel_register_cleanup(struct ssh *ssh, int id, Channel *c = channel_by_id(ssh, id); if (c == NULL) { - logit("%s: %d: bad id", __func__, id); + logit_f("%d: bad id", id); return; } c->detach_user = fn; @@ -1023,7 +1021,7 @@ channel_cancel_cleanup(struct ssh *ssh, int id) Channel *c = channel_by_id(ssh, id); if (c == NULL) { - logit("%s: %d: bad id", __func__, id); + logit_f("%d: bad id", id); return; } c->detach_user = NULL; @@ -1037,7 +1035,7 @@ channel_register_filter(struct ssh *ssh, int id, channel_infilter_fn *ifn, Channel *c = channel_lookup(ssh, id); if (c == NULL) { - logit("%s: %d: bad id", __func__, id); + logit_f("%d: bad id", id); return; } c->input_filter = ifn; @@ -1056,7 +1054,7 @@ channel_set_fds(struct ssh *ssh, int id, int rfd, int wfd, int efd, if (c == NULL || c->type != SSH_CHANNEL_LARVAL) fatal("channel_activate for non-larval channel %d.", id); if (!c->have_remote_id) - fatal(":%s: channel %d: no remote id", __func__, c->self); + fatal_f("channel %d: no remote id", c->self); channel_register_fds(ssh, c, rfd, wfd, efd, extusage, nonblock, is_tty); c->type = SSH_CHANNEL_OPEN; @@ -1066,7 +1064,7 @@ channel_set_fds(struct ssh *ssh, int id, int rfd, int wfd, int efd, (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i", c->self); } static void @@ -1295,24 +1293,21 @@ channel_decode_socks4(Channel *c, struct sshbuf *input, struct sshbuf *output) (r = sshbuf_get(input, &s4_req.command, 1)) != 0 || (r = sshbuf_get(input, &s4_req.dest_port, 2)) != 0 || (r = sshbuf_get(input, &s4_req.dest_addr, 4)) != 0) { - debug("channels %d: decode socks4: %s", c->self, ssh_err(r)); + debug_r(r, "channels %d: decode socks4", c->self); return -1; } have = sshbuf_len(input); p = sshbuf_ptr(input); if (memchr(p, '\0', have) == NULL) { - error("channel %d: decode socks4: user not nul terminated", - c->self); + error("channel %d: decode socks4: unterminated user", c->self); return -1; } len = strlen(p); debug2("channel %d: decode socks4: user %s/%d", c->self, p, len); len++; /* trailing '\0' */ strlcpy(username, p, sizeof(username)); - if ((r = sshbuf_consume(input, len)) != 0) { - fatal("%s: channel %d: consume: %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshbuf_consume(input, len)) != 0) + fatal_fr(r, "channel %d: consume", c->self); free(c->path); c->path = NULL; if (need == 1) { /* SOCKS4: one string */ @@ -1336,10 +1331,8 @@ channel_decode_socks4(Channel *c, struct sshbuf *input, struct sshbuf *output) return -1; } c->path = xstrdup(p); - if ((r = sshbuf_consume(input, len)) != 0) { - fatal("%s: channel %d: consume: %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshbuf_consume(input, len)) != 0) + fatal_fr(r, "channel %d: consume", c->self); } c->host_port = ntohs(s4_req.dest_port); @@ -1355,10 +1348,8 @@ channel_decode_socks4(Channel *c, struct sshbuf *input, struct sshbuf *output) s4_rsp.command = 90; /* cd: req granted */ s4_rsp.dest_port = 0; /* ignored */ s4_rsp.dest_addr.s_addr = INADDR_ANY; /* ignored */ - if ((r = sshbuf_put(output, &s4_rsp, sizeof(s4_rsp))) != 0) { - fatal("%s: channel %d: append reply: %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshbuf_put(output, &s4_rsp, sizeof(s4_rsp))) != 0) + fatal_fr(r, "channel %d: append reply", c->self); return 1; } @@ -1411,16 +1402,12 @@ channel_decode_socks5(Channel *c, struct sshbuf *input, struct sshbuf *output) c->self); return -1; } - if ((r = sshbuf_consume(input, nmethods + 2)) != 0) { - fatal("%s: channel %d: consume: %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshbuf_consume(input, nmethods + 2)) != 0) + fatal_fr(r, "channel %d: consume", c->self); /* version, method */ if ((r = sshbuf_put_u8(output, 0x05)) != 0 || - (r = sshbuf_put_u8(output, SSH_SOCKS5_NOAUTH)) != 0) { - fatal("%s: channel %d: append reply: %s", __func__, - c->self, ssh_err(r)); - } + (r = sshbuf_put_u8(output, SSH_SOCKS5_NOAUTH)) != 0) + fatal_fr(r, "channel %d: append reply", c->self); c->flags |= SSH_SOCKS5_AUTHDONE; debug2("channel %d: socks5 auth done", c->self); return 0; /* need more */ @@ -1457,20 +1444,16 @@ channel_decode_socks5(Channel *c, struct sshbuf *input, struct sshbuf *output) need++; if (have < need) return 0; - if ((r = sshbuf_consume(input, sizeof(s5_req))) != 0) { - fatal("%s: channel %d: consume: %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshbuf_consume(input, sizeof(s5_req))) != 0) + fatal_fr(r, "channel %d: consume", c->self); if (s5_req.atyp == SSH_SOCKS5_DOMAIN) { /* host string length */ - if ((r = sshbuf_consume(input, 1)) != 0) { - fatal("%s: channel %d: consume: %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshbuf_consume(input, 1)) != 0) + fatal_fr(r, "channel %d: consume", c->self); } if ((r = sshbuf_get(input, &dest_addr, addrlen)) != 0 || (r = sshbuf_get(input, &dest_port, 2)) != 0) { - debug("channel %d: parse addr/port: %s", c->self, ssh_err(r)); + debug_r(r, "channel %d: parse addr/port", c->self); return -1; } dest_addr[addrlen] = '\0'; @@ -1502,8 +1485,7 @@ channel_decode_socks5(Channel *c, struct sshbuf *input, struct sshbuf *output) if ((r = sshbuf_put(output, &s5_rsp, sizeof(s5_rsp))) != 0 || (r = sshbuf_put_u32(output, ntohl(INADDR_ANY))) != 0 || (r = sshbuf_put(output, &dest_port, sizeof(dest_port))) != 0) - fatal("%s: channel %d: append reply: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %d: append reply", c->self); return 1; } @@ -1513,7 +1495,7 @@ channel_connect_stdio_fwd(struct ssh *ssh, { Channel *c; - debug("%s %s:%d", __func__, host_to_connect, port_to_connect); + debug_f("%s:%d", host_to_connect, port_to_connect); c = channel_new(ssh, "stdio-forward", SSH_CHANNEL_OPENING, in, out, -1, CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, @@ -1602,10 +1584,8 @@ channel_before_prepare_select_rdynamic(struct ssh *ssh, Channel *c) /* sshbuf_dump(c->output, stderr); */ /* EOF received */ if (c->flags & CHAN_EOF_RCVD) { - if ((r = sshbuf_consume(c->output, have)) != 0) { - fatal("%s: channel %d: consume: %s", - __func__, c->self, ssh_err(r)); - } + if ((r = sshbuf_consume(c->output, have)) != 0) + fatal_fr(r, "channel %d: consume", c->self); rdynamic_close(ssh, c); return; } @@ -1637,13 +1617,10 @@ channel_before_prepare_select_rdynamic(struct ssh *ssh, Channel *c) (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_stringb(ssh, c->input)) != 0 || (r = sshpkt_send(ssh)) != 0) { - fatal("%s: channel %i: rdynamic: %s", __func__, - c->self, ssh_err(r)); - } - if ((r = sshbuf_consume(c->input, len)) != 0) { - fatal("%s: channel %d: consume: %s", - __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i: rdynamic", c->self); } + if ((r = sshbuf_consume(c->input, len)) != 0) + fatal_fr(r, "channel %d: consume", c->self); c->remote_window -= len; } } else if (rdynamic_connect_finish(ssh, c) < 0) { @@ -1696,11 +1673,10 @@ channel_post_x11_listener(struct ssh *ssh, Channel *c, open_preamble(ssh, __func__, nc, "x11"); if ((r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0 || (r = sshpkt_put_u32(ssh, remote_port)) != 0) { - fatal("%s: channel %i: reply %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i: reply", c->self); } if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %i: send %s", __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i: send", c->self); free(remote_ipaddr); } @@ -1731,46 +1707,34 @@ port_open_helper(struct ssh *ssh, Channel *c, char *rtype) if (strcmp(rtype, "direct-tcpip") == 0) { /* target host, port */ if ((r = sshpkt_put_cstring(ssh, c->path)) != 0 || - (r = sshpkt_put_u32(ssh, c->host_port)) != 0) { - fatal("%s: channel %i: reply %s", __func__, - c->self, ssh_err(r)); - } + (r = sshpkt_put_u32(ssh, c->host_port)) != 0) + fatal_fr(r, "channel %i: reply", c->self); } else if (strcmp(rtype, "direct-streamlocal@openssh.com") == 0) { /* target path */ - if ((r = sshpkt_put_cstring(ssh, c->path)) != 0) { - fatal("%s: channel %i: reply %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshpkt_put_cstring(ssh, c->path)) != 0) + fatal_fr(r, "channel %i: reply", c->self); } else if (strcmp(rtype, "forwarded-streamlocal@openssh.com") == 0) { /* listen path */ - if ((r = sshpkt_put_cstring(ssh, c->path)) != 0) { - fatal("%s: channel %i: reply %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshpkt_put_cstring(ssh, c->path)) != 0) + fatal_fr(r, "channel %i: reply", c->self); } else { /* listen address, port */ if ((r = sshpkt_put_cstring(ssh, c->path)) != 0 || - (r = sshpkt_put_u32(ssh, local_port)) != 0) { - fatal("%s: channel %i: reply %s", __func__, - c->self, ssh_err(r)); - } + (r = sshpkt_put_u32(ssh, local_port)) != 0) + fatal_fr(r, "channel %i: reply", c->self); } if (strcmp(rtype, "forwarded-streamlocal@openssh.com") == 0) { /* reserved for future owner/mode info */ - if ((r = sshpkt_put_cstring(ssh, "")) != 0) { - fatal("%s: channel %i: reply %s", __func__, - c->self, ssh_err(r)); - } + if ((r = sshpkt_put_cstring(ssh, "")) != 0) + fatal_fr(r, "channel %i: reply", c->self); } else { /* originator host and port */ if ((r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0 || - (r = sshpkt_put_u32(ssh, (u_int)remote_port)) != 0) { - fatal("%s: channel %i: reply %s", __func__, - c->self, ssh_err(r)); - } + (r = sshpkt_put_u32(ssh, (u_int)remote_port)) != 0) + fatal_fr(r, "channel %i: reply", c->self); } if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %i: send %s", __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i: send", c->self); free(remote_ipaddr); free(local_ipaddr); } @@ -1870,7 +1834,7 @@ channel_post_auth_listener(struct ssh *ssh, Channel *c, 0, "accepted auth socket", 1); open_preamble(ssh, __func__, nc, "auth-agent@openssh.com"); if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %i: %s", __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i", c->self); } static void @@ -1883,7 +1847,7 @@ channel_post_connecting(struct ssh *ssh, Channel *c, if (!FD_ISSET(c->sock, writeset)) return; if (!c->have_remote_id) - fatal(":%s: channel %d: no remote id", __func__, c->self); + fatal_f("channel %d: no remote id", c->self); /* for rdynamic the OPEN_CONFIRMATION has been sent already */ isopen = (c->type == SSH_CHANNEL_RDYNAMIC_FINISH); if (getsockopt(c->sock, SOL_SOCKET, SO_ERROR, &err, &sz) == -1) { @@ -1903,13 +1867,9 @@ channel_post_connecting(struct ssh *ssh, Channel *c, (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_u32(ssh, c->self)) != 0 || (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || - (r = sshpkt_put_u32(ssh, c->local_maxpacket)) - != 0) - fatal("%s: channel %i: confirm: %s", __func__, - c->self, ssh_err(r)); - if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %i: %s", __func__, c->self, - ssh_err(r)); + (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0 || + (r = sshpkt_send(ssh)) != 0) + fatal_fr(r, "channel %i open confirm", c->self); } } else { debug("channel %d: connection failed: %s", @@ -1934,13 +1894,9 @@ channel_post_connecting(struct ssh *ssh, Channel *c, (r = sshpkt_put_u32(ssh, SSH2_OPEN_CONNECT_FAILED)) != 0 || (r = sshpkt_put_cstring(ssh, strerror(err))) != 0 || - (r = sshpkt_put_cstring(ssh, "")) != 0) { - fatal("%s: channel %i: failure: %s", __func__, - c->self, ssh_err(r)); - } - if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %i: %s", __func__, c->self, - ssh_err(r)); + (r = sshpkt_put_cstring(ssh, "")) != 0 || + (r = sshpkt_send(ssh)) != 0) + fatal_fr(r, "channel %i: failure", c->self); chan_mark_dead(ssh, c); } } @@ -1988,12 +1944,9 @@ channel_handle_rfd(struct ssh *ssh, Channel *c, } } else if (c->datagram) { if ((r = sshbuf_put_string(c->input, buf, len)) != 0) - fatal("%s: channel %d: put datagram: %s", __func__, - c->self, ssh_err(r)); - } else if ((r = sshbuf_put(c->input, buf, len)) != 0) { - fatal("%s: channel %d: put data: %s", __func__, - c->self, ssh_err(r)); - } + fatal_fr(r, "channel %i: put datagram", c->self); + } else if ((r = sshbuf_put(c->input, buf, len)) != 0) + fatal_fr(r, "channel %i: put data", c->self); return 1; } @@ -2023,8 +1976,7 @@ channel_handle_wfd(struct ssh *ssh, Channel *c, } } else if (c->datagram) { if ((r = sshbuf_get_string(c->output, &data, &dlen)) != 0) - fatal("%s: channel %d: get datagram: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i: get datagram", c->self); buf = data; } else { buf = data = sshbuf_mutable_ptr(c->output); @@ -2076,15 +2028,12 @@ channel_handle_wfd(struct ssh *ssh, Channel *c, */ if ((r = sshpkt_msg_ignore(ssh, 4+len)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %d: ignore: %s", - __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i: ignore", c->self); } } #endif /* BROKEN_TCGETATTR_ICANON */ - if ((r = sshbuf_consume(c->output, len)) != 0) { - fatal("%s: channel %d: consume: %s", - __func__, c->self, ssh_err(r)); - } + if ((r = sshbuf_consume(c->output, len)) != 0) + fatal_fr(r, "channel %i: consume", c->self); out: c->local_consumed += olen - sshbuf_len(c->output); @@ -2111,10 +2060,8 @@ channel_handle_efd_write(struct ssh *ssh, Channel *c, debug2("channel %d: closing write-efd %d", c->self, c->efd); channel_close_fd(ssh, &c->efd); } else { - if ((r = sshbuf_consume(c->extended, len)) != 0) { - fatal("%s: channel %d: consume: %s", - __func__, c->self, ssh_err(r)); - } + if ((r = sshbuf_consume(c->extended, len)) != 0) + fatal_fr(r, "channel %i: consume", c->self); c->local_consumed += len; } return 1; @@ -2139,18 +2086,12 @@ channel_handle_efd_read(struct ssh *ssh, Channel *c, errno == EWOULDBLOCK) && !force))) return 1; if (len <= 0) { - debug2("channel %d: closing read-efd %d", - c->self, c->efd); + debug2("channel %d: closing read-efd %d", c->self, c->efd); channel_close_fd(ssh, &c->efd); - } else { - if (c->extended_usage == CHAN_EXTENDED_IGNORE) { - debug3("channel %d: discard efd", - c->self); - } else if ((r = sshbuf_put(c->extended, buf, len)) != 0) { - fatal("%s: channel %d: append: %s", - __func__, c->self, ssh_err(r)); - } - } + } else if (c->extended_usage == CHAN_EXTENDED_IGNORE) + debug3("channel %d: discard efd", c->self); + else if ((r = sshbuf_put(c->extended, buf, len)) != 0) + fatal_fr(r, "channel %i: append", c->self); return 1; } @@ -2184,19 +2125,16 @@ channel_check_window(struct ssh *ssh, Channel *c) c->local_window < c->local_window_max/2) && c->local_consumed > 0) { if (!c->have_remote_id) - fatal(":%s: channel %d: no remote id", - __func__, c->self); + fatal_f("channel %d: no remote id", c->self); if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_WINDOW_ADJUST)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_u32(ssh, c->local_consumed)) != 0 || (r = sshpkt_send(ssh)) != 0) { - fatal("%s: channel %i: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i", c->self); } - debug2("channel %d: window %d sent adjust %d", - c->self, c->local_window, - c->local_consumed); + debug2("channel %d: window %d sent adjust %d", c->self, + c->local_window, c->local_consumed); c->local_window += c->local_consumed; c->local_consumed = 0; } @@ -2231,10 +2169,8 @@ read_mux(struct ssh *ssh, Channel *c, u_int need) c->self, c->rfd, len); chan_read_failed(ssh, c); return 0; - } else if ((r = sshbuf_put(c->input, buf, len)) != 0) { - fatal("%s: channel %d: append: %s", - __func__, c->self, ssh_err(r)); - } + } else if ((r = sshbuf_put(c->input, buf, len)) != 0) + fatal_fr(r, "channel %i: append", c->self); } return sshbuf_len(c->input); } @@ -2295,8 +2231,7 @@ channel_post_mux_client_write(struct ssh *ssh, Channel *c, return; } if ((r = sshbuf_consume(c->output, len)) != 0) - fatal("%s: channel %d: consume: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i: consume", c->self); } static void @@ -2330,15 +2265,14 @@ channel_post_mux_listener(struct ssh *ssh, Channel *c, addrlen = sizeof(addr); if ((newsock = accept(c->sock, (struct sockaddr*)&addr, &addrlen)) == -1) { - error("%s accept: %s", __func__, strerror(errno)); + error_f("accept: %s", strerror(errno)); if (errno == EMFILE || errno == ENFILE) c->notbefore = monotime() + 1; return; } if (getpeereid(newsock, &euid, &egid) == -1) { - error("%s getpeereid failed: %s", __func__, - strerror(errno)); + error_f("getpeereid failed: %s", strerror(errno)); close(newsock); return; } @@ -2352,7 +2286,7 @@ channel_post_mux_listener(struct ssh *ssh, Channel *c, newsock, newsock, -1, c->local_window_max, c->local_maxpacket, 0, "mux-control", 1); nc->mux_rcb = c->mux_rcb; - debug3("%s: new mux channel %d fd %d", __func__, nc->self, nc->sock); + debug3_f("new mux channel %d fd %d", nc->self, nc->sock); /* establish state */ nc->mux_rcb(ssh, nc); /* mux state transitions must not elicit protocol messages */ @@ -2366,7 +2300,7 @@ channel_handler_init(struct ssh_channels *sc) if ((pre = calloc(SSH_CHANNEL_MAX_TYPE, sizeof(*pre))) == NULL || (post = calloc(SSH_CHANNEL_MAX_TYPE, sizeof(*post))) == NULL) - fatal("%s: allocation failed", __func__); + fatal_f("allocation failed"); pre[SSH_CHANNEL_OPEN] = &channel_pre_open; pre[SSH_CHANNEL_X11_OPEN] = &channel_pre_x11_open; @@ -2458,8 +2392,8 @@ channel_handler(struct ssh *ssh, int table, * Collect the time that the earliest * channel comes off pause. */ - debug3("%s: chan %d: skip for %d more seconds", - __func__, c->self, + debug3_f("chan %d: skip for %d more " + "seconds", c->self, (int)(c->notbefore - now)); if (*unpause_secs == 0 || (c->notbefore - now) < *unpause_secs) @@ -2469,8 +2403,8 @@ channel_handler(struct ssh *ssh, int table, channel_garbage_collect(ssh, c); } if (unpause_secs != NULL && *unpause_secs != 0) - debug3("%s: first channel unpauses in %d seconds", - __func__, (int)*unpause_secs); + debug3_f("first channel unpauses in %d seconds", + (int)*unpause_secs); } /* @@ -2569,13 +2503,12 @@ channel_output_poll_input_open(struct ssh *ssh, Channel *c) } if (!c->have_remote_id) - fatal(":%s: channel %d: no remote id", __func__, c->self); + fatal_f("channel %d: no remote id", c->self); if (c->datagram) { /* Check datagram will fit; drop if not */ if ((r = sshbuf_get_string_direct(c->input, &pkt, &plen)) != 0) - fatal("%s: channel %d: get datagram: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i: get datagram", c->self); /* * XXX this does tail-drop on the datagram queue which is * usually suboptimal compared to head-drop. Better to have @@ -2589,10 +2522,8 @@ channel_output_poll_input_open(struct ssh *ssh, Channel *c) if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_string(ssh, pkt, plen)) != 0 || - (r = sshpkt_send(ssh)) != 0) { - fatal("%s: channel %i: datagram: %s", __func__, - c->self, ssh_err(r)); - } + (r = sshpkt_send(ssh)) != 0) + fatal_fr(r, "channel %i: send datagram", c->self); c->remote_window -= plen; return; } @@ -2607,13 +2538,10 @@ channel_output_poll_input_open(struct ssh *ssh, Channel *c) if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_DATA)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_string(ssh, sshbuf_ptr(c->input), len)) != 0 || - (r = sshpkt_send(ssh)) != 0) { - fatal("%s: channel %i: data: %s", __func__, - c->self, ssh_err(r)); - } + (r = sshpkt_send(ssh)) != 0) + fatal_fr(r, "channel %i: send data", c->self); if ((r = sshbuf_consume(c->input, len)) != 0) - fatal("%s: channel %i: consume: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i: consume", c->self); c->remote_window -= len; } @@ -2638,18 +2566,15 @@ channel_output_poll_extended_read(struct ssh *ssh, Channel *c) if (len == 0) return; if (!c->have_remote_id) - fatal(":%s: channel %d: no remote id", __func__, c->self); + fatal_f("channel %d: no remote id", c->self); if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_EXTENDED_DATA)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_u32(ssh, SSH2_EXTENDED_DATA_STDERR)) != 0 || (r = sshpkt_put_string(ssh, sshbuf_ptr(c->extended), len)) != 0 || - (r = sshpkt_send(ssh)) != 0) { - fatal("%s: channel %i: data: %s", __func__, - c->self, ssh_err(r)); - } + (r = sshpkt_send(ssh)) != 0) + fatal_fr(r, "channel %i: data", c->self); if ((r = sshbuf_consume(c->extended, len)) != 0) - fatal("%s: channel %i: consume: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i: consume", c->self); c->remote_window -= len; debug2("channel %d: sent ext data %zu", c->self, len); } @@ -2746,11 +2671,11 @@ channel_proxy_downstream(struct ssh *ssh, Channel *downstream) /* sshbuf_dump(downstream->input, stderr); */ if ((r = sshbuf_get_string_direct(downstream->input, &cp, &have)) != 0) { - error("%s: malformed message: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); return -1; } if (have < 2) { - error("%s: short message", __func__); + error_f("short message"); return -1; } type = cp[1]; @@ -2758,19 +2683,19 @@ channel_proxy_downstream(struct ssh *ssh, Channel *downstream) cp += 2; have -= 2; if (ssh_packet_log_type(type)) - debug3("%s: channel %u: down->up: type %u", __func__, + debug3_f("channel %u: down->up: type %u", downstream->self, type); switch (type) { case SSH2_MSG_CHANNEL_OPEN: if ((original = sshbuf_from(cp, have)) == NULL || (modified = sshbuf_new()) == NULL) { - error("%s: alloc", __func__); + error_f("alloc"); goto out; } if ((r = sshbuf_get_cstring(original, &ctype, NULL)) != 0 || (r = sshbuf_get_u32(original, &id)) != 0) { - error("%s: parse error %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto out; } c = channel_new(ssh, "mux proxy", SSH_CHANNEL_MUX_PROXY, @@ -2780,7 +2705,7 @@ channel_proxy_downstream(struct ssh *ssh, Channel *downstream) if ((r = sshbuf_put_cstring(modified, ctype)) != 0 || (r = sshbuf_put_u32(modified, c->self)) != 0 || (r = sshbuf_putb(modified, original)) != 0) { - error("%s: compose error %s", __func__, ssh_err(r)); + error_fr(r, "compose"); channel_free(ssh, c); goto out; } @@ -2792,12 +2717,12 @@ channel_proxy_downstream(struct ssh *ssh, Channel *downstream) */ if ((original = sshbuf_from(cp, have)) == NULL || (modified = sshbuf_new()) == NULL) { - error("%s: alloc", __func__); + error_f("alloc"); goto out; } if ((r = sshbuf_get_u32(original, &remote_id)) != 0 || (r = sshbuf_get_u32(original, &id)) != 0) { - error("%s: parse error %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto out; } c = channel_new(ssh, "mux proxy", SSH_CHANNEL_MUX_PROXY, @@ -2809,33 +2734,33 @@ channel_proxy_downstream(struct ssh *ssh, Channel *downstream) if ((r = sshbuf_put_u32(modified, remote_id)) != 0 || (r = sshbuf_put_u32(modified, c->self)) != 0 || (r = sshbuf_putb(modified, original)) != 0) { - error("%s: compose error %s", __func__, ssh_err(r)); + error_fr(r, "compose"); channel_free(ssh, c); goto out; } break; case SSH2_MSG_GLOBAL_REQUEST: if ((original = sshbuf_from(cp, have)) == NULL) { - error("%s: alloc", __func__); + error_f("alloc"); goto out; } if ((r = sshbuf_get_cstring(original, &ctype, NULL)) != 0) { - error("%s: parse error %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto out; } if (strcmp(ctype, "tcpip-forward") != 0) { - error("%s: unsupported request %s", __func__, ctype); + error_f("unsupported request %s", ctype); goto out; } if ((r = sshbuf_get_u8(original, NULL)) != 0 || (r = sshbuf_get_cstring(original, &listen_host, NULL)) != 0 || (r = sshbuf_get_u32(original, &listen_port)) != 0) { - error("%s: parse error %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto out; } if (listen_port > 65535) { - error("%s: tcpip-forward for %s: bad port %u", - __func__, listen_host, listen_port); + error_f("tcpip-forward for %s: bad port %u", + listen_host, listen_port); goto out; } /* Record that connection to this host/port is permitted. */ @@ -2859,14 +2784,14 @@ channel_proxy_downstream(struct ssh *ssh, Channel *downstream) if ((r = sshpkt_start(ssh, type)) != 0 || (r = sshpkt_putb(ssh, modified)) != 0 || (r = sshpkt_send(ssh)) != 0) { - error("%s: send %s", __func__, ssh_err(r)); + error_fr(r, "send"); goto out; } } else { if ((r = sshpkt_start(ssh, type)) != 0 || (r = sshpkt_put(ssh, cp, have)) != 0 || (r = sshpkt_send(ssh)) != 0) { - error("%s: send %s", __func__, ssh_err(r)); + error_fr(r, "send"); goto out; } } @@ -2917,18 +2842,17 @@ channel_proxy_upstream(Channel *c, int type, u_int32_t seq, struct ssh *ssh) case SSH2_MSG_CHANNEL_REQUEST: break; default: - debug2("%s: channel %u: unsupported type %u", __func__, - c->self, type); + debug2_f("channel %u: unsupported type %u", c->self, type); return 0; } if ((b = sshbuf_new()) == NULL) { - error("%s: alloc reply", __func__); + error_f("alloc reply"); goto out; } /* get remaining payload (after id) */ cp = sshpkt_ptr(ssh, &len); if (cp == NULL) { - error("%s: no packet", __func__); + error_f("no packet"); goto out; } /* translate id and send to muxclient */ @@ -2937,13 +2861,12 @@ channel_proxy_upstream(Channel *c, int type, u_int32_t seq, struct ssh *ssh) (r = sshbuf_put_u32(b, c->mux_downstream_id)) != 0 || (r = sshbuf_put(b, cp, len)) != 0 || (r = sshbuf_put_stringb(downstream->output, b)) != 0) { - error("%s: compose for muxclient %s", __func__, ssh_err(r)); + error_fr(r, "compose muxclient"); goto out; } /* sshbuf_dump(b, stderr); */ if (ssh_packet_log_type(type)) - debug3("%s: channel %u: up->down: type %u", __func__, c->self, - type); + debug3_f("channel %u: up->down: type %u", c->self, type); out: /* update state */ switch (type) { @@ -2975,11 +2898,11 @@ channel_parse_id(struct ssh *ssh, const char *where, const char *what) int r; if ((r = sshpkt_get_u32(ssh, &id)) != 0) { - error("%s: parse id: %s", where, ssh_err(r)); + error_r(r, "%s: parse id", where); ssh_packet_disconnect(ssh, "Invalid %s message", what); } if (id > INT_MAX) { - error("%s: bad channel id %u: %s", where, id, ssh_err(r)); + error_r(r, "%s: bad channel id %u", where, id); ssh_packet_disconnect(ssh, "Invalid %s channel id", what); } return (int)id; @@ -3020,8 +2943,7 @@ channel_input_data(int type, u_int32_t seq, struct ssh *ssh) /* Get the data. */ if ((r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0 || (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: channel %d: get data: %s", __func__, - c->self, ssh_err(r)); + fatal_fr(r, "channel %i: get data", c->self); win_len = data_len; if (c->datagram) @@ -3052,11 +2974,9 @@ channel_input_data(int type, u_int32_t seq, struct ssh *ssh) if (c->datagram) { if ((r = sshbuf_put_string(c->output, data, data_len)) != 0) - fatal("%s: channel %d: append datagram: %s", - __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i: append datagram", c->self); } else if ((r = sshbuf_put(c->output, data, data_len)) != 0) - fatal("%s: channel %d: append data: %s", - __func__, c->self, ssh_err(r)); + fatal_fr(r, "channel %i: append data", c->self); return 0; } @@ -3086,7 +3006,7 @@ channel_input_extended_data(int type, u_int32_t seq, struct ssh *ssh) } if ((r = sshpkt_get_u32(ssh, &tcode)) != 0) { - error("%s: parse tcode: %s", __func__, ssh_err(r)); + error_fr(r, "parse tcode"); ssh_packet_disconnect(ssh, "Invalid extended_data message"); } if (c->efd == -1 || @@ -3097,7 +3017,7 @@ channel_input_extended_data(int type, u_int32_t seq, struct ssh *ssh) } if ((r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0 || (r = sshpkt_get_end(ssh)) != 0) { - error("%s: parse data: %s", __func__, ssh_err(r)); + error_fr(r, "parse data"); ssh_packet_disconnect(ssh, "Invalid extended_data message"); } @@ -3109,7 +3029,7 @@ channel_input_extended_data(int type, u_int32_t seq, struct ssh *ssh) debug2("channel %d: rcvd ext data %zu", c->self, data_len); /* XXX sshpkt_getb? */ if ((r = sshbuf_put(c->extended, data, data_len)) != 0) - error("%s: append: %s", __func__, ssh_err(r)); + error_fr(r, "append"); c->local_window -= data_len; return 0; } @@ -3121,7 +3041,7 @@ channel_input_ieof(int type, u_int32_t seq, struct ssh *ssh) int r; if ((r = sshpkt_get_end(ssh)) != 0) { - error("%s: parse data: %s", __func__, ssh_err(r)); + error_fr(r, "parse data"); ssh_packet_disconnect(ssh, "Invalid ieof message"); } @@ -3148,7 +3068,7 @@ channel_input_oclose(int type, u_int32_t seq, struct ssh *ssh) if (channel_proxy_upstream(c, type, seq, ssh)) return 0; if ((r = sshpkt_get_end(ssh)) != 0) { - error("%s: parse data: %s", __func__, ssh_err(r)); + error_fr(r, "parse data"); ssh_packet_disconnect(ssh, "Invalid oclose message"); } chan_rcvd_oclose(ssh, c); @@ -3175,7 +3095,7 @@ channel_input_open_confirmation(int type, u_int32_t seq, struct ssh *ssh) (r = sshpkt_get_u32(ssh, &remote_window)) != 0 || (r = sshpkt_get_u32(ssh, &remote_maxpacket)) != 0 || (r = sshpkt_get_end(ssh)) != 0) { - error("%s: window/maxpacket: %s", __func__, ssh_err(r)); + error_fr(r, "window/maxpacket"); ssh_packet_disconnect(ssh, "Invalid open confirmation message"); } @@ -3184,9 +3104,9 @@ channel_input_open_confirmation(int type, u_int32_t seq, struct ssh *ssh) c->remote_maxpacket = remote_maxpacket; c->type = SSH_CHANNEL_OPEN; if (c->open_confirm) { - debug2("%s: channel %d: callback start", __func__, c->self); + debug2_f("channel %d: callback start", c->self); c->open_confirm(ssh, c->self, 1, c->open_confirm_ctx); - debug2("%s: channel %d: callback done", __func__, c->self); + debug2_f("channel %d: callback done", c->self); } debug2("channel %d: open confirm rwindow %u rmax %u", c->self, c->remote_window, c->remote_maxpacket); @@ -3223,23 +3143,23 @@ channel_input_open_failure(int type, u_int32_t seq, struct ssh *ssh) ssh_packet_disconnect(ssh, "Received open failure for " "non-opening channel %d.", c->self); if ((r = sshpkt_get_u32(ssh, &reason)) != 0) { - error("%s: reason: %s", __func__, ssh_err(r)); + error_fr(r, "parse reason"); ssh_packet_disconnect(ssh, "Invalid open failure message"); } /* skip language */ if ((r = sshpkt_get_cstring(ssh, &msg, NULL)) != 0 || (r = sshpkt_get_string_direct(ssh, NULL, NULL)) != 0 || (r = sshpkt_get_end(ssh)) != 0) { - error("%s: message/lang: %s", __func__, ssh_err(r)); + error_fr(r, "parse msg/lang"); ssh_packet_disconnect(ssh, "Invalid open failure message"); } logit("channel %d: open failed: %s%s%s", c->self, reason2txt(reason), msg ? ": ": "", msg ? msg : ""); free(msg); if (c->open_confirm) { - debug2("%s: channel %d: callback start", __func__, c->self); + debug2_f("channel %d: callback start", c->self); c->open_confirm(ssh, c->self, 0, c->open_confirm_ctx); - debug2("%s: channel %d: callback done", __func__, c->self); + debug2_f("channel %d: callback done", c->self); } /* Schedule the channel for cleanup/deletion. */ chan_mark_dead(ssh, c); @@ -3264,7 +3184,7 @@ channel_input_window_adjust(int type, u_int32_t seq, struct ssh *ssh) return 0; if ((r = sshpkt_get_u32(ssh, &adjust)) != 0 || (r = sshpkt_get_end(ssh)) != 0) { - error("%s: adjust: %s", __func__, ssh_err(r)); + error_fr(r, "parse adjust"); ssh_packet_disconnect(ssh, "Invalid window adjust message"); } debug2("channel %d: rcvd adjust %u", c->self, adjust); @@ -3286,10 +3206,10 @@ channel_input_status_confirm(int type, u_int32_t seq, struct ssh *ssh) /* Reset keepalive timeout */ ssh_packet_set_alive_timeouts(ssh, 0); - debug2("%s: type %d id %d", __func__, type, id); + debug2_f("type %d id %d", type, id); if ((c = channel_lookup(ssh, id)) == NULL) { - logit("%s: %d: unknown", __func__, id); + logit_f("%d: unknown", id); return 0; } if (channel_proxy_upstream(c, type, seq, ssh)) @@ -3414,8 +3334,8 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type, /* Determine the bind address, cf. channel_fwd_bind_addr() comment */ addr = channel_fwd_bind_addr(ssh, fwd->listen_host, &wildcard, is_client, fwd_opts); - debug3("%s: type %d wildcard %d addr %s", __func__, - type, wildcard, (addr == NULL) ? "NULL" : addr); + debug3_f("type %d wildcard %d addr %s", type, wildcard, + (addr == NULL) ? "NULL" : addr); /* * getaddrinfo returns a loopback address if the hostname is @@ -3432,7 +3352,7 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type, ssh_packet_disconnect(ssh, "getaddrinfo: fatal error: %s", ssh_gai_strerror(r)); } else { - error("%s: getaddrinfo(%.64s): %s", __func__, addr, + error_f("getaddrinfo(%.64s): %s", addr, ssh_gai_strerror(r)); } return 0; @@ -3464,7 +3384,7 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type, if (getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, sizeof(ntop), strport, sizeof(strport), NI_NUMERICHOST|NI_NUMERICSERV) != 0) { - error("%s: getnameinfo failed", __func__); + error_f("getnameinfo failed"); continue; } /* Create a port to listen for the host. */ @@ -3536,8 +3456,7 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type, success = 1; } if (success == 0) - error("%s: cannot listen to port: %d", __func__, - fwd->listen_port); + error_f("cannot listen to port: %d", fwd->listen_port); freeaddrinfo(aitop); return success; } @@ -3580,7 +3499,7 @@ channel_setup_fwd_listener_streamlocal(struct ssh *ssh, int type, port = PORT_STREAMLOCAL; break; default: - error("%s: unexpected channel type %d", __func__, type); + error_f("unexpected channel type %d", type); return 0; } @@ -3593,7 +3512,7 @@ channel_setup_fwd_listener_streamlocal(struct ssh *ssh, int type, return 0; } - debug3("%s: type %d path %s", __func__, type, fwd->listen_path); + debug3_f("type %d path %s", type, fwd->listen_path); /* Start a Unix domain listener. */ omask = umask(fwd_opts->streamlocal_bind_mask); @@ -3628,7 +3547,7 @@ channel_cancel_rport_listener_tcpip(struct ssh *ssh, if (c == NULL || c->type != SSH_CHANNEL_RPORT_LISTENER) continue; if (strcmp(c->path, host) == 0 && c->listening_port == port) { - debug2("%s: close channel %d", __func__, i); + debug2_f("close channel %d", i); channel_free(ssh, c); found = 1; } @@ -3650,7 +3569,7 @@ channel_cancel_rport_listener_streamlocal(struct ssh *ssh, const char *path) if (c->path == NULL) continue; if (strcmp(c->path, path) == 0) { - debug2("%s: close channel %d", __func__, i); + debug2_f("close channel %d", i); channel_free(ssh, c); found = 1; } @@ -3698,7 +3617,7 @@ channel_cancel_lport_listener_tcpip(struct ssh *ssh, (c->listening_addr != NULL && addr == NULL)) continue; if (addr == NULL || strcmp(c->listening_addr, addr) == 0) { - debug2("%s: close channel %d", __func__, i); + debug2_f("close channel %d", i); channel_free(ssh, c); found = 1; } @@ -3714,7 +3633,7 @@ channel_cancel_lport_listener_streamlocal(struct ssh *ssh, const char *path) int found = 0; if (path == NULL) { - error("%s: no path specified.", __func__); + error_f("no path specified."); return 0; } @@ -3725,7 +3644,7 @@ channel_cancel_lport_listener_streamlocal(struct ssh *ssh, const char *path) if (c->listening_addr == NULL) continue; if (strcmp(c->listening_addr, path) == 0) { - debug2("%s: close channel %d", __func__, i); + debug2_f("close channel %d", i); channel_free(ssh, c); found = 1; } @@ -3897,8 +3816,7 @@ channel_request_remote_forwarding(struct ssh *ssh, struct Forward *fwd) (r = sshpkt_put_cstring(ssh, fwd->listen_path)) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: request streamlocal: %s", - __func__, ssh_err(r)); + fatal_fr(r, "request streamlocal"); } else { if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || (r = sshpkt_put_cstring(ssh, "tcpip-forward")) != 0 || @@ -3908,8 +3826,7 @@ channel_request_remote_forwarding(struct ssh *ssh, struct Forward *fwd) (r = sshpkt_put_u32(ssh, fwd->listen_port)) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: request tcpip-forward: %s", - __func__, ssh_err(r)); + fatal_fr(r, "request tcpip-forward"); } /* Assume that server accepts the request */ success = 1; @@ -4017,7 +3934,7 @@ channel_request_rforward_cancel_tcpip(struct ssh *ssh, perm = NULL; } if (perm == NULL) { - debug("%s: requested forward not found", __func__); + debug_f("requested forward not found"); return -1; } if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || @@ -4026,7 +3943,7 @@ channel_request_rforward_cancel_tcpip(struct ssh *ssh, (r = sshpkt_put_cstring(ssh, channel_rfwd_bind_host(host))) != 0 || (r = sshpkt_put_u32(ssh, port)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: send cancel: %s", __func__, ssh_err(r)); + fatal_fr(r, "send cancel"); fwd_perm_clear(perm); /* unregister */ @@ -4053,7 +3970,7 @@ channel_request_rforward_cancel_streamlocal(struct ssh *ssh, const char *path) perm = NULL; } if (perm == NULL) { - debug("%s: requested forward not found", __func__); + debug_f("requested forward not found"); return -1; } if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || @@ -4062,7 +3979,7 @@ channel_request_rforward_cancel_streamlocal(struct ssh *ssh, const char *path) (r = sshpkt_put_u8(ssh, 0)) != 0 || /* want reply */ (r = sshpkt_put_cstring(ssh, path)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: send cancel: %s", __func__, ssh_err(r)); + fatal_fr(r, "send cancel"); fwd_perm_clear(perm); /* unregister */ @@ -4157,8 +4074,8 @@ channel_update_permission(struct ssh *ssh, int idx, int newport) struct permission_set *pset = &ssh->chanctxt->local_perms; if (idx < 0 || (u_int)idx >= pset->num_permitted_user) { - debug("%s: index out of range: %d num_permitted_user %d", - __func__, idx, pset->num_permitted_user); + debug_f("index out of range: %d num_permitted_user %d", + idx, pset->num_permitted_user); return; } debug("%s allowed port %d for forwarding to host %s port %d", @@ -4225,7 +4142,7 @@ connect_next(struct channel_connect *cctx) continue; } if (set_nonblock(sock) == -1) - fatal("%s: set_nonblock(%d)", __func__, sock); + fatal_f("set_nonblock(%d)", sock); if (connect(sock, cctx->ai->ai_addr, cctx->ai->ai_addrlen) == -1 && errno != EINPROGRESS) { debug("connect_next: host %.100s ([%.100s]:%s): " @@ -4528,8 +4445,7 @@ channel_send_window_changes(struct ssh *ssh) (r = sshpkt_put_u32(ssh, (u_int)ws.ws_xpixel)) != 0 || (r = sshpkt_put_u32(ssh, (u_int)ws.ws_ypixel)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: channel %u: send window-change: %s", - __func__, i, ssh_err(r)); + fatal_fr(r, "channel %u; send window-change", i); } } @@ -4553,10 +4469,8 @@ rdynamic_connect_prepare(struct ssh *ssh, char *ctype, char *rname) (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_u32(ssh, c->self)) != 0 || (r = sshpkt_put_u32(ssh, c->local_window)) != 0 || - (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0) { - fatal("%s: channel %i: confirm: %s", __func__, - c->self, ssh_err(r)); - } + (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0) + fatal_fr(r, "channel %i; confirm", c->self); return c; } @@ -4643,8 +4557,8 @@ x11_create_display_inet(struct ssh *ssh, int x11_display_offset, if (x11_use_localhost) set_reuseaddr(sock); if (bind(sock, ai->ai_addr, ai->ai_addrlen) == -1) { - debug2("%s: bind port %d: %.100s", __func__, - port, strerror(errno)); + debug2_f("bind port %d: %.100s", port, + strerror(errno)); close(sock); for (n = 0; n < num_socks; n++) close(socks[n]); @@ -4902,9 +4816,10 @@ x11_request_forwarding_with_spoofing(struct ssh *ssh, int client_session_id, /* Extract real authentication data. */ sc->x11_saved_data = xmalloc(data_len); for (i = 0; i < data_len; i++) { - if (sscanf(data + 2 * i, "%2x", &value) != 1) + if (sscanf(data + 2 * i, "%2x", &value) != 1) { fatal("x11_request_forwarding: bad " "authentication data: %.100s", data); + } sc->x11_saved_data[i] = value; } sc->x11_saved_data_len = data_len; @@ -4926,6 +4841,6 @@ x11_request_forwarding_with_spoofing(struct ssh *ssh, int client_session_id, (r = sshpkt_put_u32(ssh, screen_number)) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: send x11-req: %s", __func__, ssh_err(r)); + fatal_fr(r, "send x11-req"); free(new_data); } diff --git a/clientloop.c b/clientloop.c index 8cd6f710659c..f9b18fe0bc7f 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.353 2020/10/14 00:55:17 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.354 2020/10/18 11:32:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -233,13 +233,13 @@ set_control_persist_exit_time(struct ssh *ssh) } else if (channel_still_open(ssh)) { /* some client connections are still open */ if (control_persist_exit_time > 0) - debug2("%s: cancel scheduled exit", __func__); + debug2_f("cancel scheduled exit"); control_persist_exit_time = 0; } else if (control_persist_exit_time <= 0) { /* a client connection has recently closed */ control_persist_exit_time = monotime() + (time_t)options.control_persist_timeout; - debug2("%s: schedule exit in %d seconds", __func__, + debug2_f("schedule exit in %d seconds", options.control_persist_timeout); } /* else we are already counting down to the timeout */ @@ -307,7 +307,7 @@ client_x11_get_proto(struct ssh *ssh, const char *display, if ((r = snprintf(xdisplay, sizeof(xdisplay), "unix:%s", display + 10)) < 0 || (size_t)r >= sizeof(xdisplay)) { - error("%s: display name too long", __func__); + error_f("display name too long"); return -1; } display = xdisplay; @@ -322,15 +322,14 @@ client_x11_get_proto(struct ssh *ssh, const char *display, */ mktemp_proto(xauthdir, sizeof(xauthdir)); if (mkdtemp(xauthdir) == NULL) { - error("%s: mkdtemp: %s", - __func__, strerror(errno)); + error_f("mkdtemp: %s", strerror(errno)); return -1; } do_unlink = 1; if ((r = snprintf(xauthfile, sizeof(xauthfile), "%s/xauthfile", xauthdir)) < 0 || (size_t)r >= sizeof(xauthfile)) { - error("%s: xauthfile path too long", __func__); + error_f("xauthfile path too long"); rmdir(xauthdir); return -1; } @@ -356,7 +355,7 @@ client_x11_get_proto(struct ssh *ssh, const char *display, SSH_X11_PROTO, x11_timeout_real, _PATH_DEVNULL); } - debug2("%s: xauth command: %s", __func__, cmd); + debug2_f("xauth command: %s", cmd); if (timeout != 0 && x11_refuse_time == 0) { now = monotime() + 1; @@ -445,7 +444,7 @@ client_check_window_change(struct ssh *ssh) if (!received_window_change_signal) return; received_window_change_signal = 0; - debug2("%s: changed", __func__); + debug2_f("changed"); channel_send_window_changes(ssh); } @@ -487,7 +486,7 @@ server_alive_check(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, "keepalive@openssh.com")) != 0 || (r = sshpkt_put_u8(ssh, 1)) != 0 || /* boolean: want reply */ (r = sshpkt_send(ssh)) != 0) - fatal("%s: send packet: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); /* Insert an empty placeholder to maintain ordering */ client_register_global_confirm(NULL, NULL); schedule_server_alive_check(); @@ -569,7 +568,7 @@ client_wait_until_can_do_something(struct ssh *ssh, /* Note: we might still have data in the buffers. */ if ((r = sshbuf_putf(stderr_buffer, "select: %s\r\n", strerror(errno))) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); quit_pending = 1; } else if (options.server_alive_interval > 0 && !FD_ISSET(connection_in, *readsetp) && monotime() >= server_alive_time) @@ -629,8 +628,7 @@ client_process_net_input(struct ssh *ssh, fd_set *readset) if ((r = sshbuf_putf(stderr_buffer, "Connection to %.300s closed by remote host.\r\n", host)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); quit_pending = 1; return; } @@ -650,8 +648,7 @@ client_process_net_input(struct ssh *ssh, fd_set *readset) if ((r = sshbuf_putf(stderr_buffer, "Read from remote host %.300s: %.100s\r\n", host, strerror(errno))) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); quit_pending = 1; return; } @@ -701,8 +698,7 @@ client_status_confirm(struct ssh *ssh, int type, Channel *c, void *ctx) if (tochan) { if ((r = sshbuf_put(c->extended, errmsg, strlen(errmsg))) != 0) - fatal("%s: buffer error %s", __func__, - ssh_err(r)); + fatal_fr(r, "sshbuf_put"); } else error("%s", errmsg); if (cr->action == CONFIRM_TTY) { @@ -750,8 +746,8 @@ client_register_global_confirm(global_confirm_cb *cb, void *ctx) last_gc = TAILQ_LAST(&global_confirms, global_confirms); if (last_gc && last_gc->cb == cb && last_gc->ctx == ctx) { if (++last_gc->ref_count >= INT_MAX) - fatal("%s: last_gc->ref_count = %d", - __func__, last_gc->ref_count); + fatal_f("last_gc->ref_count = %d", + last_gc->ref_count); return; } @@ -914,7 +910,7 @@ print_escape_help(struct sshbuf *b, int escape_char, int mux_client, if ((r = sshbuf_putf(b, "%c?\r\nSupported escape sequences:\r\n", escape_char)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); suppress_flags = (mux_client ? SUPPRESS_MUXCLIENT : 0) | @@ -926,14 +922,14 @@ print_escape_help(struct sshbuf *b, int escape_char, int mux_client, continue; if ((r = sshbuf_putf(b, " %c%-3s - %s\r\n", escape_char, esc_txt[i].cmd, esc_txt[i].text)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); } if ((r = sshbuf_putf(b, " %c%c - send the escape character by typing it twice\r\n" "(Note that escapes are only recognized immediately after " "newline.)\r\n", escape_char, escape_char)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); } /* @@ -973,8 +969,7 @@ process_escapes(struct ssh *ssh, Channel *c, /* Terminate the connection. */ if ((r = sshbuf_putf(berr, "%c.\r\n", efc->escape_char)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); if (c && c->ctl_chan != -1) { chan_read_failed(ssh, c); chan_write_failed(ssh, c); @@ -1003,16 +998,14 @@ process_escapes(struct ssh *ssh, Channel *c, "%c%s escape not available to " "multiplexed sessions\r\n", efc->escape_char, b)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); continue; } /* Suspend the program. Inform the user */ if ((r = sshbuf_putf(berr, "%c^Z [suspend ssh]\r\n", efc->escape_char)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); /* Restore terminal modes and suspend. */ client_suspend_self(bin, bout, berr); @@ -1023,13 +1016,11 @@ process_escapes(struct ssh *ssh, Channel *c, case 'B': if ((r = sshbuf_putf(berr, "%cB\r\n", efc->escape_char)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); channel_request_start(ssh, c->self, "break", 0); if ((r = sshpkt_put_u32(ssh, 1000)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: send packet: %s", __func__, - ssh_err(r)); + fatal_fr(r, "send packet"); continue; case 'R': @@ -1049,8 +1040,7 @@ process_escapes(struct ssh *ssh, Channel *c, if ((r = sshbuf_putf(berr, "%c%c [Logging to syslog]\r\n", efc->escape_char, ch)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); continue; } if (ch == 'V' && options.log_level > @@ -1063,8 +1053,7 @@ process_escapes(struct ssh *ssh, Channel *c, "%c%c [LogLevel %s]\r\n", efc->escape_char, ch, log_level_name(options.log_level))) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); continue; case '&': @@ -1082,11 +1071,9 @@ process_escapes(struct ssh *ssh, Channel *c, /* Stop listening for new connections. */ channel_stop_listening(ssh); - if ((r = sshbuf_putf(berr, - "%c& [backgrounded]\n", efc->escape_char)) - != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + if ((r = sshbuf_putf(berr, "%c& " + "[backgrounded]\n", efc->escape_char)) != 0) + fatal_fr(r, "sshbuf_putf"); /* Fork into background. */ pid = fork(); @@ -1101,8 +1088,7 @@ process_escapes(struct ssh *ssh, Channel *c, /* The child continues serving connections. */ /* fake EOF on stdin */ if ((r = sshbuf_put_u8(bin, 4)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put_u8"); return -1; case '?': print_escape_help(berr, efc->escape_char, @@ -1113,12 +1099,10 @@ process_escapes(struct ssh *ssh, Channel *c, case '#': if ((r = sshbuf_putf(berr, "%c#\r\n", efc->escape_char)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); s = channel_open_message(ssh); if ((r = sshbuf_put(berr, s, strlen(s))) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put"); free(s); continue; @@ -1132,8 +1116,7 @@ process_escapes(struct ssh *ssh, Channel *c, if (ch != efc->escape_char) { if ((r = sshbuf_put_u8(bin, efc->escape_char)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put_u8"); bytes++; } /* Escaped characters fall through here */ @@ -1160,7 +1143,7 @@ process_escapes(struct ssh *ssh, Channel *c, */ last_was_cr = (ch == '\r' || ch == '\n'); if ((r = sshbuf_put_u8(bin, ch)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put_u8"); bytes++; } return bytes; @@ -1246,30 +1229,30 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, debug("pledge: id"); if (pledge("stdio rpath wpath cpath unix inet dns recvfd sendfd proc exec id tty", NULL) == -1) - fatal("%s pledge(): %s", __func__, strerror(errno)); + fatal_f("pledge(): %s", strerror(errno)); } else if (options.forward_x11 || options.permit_local_command) { debug("pledge: exec"); if (pledge("stdio rpath wpath cpath unix inet dns proc exec tty", NULL) == -1) - fatal("%s pledge(): %s", __func__, strerror(errno)); + fatal_f("pledge(): %s", strerror(errno)); } else if (options.update_hostkeys) { debug("pledge: filesystem full"); if (pledge("stdio rpath wpath cpath unix inet dns proc tty", NULL) == -1) - fatal("%s pledge(): %s", __func__, strerror(errno)); + fatal_f("pledge(): %s", strerror(errno)); } else if (!option_clear_or_none(options.proxy_command) || fork_after_authentication_flag) { debug("pledge: proc"); if (pledge("stdio cpath unix inet dns proc tty", NULL) == -1) - fatal("%s pledge(): %s", __func__, strerror(errno)); + fatal_f("pledge(): %s", strerror(errno)); } else { debug("pledge: network"); if (pledge("stdio unix inet dns proc tty", NULL) == -1) - fatal("%s pledge(): %s", __func__, strerror(errno)); + fatal_f("pledge(): %s", strerror(errno)); } start_time = monotime_double(); @@ -1285,7 +1268,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, /* Initialize buffer. */ if ((stderr_buffer = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); client_init_dispatch(ssh); @@ -1336,8 +1319,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, /* manual rekey request */ debug("need rekeying"); if ((r = kex_start_rekex(ssh)) != 0) - fatal("%s: kex_start_rekex: %s", __func__, - ssh_err(r)); + fatal_fr(r, "kex_start_rekex"); need_rekeying = 0; } else { /* @@ -1414,7 +1396,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, (r = sshpkt_put_cstring(ssh, "")) != 0 || /* language tag */ (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: send disconnect: %s", __func__, ssh_err(r)); + fatal_fr(r, "send disconnect"); channel_free_all(ssh); @@ -1451,7 +1433,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, if (have_pty && options.log_level != SYSLOG_LEVEL_QUIET) { if ((r = sshbuf_putf(stderr_buffer, "Connection to %.64s closed.\r\n", host)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); } /* Output any buffered data for stderr. */ @@ -1462,7 +1444,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, if (len < 0 || (u_int)len != sshbuf_len(stderr_buffer)) error("Write failed flushing stderr buffer."); else if ((r = sshbuf_consume(stderr_buffer, len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_consume"); } /* Clear and free any buffers. */ @@ -1499,15 +1481,15 @@ client_request_forwarded_tcpip(struct ssh *ssh, const char *request_type, (r = sshpkt_get_cstring(ssh, &originator_address, NULL)) != 0 || (r = sshpkt_get_u32(ssh, &originator_port)) != 0 || (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: parse packet: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); - debug("%s: listen %s port %d, originator %s port %d", __func__, + debug_f("listen %s port %d, originator %s port %d", listen_address, listen_port, originator_address, originator_port); if (listen_port > 0xffff) - error("%s: invalid listen port", __func__); + error_f("invalid listen port"); else if (originator_port > 0xffff) - error("%s: invalid originator port", __func__); + error_f("invalid originator port"); else { c = channel_connect_by_listen_address(ssh, listen_address, listen_port, "forwarded-tcpip", @@ -1516,7 +1498,7 @@ client_request_forwarded_tcpip(struct ssh *ssh, const char *request_type, if (c != NULL && c->type == SSH_CHANNEL_MUX_CLIENT) { if ((b = sshbuf_new()) == NULL) { - error("%s: alloc reply", __func__); + error_f("alloc reply"); goto out; } /* reconstruct and send to muxclient */ @@ -1531,8 +1513,7 @@ client_request_forwarded_tcpip(struct ssh *ssh, const char *request_type, (r = sshbuf_put_cstring(b, originator_address)) != 0 || (r = sshbuf_put_u32(b, originator_port)) != 0 || (r = sshbuf_put_stringb(c->output, b)) != 0) { - error("%s: compose for muxclient %s", __func__, - ssh_err(r)); + error_fr(r, "compose for muxclient"); goto out; } } @@ -1556,9 +1537,9 @@ client_request_forwarded_streamlocal(struct ssh *ssh, if ((r = sshpkt_get_cstring(ssh, &listen_path, NULL)) != 0 || (r = sshpkt_get_string(ssh, NULL, NULL)) != 0 || /* reserved */ (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: parse packet: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); - debug("%s: request: %s", __func__, listen_path); + debug_f("request: %s", listen_path); c = channel_connect_by_listen_path(ssh, listen_path, "forwarded-streamlocal@openssh.com", "forwarded-streamlocal"); @@ -1588,7 +1569,7 @@ client_request_x11(struct ssh *ssh, const char *request_type, int rchan) if ((r = sshpkt_get_cstring(ssh, &originator, NULL)) != 0 || (r = sshpkt_get_u32(ssh, &originator_port)) != 0 || (r = sshpkt_get_end(ssh)) != 0) - fatal("%s: parse packet: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); /* XXX check permission */ /* XXX range check originator port? */ debug("client_request_x11: request from %s %u", originator, @@ -1623,8 +1604,7 @@ client_request_agent(struct ssh *ssh, const char *request_type, int rchan) } if (r != 0) { if (r != SSH_ERR_AGENT_NOT_PRESENT) - debug("%s: ssh_get_authentication_socket: %s", - __func__, ssh_err(r)); + debug_fr(r, "ssh_get_authentication_socket"); return NULL; } c = channel_new(ssh, "authentication agent connection", @@ -1785,16 +1765,15 @@ client_input_channel_req(int type, u_int32_t seq, struct ssh *ssh) exit_status = exitval; } else { /* Probably for a mux channel that has already closed */ - debug("%s: no sink for exit-status on channel %d", - __func__, id); + debug_f("no sink for exit-status on channel %d", + id); } if ((r = sshpkt_get_end(ssh)) != 0) goto out; } if (reply && c != NULL && !(c->flags & CHAN_CLOSE_SENT)) { if (!c->have_remote_id) - fatal("%s: channel %d: no remote_id", - __func__, c->self); + fatal_f("channel %d: no remote_id", c->self); if ((r = sshpkt_start(ssh, success ? SSH2_MSG_CHANNEL_SUCCESS : SSH2_MSG_CHANNEL_FAILURE)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || @@ -1895,8 +1874,8 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) for (i = 0; i < ctx->nkeys; i++) { if (sshkey_equal(l->key, ctx->keys[i])) { ctx->other_name_seen = 1; - debug3("%s: found %s key under different " - "name/addr at %s:%ld", __func__, + debug3_f("found %s key under different " + "name/addr at %s:%ld", sshkey_ssh_name(ctx->keys[i]), l->path, l->linenum); return 0; @@ -1907,8 +1886,8 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) /* Don't proceed if revocation or CA markers are present */ /* XXX relax this */ if (l->marker != MRK_NONE) { - debug3("%s: hostkeys file %s:%ld has CA/revocation marker", - __func__, l->path, l->linenum); + debug3_f("hostkeys file %s:%ld has CA/revocation marker", + l->path, l->linenum); ctx->complex_hostspec = 1; return 0; } @@ -1917,8 +1896,8 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) if (ctx->ip_str != NULL && (l->match & HKF_MATCH_HOST) == 0 && strchr(l->hosts, ',') != NULL) { ctx->other_name_seen = 1; - debug3("%s: found address %s against different hostname at " - "%s:%ld", __func__, ctx->ip_str, l->path, l->linenum); + debug3_f("found address %s against different hostname at " + "%s:%ld", ctx->ip_str, l->path, l->linenum); return 0; } @@ -1927,8 +1906,8 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) * that contain more than two entries (ssh never writes these). */ if (hostspec_is_complex(l->hosts)) { - debug3("%s: hostkeys file %s:%ld complex host specification", - __func__, l->path, l->linenum); + debug3_f("hostkeys file %s:%ld complex host specification", + l->path, l->linenum); ctx->complex_hostspec = 1; return 0; } @@ -1937,18 +1916,17 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) for (i = 0; i < ctx->nkeys; i++) { if (!sshkey_equal(l->key, ctx->keys[i])) continue; - debug3("%s: found %s key at %s:%ld", __func__, + debug3_f("found %s key at %s:%ld", sshkey_ssh_name(ctx->keys[i]), l->path, l->linenum); ctx->keys_match[i] |= l->match; return 0; } /* This line contained a key that not offered by the server */ - debug3("%s: deprecated %s key at %s:%ld", __func__, - sshkey_ssh_name(l->key), l->path, l->linenum); + debug3_f("deprecated %s key at %s:%ld", sshkey_ssh_name(l->key), + l->path, l->linenum); if ((tmp = recallocarray(ctx->old_keys, ctx->nold, ctx->nold + 1, sizeof(*ctx->old_keys))) == NULL) - fatal("%s: recallocarray failed nold = %zu", - __func__, ctx->nold); + fatal_f("recallocarray failed nold = %zu", ctx->nold); ctx->old_keys = tmp; ctx->old_keys[ctx->nold++] = l->key; l->key = NULL; @@ -1972,7 +1950,7 @@ hostkeys_check_old(struct hostkey_foreach_line *l, void *_ctx) for (i = 0; i < ctx->nold; i++) { if (!sshkey_equal(l->key, ctx->old_keys[i])) continue; - debug3("%s: found deprecated %s key at %s:%ld as %s", __func__, + debug3_f("found deprecated %s key at %s:%ld as %s", sshkey_ssh_name(ctx->keys[i]), l->path, l->linenum, hashed ? "[HASHED]" : l->hosts); ctx->old_key_seen = 1; @@ -1992,21 +1970,21 @@ check_old_keys_othernames(struct hostkeys_update_ctx *ctx) size_t i; int r; - debug2("%s: checking for %zu deprecated keys", __func__, ctx->nold); + debug2_f("checking for %zu deprecated keys", ctx->nold); for (i = 0; i < options.num_user_hostfiles; i++) { - debug3("%s: searching %s for %s / %s", __func__, + debug3_f("searching %s for %s / %s", options.user_hostfiles[i], ctx->host_str, ctx->ip_str ? ctx->ip_str : "(none)"); if ((r = hostkeys_foreach(options.user_hostfiles[i], hostkeys_check_old, ctx, ctx->host_str, ctx->ip_str, HKF_WANT_PARSE_KEY)) != 0) { if (r == SSH_ERR_SYSTEM_ERROR && errno == ENOENT) { - debug("%s: hostkeys file %s does not exist", - __func__, options.user_hostfiles[i]); + debug_f("hostkeys file %s does not exist", + options.user_hostfiles[i]); continue; } - error("%s: hostkeys_foreach failed for %s: %s", - __func__, options.user_hostfiles[i], ssh_err(r)); + error_fr(r, "hostkeys_foreach failed for %s", + options.user_hostfiles[i]); return -1; } } @@ -2036,7 +2014,7 @@ update_known_hosts(struct hostkeys_update_ctx *ctx) continue; if ((fp = sshkey_fingerprint(ctx->keys[i], options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint failed", __func__); + fatal_f("sshkey_fingerprint failed"); if (first && asking) hostkey_change_preamble(loglevel); do_log2(loglevel, "Learned new hostkey: %s %s", @@ -2047,7 +2025,7 @@ update_known_hosts(struct hostkeys_update_ctx *ctx) for (i = 0; i < ctx->nold; i++) { if ((fp = sshkey_fingerprint(ctx->old_keys[i], options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint failed", __func__); + fatal_f("sshkey_fingerprint failed"); if (first && asking) hostkey_change_preamble(loglevel); do_log2(loglevel, "Deprecating obsolete hostkey: %s %s", @@ -2096,11 +2074,12 @@ update_known_hosts(struct hostkeys_update_ctx *ctx) */ if (stat(options.user_hostfiles[i], &sb) != 0) { if (errno == ENOENT) { - debug("%s: known hosts file %s does not exist", - __func__, strerror(errno)); + debug_f("known hosts file %s does not " + "exist", options.user_hostfiles[i]); } else { - error("%s: known hosts file %s inaccessible", - __func__, strerror(errno)); + error_f("known hosts file %s " + "inaccessible: %s", + options.user_hostfiles[i], strerror(errno)); } continue; } @@ -2109,8 +2088,8 @@ update_known_hosts(struct hostkeys_update_ctx *ctx) i == 0 ? ctx->keys : NULL, i == 0 ? ctx->nkeys : 0, options.hash_known_hosts, 0, options.fingerprint_hash)) != 0) { - error("%s: hostfile_replace_entries failed for %s: %s", - __func__, options.user_hostfiles[i], ssh_err(r)); + error_fr(r, "hostfile_replace_entries failed for %s", + options.user_hostfiles[i]); } } } @@ -2127,7 +2106,7 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, size_t siglen; if (ctx->nnew == 0) - fatal("%s: ctx->nnew == 0", __func__); /* sanity */ + fatal_f("ctx->nnew == 0"); /* sanity */ if (type != SSH2_MSG_REQUEST_SUCCESS) { error("Server failed to confirm ownership of " "private host keys"); @@ -2138,10 +2117,10 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, sshkey_type_from_name(ssh->kex->hostkey_alg)); if ((signdata = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); /* Don't want to accidentally accept an unbound signature */ if (ssh->kex->session_id_len == 0) - fatal("%s: ssh->kex->session_id_len == 0", __func__); + fatal_f("ssh->kex->session_id_len == 0"); /* * Expect a signature for each of the ctx->nnew private keys we * haven't seen before. They will be in the same order as the @@ -2157,12 +2136,10 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, (r = sshbuf_put_string(signdata, ssh->kex->session_id, ssh->kex->session_id_len)) != 0 || (r = sshkey_puts(ctx->keys[i], signdata)) != 0) - fatal("%s: failed to prepare signature: %s", - __func__, ssh_err(r)); + fatal_fr(r, "compose signdata"); /* Extract and verify signature */ if ((r = sshpkt_get_string_direct(ssh, &sig, &siglen)) != 0) { - error("%s: couldn't parse message: %s", - __func__, ssh_err(r)); + error_fr(r, "parse sig"); goto out; } /* @@ -2175,19 +2152,19 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, sshbuf_ptr(signdata), sshbuf_len(signdata), use_kexsigtype ? ssh->kex->hostkey_alg : NULL, 0, NULL)) != 0) { - error("%s: server gave bad signature for %s key %zu", - __func__, sshkey_type(ctx->keys[i]), i); + error_f("server gave bad signature for %s key %zu", + sshkey_type(ctx->keys[i]), i); goto out; } /* Key is good. Mark it as 'seen' */ ctx->keys_verified[i] = 1; ndone++; } + /* Shouldn't happen */ if (ndone != ctx->nnew) - fatal("%s: ndone != ctx->nnew (%zu / %zu)", __func__, - ndone, ctx->nnew); /* Shouldn't happen */ + fatal_f("ndone != ctx->nnew (%zu / %zu)", ndone, ctx->nnew); if ((r = sshpkt_get_end(ssh)) != 0) { - error("%s: protocol error", __func__); + error_f("protocol error"); goto out; } @@ -2236,7 +2213,7 @@ client_input_hostkeys(struct ssh *ssh) u_int want; if (hostkeys_seen) - fatal("%s: server already sent hostkeys", __func__); + fatal_f("server already sent hostkeys"); if (options.update_hostkeys == SSH_UPDATE_HOSTKEYS_ASK && options.batch_mode) return 1; /* won't ask in batchmode, so don't even try */ @@ -2248,53 +2225,51 @@ client_input_hostkeys(struct ssh *ssh) sshkey_free(key); key = NULL; if ((r = sshpkt_get_string_direct(ssh, &blob, &len)) != 0) { - error("%s: couldn't parse message: %s", - __func__, ssh_err(r)); + error_fr(r, "parse key"); goto out; } if ((r = sshkey_from_blob(blob, len, &key)) != 0) { - do_log2(r == SSH_ERR_KEY_TYPE_UNKNOWN ? + do_log2_fr(r, r == SSH_ERR_KEY_TYPE_UNKNOWN ? SYSLOG_LEVEL_DEBUG1 : SYSLOG_LEVEL_ERROR, - "%s: parse key: %s", __func__, ssh_err(r)); + "convert key"); continue; } fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT); - debug3("%s: received %s key %s", __func__, - sshkey_type(key), fp); + debug3_f("received %s key %s", sshkey_type(key), fp); free(fp); if (!key_accepted_by_hostkeyalgs(key)) { - debug3("%s: %s key not permitted by HostkeyAlgorithms", - __func__, sshkey_ssh_name(key)); + debug3_f("%s key not permitted by " + "HostkeyAlgorithms", sshkey_ssh_name(key)); continue; } /* Skip certs */ if (sshkey_is_cert(key)) { - debug3("%s: %s key is a certificate; skipping", - __func__, sshkey_ssh_name(key)); + debug3_f("%s key is a certificate; skipping", + sshkey_ssh_name(key)); continue; } /* Ensure keys are unique */ for (i = 0; i < ctx->nkeys; i++) { if (sshkey_equal(key, ctx->keys[i])) { - error("%s: received duplicated %s host key", - __func__, sshkey_ssh_name(key)); + error_f("received duplicated %s host key", + sshkey_ssh_name(key)); goto out; } } /* Key is good, record it */ if ((tmp = recallocarray(ctx->keys, ctx->nkeys, ctx->nkeys + 1, sizeof(*ctx->keys))) == NULL) - fatal("%s: recallocarray failed nkeys = %zu", - __func__, ctx->nkeys); + fatal_f("recallocarray failed nkeys = %zu", + ctx->nkeys); ctx->keys = tmp; ctx->keys[ctx->nkeys++] = key; key = NULL; } if (ctx->nkeys == 0) { - debug("%s: server sent no hostkeys", __func__); + debug_f("server sent no hostkeys"); goto out; } @@ -2302,7 +2277,7 @@ client_input_hostkeys(struct ssh *ssh) sizeof(*ctx->keys_match))) == NULL || (ctx->keys_verified = calloc(ctx->nkeys, sizeof(*ctx->keys_verified))) == NULL) - fatal("%s: calloc failed", __func__); + fatal_f("calloc failed"); get_hostfile_hostname_ipaddr(host, options.check_host_ip ? (struct sockaddr *)&hostaddr : NULL, @@ -2311,19 +2286,19 @@ client_input_hostkeys(struct ssh *ssh) /* Find which keys we already know about. */ for (i = 0; i < options.num_user_hostfiles; i++) { - debug("%s: searching %s for %s / %s", __func__, + debug_f("searching %s for %s / %s", options.user_hostfiles[i], ctx->host_str, ctx->ip_str ? ctx->ip_str : "(none)"); if ((r = hostkeys_foreach(options.user_hostfiles[i], hostkeys_find, ctx, ctx->host_str, ctx->ip_str, HKF_WANT_PARSE_KEY|HKF_WANT_MATCH)) != 0) { if (r == SSH_ERR_SYSTEM_ERROR && errno == ENOENT) { - debug("%s: hostkeys file %s does not exist", - __func__, options.user_hostfiles[i]); + debug_f("hostkeys file %s does not exist", + options.user_hostfiles[i]); continue; } - error("%s: hostkeys_foreach failed for %s: %s", - __func__, options.user_hostfiles[i], ssh_err(r)); + error_fr(r, "hostkeys_foreach failed for %s", + options.user_hostfiles[i]); goto out; } } @@ -2338,26 +2313,25 @@ client_input_hostkeys(struct ssh *ssh) ctx->nincomplete++; } - debug3("%s: %zu server keys: %zu new, %zu retained, " - "%zu incomplete match. %zu to remove", __func__, ctx->nkeys, - ctx->nnew, ctx->nkeys - ctx->nnew - ctx->nincomplete, + debug3_f("%zu server keys: %zu new, %zu retained, " + "%zu incomplete match. %zu to remove", ctx->nkeys, ctx->nnew, + ctx->nkeys - ctx->nnew - ctx->nincomplete, ctx->nincomplete, ctx->nold); if (ctx->nnew == 0 && ctx->nold == 0) { - debug("%s: no new or deprecated keys from server", __func__); + debug_f("no new or deprecated keys from server"); goto out; } /* Various reasons why we cannot proceed with the update */ if (ctx->complex_hostspec) { - debug("%s: CA/revocation marker, manual host list or wildcard " - "host pattern found, skipping UserKnownHostsFile update", - __func__); + debug_f("CA/revocation marker, manual host list or wildcard " + "host pattern found, skipping UserKnownHostsFile update"); goto out; } if (ctx->other_name_seen) { - debug("%s: host key found matching a different name/address, " - "skipping UserKnownHostsFile update", __func__); + debug_f("host key found matching a different name/address, " + "skipping UserKnownHostsFile update"); goto out; } /* @@ -2371,8 +2345,8 @@ client_input_hostkeys(struct ssh *ssh) if (check_old_keys_othernames(ctx) != 0) goto out; /* error already logged */ if (ctx->old_key_seen) { - debug("%s: key(s) for %s%s%s exist under other names; " - "skipping UserKnownHostsFile update", __func__, + debug_f("key(s) for %s%s%s exist under other names; " + "skipping UserKnownHostsFile update", ctx->host_str, ctx->ip_str == NULL ? "" : ",", ctx->ip_str == NULL ? "" : ctx->ip_str); goto out; @@ -2392,27 +2366,24 @@ client_input_hostkeys(struct ssh *ssh) * We have received previously-unseen keys from the server. * Ask the server to confirm ownership of the private halves. */ - debug3("%s: asking server to prove ownership for %zu keys", - __func__, ctx->nnew); + debug3_f("asking server to prove ownership for %zu keys", ctx->nnew); if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || (r = sshpkt_put_cstring(ssh, "hostkeys-prove-00@openssh.com")) != 0 || (r = sshpkt_put_u8(ssh, 1)) != 0) /* bool: want reply */ - fatal("%s: prepare hostkeys-prove: %s", __func__, ssh_err(r)); + fatal_fr(r, "prepare hostkeys-prove"); if ((buf = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); for (i = 0; i < ctx->nkeys; i++) { if (ctx->keys_match[i]) continue; sshbuf_reset(buf); if ((r = sshkey_putb(ctx->keys[i], buf)) != 0 || - (r = sshpkt_put_stringb(ssh, buf)) != 0) { - fatal("%s: assemble hostkeys-prove: %s", - __func__, ssh_err(r)); - } + (r = sshpkt_put_stringb(ssh, buf)) != 0) + fatal_fr(r, "assemble hostkeys-prove"); } if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: sshpkt_send: %s", __func__, ssh_err(r)); + fatal_fr(r, "send hostkeys-prove"); client_register_global_confirm( client_global_hostkeys_private_confirm, ctx); ctx = NULL; /* will be freed in callback */ @@ -2456,6 +2427,19 @@ client_input_global_request(int type, u_int32_t seq, struct ssh *ssh) return r; } +static void +client_send_env(struct ssh *ssh, int id, const char *name, const char *val) +{ + int r; + + debug("channel %d: setting env %s = \"%s\"", id, name, val); + channel_request_start(ssh, id, "env", 0); + if ((r = sshpkt_put_cstring(ssh, name)) != 0 || + (r = sshpkt_put_cstring(ssh, val)) != 0 || + (r = sshpkt_send(ssh)) != 0) + fatal_fr(r, "send setenv"); +} + void client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem, const char *term, struct termios *tiop, int in_fd, struct sshbuf *cmd, @@ -2465,10 +2449,10 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem, char *name, *val; Channel *c = NULL; - debug2("%s: id %d", __func__, id); + debug2_f("id %d", id); if ((c = channel_lookup(ssh, id)) == NULL) - fatal("%s: channel %d: unknown channel", __func__, id); + fatal_f("channel %d: unknown channel", id); ssh_packet_set_interactive(ssh, want_tty, options.ip_qos_interactive, options.ip_qos_bulk); @@ -2488,12 +2472,12 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem, (r = sshpkt_put_u32(ssh, (u_int)ws.ws_row)) != 0 || (r = sshpkt_put_u32(ssh, (u_int)ws.ws_xpixel)) != 0 || (r = sshpkt_put_u32(ssh, (u_int)ws.ws_ypixel)) != 0) - fatal("%s: build packet: %s", __func__, ssh_err(r)); + fatal_fr(r, "build pty-req"); if (tiop == NULL) tiop = get_saved_tio(); ssh_tty_make_modes(ssh, -1, tiop); if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: send packet: %s", __func__, ssh_err(r)); + fatal_fr(r, "send pty-req"); /* XXX wait for reply */ c->client_tty = 1; } @@ -2522,15 +2506,7 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem, free(name); continue; } - - debug("Sending env %s = %s", name, val); - channel_request_start(ssh, id, "env", 0); - if ((r = sshpkt_put_cstring(ssh, name)) != 0 || - (r = sshpkt_put_cstring(ssh, val)) != 0 || - (r = sshpkt_send(ssh)) != 0) { - fatal("%s: send packet: %s", - __func__, ssh_err(r)); - } + client_send_env(ssh, id, name, val); free(name); } } @@ -2542,13 +2518,7 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem, continue; } *val++ = '\0'; - - debug("Setting env %s = %s", name, val); - channel_request_start(ssh, id, "env", 0); - if ((r = sshpkt_put_cstring(ssh, name)) != 0 || - (r = sshpkt_put_cstring(ssh, val)) != 0 || - (r = sshpkt_send(ssh)) != 0) - fatal("%s: send packet: %s", __func__, ssh_err(r)); + client_send_env(ssh, id, name, val); free(name); } @@ -2570,14 +2540,12 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem, } if ((r = sshpkt_put_stringb(ssh, cmd)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: send command: %s", __func__, ssh_err(r)); + fatal_fr(r, "send command"); } else { channel_request_start(ssh, id, "shell", 1); client_expect_confirm(ssh, id, "shell", CONFIRM_CLOSE); - if ((r = sshpkt_send(ssh)) != 0) { - fatal("%s: send shell request: %s", - __func__, ssh_err(r)); - } + if ((r = sshpkt_send(ssh)) != 0) + fatal_fr(r, "send shell"); } } diff --git a/compat.c b/compat.c index dec8e7e93c55..a9d46e303ac3 100644 --- a/compat.c +++ b/compat.c @@ -1,4 +1,4 @@ -/* $OpenBSD: compat.c,v 1.115 2020/07/05 23:59:45 djm Exp $ */ +/* $OpenBSD: compat.c,v 1.116 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved. * @@ -162,10 +162,10 @@ compat_cipher_proposal(char *cipher_prop) { if (!(datafellows & SSH_BUG_BIGENDIANAES)) return cipher_prop; - debug2("%s: original cipher proposal: %s", __func__, cipher_prop); + debug2_f("original cipher proposal: %s", cipher_prop); if ((cipher_prop = match_filter_denylist(cipher_prop, "aes*")) == NULL) fatal("match_filter_denylist failed"); - debug2("%s: compat cipher proposal: %s", __func__, cipher_prop); + debug2_f("compat cipher proposal: %s", cipher_prop); if (*cipher_prop == '\0') fatal("No supported ciphers found"); return cipher_prop; @@ -176,10 +176,10 @@ compat_pkalg_proposal(char *pkalg_prop) { if (!(datafellows & SSH_BUG_RSASIGMD5)) return pkalg_prop; - debug2("%s: original public key proposal: %s", __func__, pkalg_prop); + debug2_f("original public key proposal: %s", pkalg_prop); if ((pkalg_prop = match_filter_denylist(pkalg_prop, "ssh-rsa")) == NULL) fatal("match_filter_denylist failed"); - debug2("%s: compat public key proposal: %s", __func__, pkalg_prop); + debug2_f("compat public key proposal: %s", pkalg_prop); if (*pkalg_prop == '\0') fatal("No supported PK algorithms found"); return pkalg_prop; @@ -190,7 +190,7 @@ compat_kex_proposal(char *p) { if ((datafellows & (SSH_BUG_CURVE25519PAD|SSH_OLD_DHGEX)) == 0) return p; - debug2("%s: original KEX proposal: %s", __func__, p); + debug2_f("original KEX proposal: %s", p); if ((datafellows & SSH_BUG_CURVE25519PAD) != 0) if ((p = match_filter_denylist(p, "curve25519-sha256@libssh.org")) == NULL) @@ -201,7 +201,7 @@ compat_kex_proposal(char *p) "diffie-hellman-group-exchange-sha1")) == NULL) fatal("match_filter_denylist failed"); } - debug2("%s: compat KEX proposal: %s", __func__, p); + debug2_f("compat KEX proposal: %s", p); if (*p == '\0') fatal("No supported key exchange algorithms found"); return p; diff --git a/dh.c b/dh.c index 7cb135d7d43d..b5bb35e48243 100644 --- a/dh.c +++ b/dh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dh.c,v 1.71 2019/09/06 06:08:11 djm Exp $ */ +/* $OpenBSD: dh.c,v 1.72 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Niels Provos. All rights reserved. * @@ -240,7 +240,7 @@ dh_pub_is_valid(const DH *dh, const BIGNUM *dh_pub) } if ((tmp = BN_new()) == NULL) { - error("%s: BN_new failed", __func__); + error_f("BN_new failed"); return 0; } if (!BN_sub(tmp, dh_p, BN_value_one()) || @@ -458,7 +458,7 @@ dh_new_group18(void) DH * dh_new_group_fallback(int max) { - debug3("%s: requested max size %d", __func__, max); + debug3_f("requested max size %d", max); if (max < 3072) { debug3("using 2k bit group 14"); return dh_new_group14(); diff --git a/dns.c b/dns.c index e4f9bf8307e7..91c6e9f044be 100644 --- a/dns.c +++ b/dns.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dns.c,v 1.38 2018/02/23 15:58:37 markus Exp $ */ +/* $OpenBSD: dns.c,v 1.39 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2003 Wesley Griffin. All rights reserved. @@ -128,8 +128,7 @@ dns_read_key(u_int8_t *algorithm, u_int8_t *digest_type, if (*algorithm && *digest_type) { if ((r = sshkey_fingerprint_raw(key, fp_alg, digest, digest_len)) != 0) - fatal("%s: sshkey_fingerprint_raw: %s", __func__, - ssh_err(r)); + fatal_fr(r, "sshkey_fingerprint_raw"); success = 1; } else { *digest = NULL; @@ -348,7 +347,7 @@ export_dns_rr(const char *hostname, struct sshkey *key, FILE *f, int generic) /* No SSHFP record was generated at all */ if (success == 0) { - error("%s: unsupported algorithm and/or digest_type", __func__); + error_f("unsupported algorithm and/or digest_type"); } return success; diff --git a/gss-genr.c b/gss-genr.c index d56257b4a9f7..84f242bc8d6f 100644 --- a/gss-genr.c +++ b/gss-genr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: gss-genr.c,v 1.26 2018/07/10 09:13:30 djm Exp $ */ +/* $OpenBSD: gss-genr.c,v 1.27 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2001-2007 Simon Wilkinson. All rights reserved. @@ -115,7 +115,7 @@ ssh_gssapi_last_error(Gssctxt *ctxt, OM_uint32 *major_status, int r; if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if (major_status != NULL) *major_status = ctxt->major; @@ -130,7 +130,7 @@ ssh_gssapi_last_error(Gssctxt *ctxt, OM_uint32 *major_status, if ((r = sshbuf_put(b, msg.value, msg.length)) != 0 || (r = sshbuf_put_u8(b, '\n')) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble GSS_CODE"); gss_release_buffer(&lmin, &msg); } while (ctx != 0); @@ -142,13 +142,13 @@ ssh_gssapi_last_error(Gssctxt *ctxt, OM_uint32 *major_status, if ((r = sshbuf_put(b, msg.value, msg.length)) != 0 || (r = sshbuf_put_u8(b, '\n')) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble MECH_CODE"); gss_release_buffer(&lmin, &msg); } while (ctx != 0); if ((r = sshbuf_put_u8(b, '\n')) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble newline"); ret = xstrdup((const char *)sshbuf_ptr(b)); sshbuf_free(b); return (ret); @@ -269,7 +269,7 @@ ssh_gssapi_buildmic(struct sshbuf *b, const char *user, const char *service, (r = sshbuf_put_cstring(b, user)) != 0 || (r = sshbuf_put_cstring(b, service)) != 0 || (r = sshbuf_put_cstring(b, context)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble buildmic"); } int diff --git a/hostfile.c b/hostfile.c index 373b9d8d06f4..4ec7b671147a 100644 --- a/hostfile.c +++ b/hostfile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.c,v 1.85 2020/10/11 22:13:37 djm Exp $ */ +/* $OpenBSD: hostfile.c,v 1.86 2020/10/18 11:32:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -141,12 +141,12 @@ host_hash(const char *host, const char *name_from_hostfile, u_int src_len) ssh_hmac_init(ctx, salt, len) < 0 || ssh_hmac_update(ctx, host, strlen(host)) < 0 || ssh_hmac_final(ctx, result, sizeof(result))) - fatal("%s: ssh_hmac failed", __func__); + fatal_f("ssh_hmac failed"); ssh_hmac_free(ctx); if (__b64_ntop(salt, len, uu_salt, sizeof(uu_salt)) == -1 || __b64_ntop(result, len, uu_result, sizeof(uu_result)) == -1) - fatal("%s: __b64_ntop failed", __func__); + fatal_f("__b64_ntop failed"); snprintf(encoded, sizeof(encoded), "%s%s%c%s", HASH_MAGIC, uu_salt, HASH_DELIM, uu_result); @@ -246,7 +246,7 @@ record_hostkey(struct hostkey_foreach_line *l, void *_ctx) return 0; } - debug3("%s: found %skey type %s in file %s:%lu", __func__, + debug3_f("found %skey type %s in file %s:%lu", l->marker == MRK_NONE ? "" : (l->marker == MRK_CA ? "ca " : "revoked "), sshkey_type(l->key), l->path, l->linenum); @@ -279,12 +279,10 @@ load_hostkeys(struct hostkeys *hostkeys, const char *host, const char *path) if ((r = hostkeys_foreach(path, record_hostkey, &ctx, host, NULL, HKF_WANT_MATCH|HKF_WANT_PARSE_KEY)) != 0) { if (r != SSH_ERR_SYSTEM_ERROR && errno != ENOENT) - debug("%s: hostkeys_foreach failed for %s: %s", - __func__, path, ssh_err(r)); + debug_fr(r, "hostkeys_foreach failed for %s", path); } if (ctx.num_loaded != 0) - debug3("%s: loaded %lu keys from %s", __func__, - ctx.num_loaded, host); + debug3_f("loaded %lu keys from %s", ctx.num_loaded, host); } void @@ -435,7 +433,7 @@ write_host_entry(FILE *f, const char *host, const char *ip, if (store_hash) { if ((hashed_host = host_hash(lhost, NULL, 0)) == NULL) { - error("%s: host_hash failed", __func__); + error_f("host_hash failed"); free(lhost); return 0; } @@ -449,7 +447,7 @@ write_host_entry(FILE *f, const char *host, const char *ip, if ((r = sshkey_write(key, f)) == 0) success = 1; else - error("%s: sshkey_write failed: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_write"); fputc('\n', f); /* If hashing is enabled, the IP address needs to go on its own line */ if (success && store_hash && ip != NULL) @@ -546,7 +544,7 @@ host_delete(struct hostkey_foreach_line *l, void *_ctx) continue; ctx->match_keys[i] |= l->match; fprintf(ctx->out, "%s\n", l->line); - debug3("%s: %s key already at %s:%ld", __func__, + debug3_f("%s key already at %s:%ld", sshkey_type(l->key), l->path, l->linenum); return 0; } @@ -608,14 +606,14 @@ hostfile_replace_entries(const char *filename, const char *host, const char *ip, if ((fd = mkstemp(temp)) == -1) { oerrno = errno; - error("%s: mkstemp: %s", __func__, strerror(oerrno)); + error_f("mkstemp: %s", strerror(oerrno)); r = SSH_ERR_SYSTEM_ERROR; goto fail; } if ((ctx.out = fdopen(fd, "w")) == NULL) { oerrno = errno; close(fd); - error("%s: fdopen: %s", __func__, strerror(oerrno)); + error_f("fdopen: %s", strerror(oerrno)); r = SSH_ERR_SYSTEM_ERROR; goto fail; } @@ -624,7 +622,7 @@ hostfile_replace_entries(const char *filename, const char *host, const char *ip, if ((r = hostkeys_foreach(filename, host_delete, &ctx, host, ip, HKF_WANT_PARSE_KEY)) != 0) { oerrno = errno; - error("%s: hostkeys_foreach failed: %s", __func__, ssh_err(r)); + error_fr(r, "hostkeys_foreach"); goto fail; } @@ -676,30 +674,28 @@ hostfile_replace_entries(const char *filename, const char *host, const char *ip, /* Backup the original file and replace it with the temporary */ if (unlink(back) == -1 && errno != ENOENT) { oerrno = errno; - error("%s: unlink %.100s: %s", __func__, - back, strerror(errno)); + error_f("unlink %.100s: %s", back, strerror(errno)); r = SSH_ERR_SYSTEM_ERROR; goto fail; } if (link(filename, back) == -1) { oerrno = errno; - error("%s: link %.100s to %.100s: %s", __func__, - filename, back, strerror(errno)); + error_f("link %.100s to %.100s: %s", filename, + back, strerror(errno)); r = SSH_ERR_SYSTEM_ERROR; goto fail; } if (rename(temp, filename) == -1) { oerrno = errno; - error("%s: rename \"%s\" to \"%s\": %s", __func__, - temp, filename, strerror(errno)); + error_f("rename \"%s\" to \"%s\": %s", temp, + filename, strerror(errno)); r = SSH_ERR_SYSTEM_ERROR; goto fail; } } else { /* No changes made; just delete the temporary file */ if (unlink(temp) != 0) - error("%s: unlink \"%s\": %s", __func__, - temp, strerror(errno)); + error_f("unlink \"%s\": %s", temp, strerror(errno)); } /* success */ @@ -756,7 +752,7 @@ hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, if ((f = fopen(path, "r")) == NULL) return SSH_ERR_SYSTEM_ERROR; - debug3("%s: reading file \"%s\"", __func__, path); + debug3_f("reading file \"%s\"", path); while (getline(&line, &linesize, f) != -1) { linenum++; line[strcspn(line, "\n")] = '\0'; @@ -784,8 +780,7 @@ hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, } if ((lineinfo.marker = check_markers(&cp)) == MRK_ERROR) { - verbose("%s: invalid marker at %s:%lu", - __func__, path, linenum); + verbose_f("invalid marker at %s:%lu", path, linenum); if ((options & HKF_WANT_MATCH) == 0) goto bad; continue; @@ -801,8 +796,8 @@ hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, if (host != NULL) { if ((s = match_maybe_hashed(host, lineinfo.hosts, &hashed)) == -1) { - debug2("%s: %s:%ld: bad host hash \"%.32s\"", - __func__, path, linenum, lineinfo.hosts); + debug2_f("%s:%ld: bad host hash \"%.32s\"", + path, linenum, lineinfo.hosts); goto bad; } if (s == 1) { @@ -814,9 +809,9 @@ hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, if (ip != NULL) { if ((s = match_maybe_hashed(ip, lineinfo.hosts, &hashed)) == -1) { - debug2("%s: %s:%ld: bad ip hash " - "\"%.32s\"", __func__, path, - linenum, lineinfo.hosts); + debug2_f("%s:%ld: bad ip hash " + "\"%.32s\"", path, linenum, + lineinfo.hosts); goto bad; } if (s == 1) { @@ -851,7 +846,7 @@ hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, * lines. */ if ((lineinfo.key = sshkey_new(KEY_UNSPEC)) == NULL) { - error("%s: sshkey_new failed", __func__); + error_f("sshkey_new failed"); r = SSH_ERR_ALLOC_FAIL; break; } diff --git a/kex.c b/kex.c index aecb9394d805..2cf3f73bb46e 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.159 2020/07/05 23:59:45 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.160 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -360,14 +360,13 @@ kex_buf2prop(struct sshbuf *raw, int *first_kex_follows, char ***propp) goto out; } if ((r = sshbuf_consume(b, KEX_COOKIE_LEN)) != 0) { /* skip cookie */ - error("%s: consume cookie: %s", __func__, ssh_err(r)); + error_fr(r, "consume cookie"); goto out; } /* extract kex init proposal strings */ for (i = 0; i < PROPOSAL_MAX; i++) { if ((r = sshbuf_get_cstring(b, &(proposal[i]), NULL)) != 0) { - error("%s: parse proposal %u: %s", __func__, - i, ssh_err(r)); + error_fr(r, "parse proposal %u", i); goto out; } debug2("%s: %s", proposal_names[i], proposal[i]); @@ -375,7 +374,7 @@ kex_buf2prop(struct sshbuf *raw, int *first_kex_follows, char ***propp) /* first kex follows / reserved */ if ((r = sshbuf_get_u8(b, &v)) != 0 || /* first_kex_follows */ (r = sshbuf_get_u32(b, &i)) != 0) { /* reserved */ - error("%s: parse: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto out; } if (first_kex_follows != NULL) @@ -439,7 +438,7 @@ kex_send_ext_info(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, "server-sig-algs")) != 0 || (r = sshpkt_put_cstring(ssh, algs)) != 0 || (r = sshpkt_send(ssh)) != 0) { - error("%s: compose: %s", __func__, ssh_err(r)); + error_fr(r, "compose"); goto out; } /* success */ @@ -491,14 +490,14 @@ kex_input_ext_info(int type, u_int32_t seq, struct ssh *ssh) if (strcmp(name, "server-sig-algs") == 0) { /* Ensure no \0 lurking in value */ if (memchr(val, '\0', vlen) != NULL) { - error("%s: nul byte in %s", __func__, name); + error_f("nul byte in %s", name); return SSH_ERR_INVALID_FORMAT; } - debug("%s: %s=<%s>", __func__, name, val); + debug_f("%s=<%s>", name, val); kex->server_sig_algs = val; val = NULL; } else - debug("%s: %s (unrecognised)", __func__, name); + debug_f("%s (unrecognised)", name); free(name); free(val); } @@ -536,7 +535,7 @@ kex_send_kexinit(struct ssh *ssh) int r; if (kex == NULL) { - error("%s: no hex", __func__); + error_f("no hex"); return SSH_ERR_INTERNAL_ERROR; } if (kex->flags & KEX_INIT_SENT) @@ -545,12 +544,12 @@ kex_send_kexinit(struct ssh *ssh) /* generate a random cookie */ if (sshbuf_len(kex->my) < KEX_COOKIE_LEN) { - error("%s: bad kex length: %zu < %d", __func__, + error_f("bad kex length: %zu < %d", sshbuf_len(kex->my), KEX_COOKIE_LEN); return SSH_ERR_INVALID_FORMAT; } if ((cookie = sshbuf_mutable_ptr(kex->my)) == NULL) { - error("%s: buffer error", __func__); + error_f("buffer error"); return SSH_ERR_INTERNAL_ERROR; } arc4random_buf(cookie, KEX_COOKIE_LEN); @@ -558,7 +557,7 @@ kex_send_kexinit(struct ssh *ssh) if ((r = sshpkt_start(ssh, SSH2_MSG_KEXINIT)) != 0 || (r = sshpkt_putb(ssh, kex->my)) != 0 || (r = sshpkt_send(ssh)) != 0) { - error("%s: compose reply: %s", __func__, ssh_err(r)); + error_fr(r, "compose reply"); return r; } debug("SSH2_MSG_KEXINIT sent"); @@ -578,7 +577,7 @@ kex_input_kexinit(int type, u_int32_t seq, struct ssh *ssh) debug("SSH2_MSG_KEXINIT received"); if (kex == NULL) { - error("%s: no hex", __func__); + error_f("no hex"); return SSH_ERR_INTERNAL_ERROR; } ssh_dispatch_set(ssh, SSH2_MSG_KEXINIT, NULL); @@ -589,13 +588,13 @@ kex_input_kexinit(int type, u_int32_t seq, struct ssh *ssh) /* discard packet */ for (i = 0; i < KEX_COOKIE_LEN; i++) { if ((r = sshpkt_get_u8(ssh, NULL)) != 0) { - error("%s: discard cookie: %s", __func__, ssh_err(r)); + error_fr(r, "discard cookie"); return r; } } for (i = 0; i < PROPOSAL_MAX; i++) { if ((r = sshpkt_get_string(ssh, NULL, NULL)) != 0) { - error("%s: discard proposal: %s", __func__, ssh_err(r)); + error_fr(r, "discard proposal"); return r; } } @@ -623,7 +622,7 @@ kex_input_kexinit(int type, u_int32_t seq, struct ssh *ssh) if (kex->kex_type < KEX_MAX && kex->kex[kex->kex_type] != NULL) return (kex->kex[kex->kex_type])(ssh); - error("%s: unknown kex type %u", __func__, kex->kex_type); + error_f("unknown kex type %u", kex->kex_type); return SSH_ERR_INTERNAL_ERROR; } @@ -739,11 +738,11 @@ int kex_start_rekex(struct ssh *ssh) { if (ssh->kex == NULL) { - error("%s: no kex", __func__); + error_f("no kex"); return SSH_ERR_INTERNAL_ERROR; } if (ssh->kex->done == 0) { - error("%s: requested twice", __func__); + error_f("requested twice"); return SSH_ERR_INTERNAL_ERROR; } ssh->kex->done = 0; @@ -758,7 +757,7 @@ choose_enc(struct sshenc *enc, char *client, char *server) if (name == NULL) return SSH_ERR_NO_CIPHER_ALG_MATCH; if ((enc->cipher = cipher_by_name(name)) == NULL) { - error("%s: unsupported cipher %s", __func__, name); + error_f("unsupported cipher %s", name); free(name); return SSH_ERR_INTERNAL_ERROR; } @@ -780,7 +779,7 @@ choose_mac(struct ssh *ssh, struct sshmac *mac, char *client, char *server) if (name == NULL) return SSH_ERR_NO_MAC_ALG_MATCH; if (mac_setup(mac, name) < 0) { - error("%s: unsupported MAC %s", __func__, name); + error_f("unsupported MAC %s", name); free(name); return SSH_ERR_INTERNAL_ERROR; } @@ -807,7 +806,7 @@ choose_comp(struct sshcomp *comp, char *client, char *server) if (strcmp(name, "none") == 0) { comp->type = COMP_NONE; } else { - error("%s: unsupported compression scheme %s", __func__, name); + error_f("unsupported compression scheme %s", name); free(name); return SSH_ERR_INTERNAL_ERROR; } @@ -826,7 +825,7 @@ choose_kex(struct kex *k, char *client, char *server) if (k->name == NULL) return SSH_ERR_NO_KEX_ALG_MATCH; if ((kexalg = kex_alg_by_name(k->name)) == NULL) { - error("%s: unsupported KEX method %s", __func__, k->name); + error_f("unsupported KEX method %s", k->name); return SSH_ERR_INTERNAL_ERROR; } k->kex_type = kexalg->type; @@ -846,8 +845,7 @@ choose_hostkeyalg(struct kex *k, char *client, char *server) return SSH_ERR_NO_HOSTKEY_ALG_MATCH; k->hostkey_type = sshkey_type_from_name(k->hostkey_alg); if (k->hostkey_type == KEY_UNSPEC) { - error("%s: unsupported hostkey algorithm %s", __func__, - k->hostkey_alg); + error_f("unsupported hostkey algorithm %s", k->hostkey_alg); return SSH_ERR_INTERNAL_ERROR; } k->hostkey_nid = sshkey_ecdsa_nid_from_name(k->hostkey_alg); @@ -1018,7 +1016,7 @@ derive_key(struct ssh *ssh, int id, u_int need, u_char *hash, u_int hashlen, kex->session_id_len) != 0 || ssh_digest_final(hashctx, digest, mdsz) != 0) { r = SSH_ERR_LIBCRYPTO_ERROR; - error("%s: KEX hash failed", __func__); + error_f("KEX hash failed"); goto out; } ssh_digest_free(hashctx); @@ -1035,7 +1033,7 @@ derive_key(struct ssh *ssh, int id, u_int need, u_char *hash, u_int hashlen, ssh_digest_update(hashctx, hash, hashlen) != 0 || ssh_digest_update(hashctx, digest, have) != 0 || ssh_digest_final(hashctx, digest + have, mdsz) != 0) { - error("%s: KDF failed", __func__); + error_f("KDF failed"); r = SSH_ERR_LIBCRYPTO_ERROR; goto out; } @@ -1100,7 +1098,7 @@ kex_load_hostkey(struct ssh *ssh, struct sshkey **prvp, struct sshkey **pubp) *prvp = NULL; if (kex->load_host_public_key == NULL || kex->load_host_private_key == NULL) { - error("%s: missing hostkey loader", __func__); + error_f("missing hostkey loader"); return SSH_ERR_INVALID_ARGUMENT; } *pubp = kex->load_host_public_key(kex->hostkey_type, @@ -1118,7 +1116,7 @@ kex_verify_host_key(struct ssh *ssh, struct sshkey *server_host_key) struct kex *kex = ssh->kex; if (kex->verify_host_key == NULL) { - error("%s: missing hostkey verifier", __func__); + error_f("missing hostkey verifier"); return SSH_ERR_INVALID_ARGUMENT; } if (server_host_key->type != kex->hostkey_type || @@ -1155,7 +1153,7 @@ send_error(struct ssh *ssh, char *msg) msg, strlen(msg)) != strlen(msg) || atomicio(vwrite, ssh_packet_get_connection_out(ssh), crnl, strlen(crnl)) != strlen(crnl)) - error("%s: write: %.100s", __func__, strerror(errno)); + error_f("write: %.100s", strerror(errno)); } /* @@ -1187,7 +1185,7 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, version_addendum == NULL ? "" : " ", version_addendum == NULL ? "" : version_addendum)) != 0) { oerrno = errno; - error("%s: sshbuf_putf: %s", __func__, ssh_err(r)); + error_fr(r, "sshbuf_putf"); goto out; } @@ -1195,18 +1193,18 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, sshbuf_mutable_ptr(our_version), sshbuf_len(our_version)) != sshbuf_len(our_version)) { oerrno = errno; - debug("%s: write: %.100s", __func__, strerror(errno)); + debug_f("write: %.100s", strerror(errno)); r = SSH_ERR_SYSTEM_ERROR; goto out; } if ((r = sshbuf_consume_end(our_version, 2)) != 0) { /* trim \r\n */ oerrno = errno; - error("%s: sshbuf_consume_end: %s", __func__, ssh_err(r)); + error_fr(r, "sshbuf_consume_end"); goto out; } our_version_string = sshbuf_dup_string(our_version); if (our_version_string == NULL) { - error("%s: sshbuf_dup_string failed", __func__); + error_f("sshbuf_dup_string failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } @@ -1217,8 +1215,8 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, if (n >= SSH_MAX_PRE_BANNER_LINES) { send_error(ssh, "No SSH identification string " "received."); - error("%s: No SSH version received in first %u lines " - "from server", __func__, SSH_MAX_PRE_BANNER_LINES); + error_f("No SSH version received in first %u lines " + "from server", SSH_MAX_PRE_BANNER_LINES); r = SSH_ERR_INVALID_FORMAT; goto out; } @@ -1237,8 +1235,7 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, goto out; } else if (r == -1) { oerrno = errno; - error("%s: %s", - __func__, strerror(errno)); + error_f("%s", strerror(errno)); r = SSH_ERR_SYSTEM_ERROR; goto out; } @@ -1247,14 +1244,12 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, len = atomicio(read, ssh_packet_get_connection_in(ssh), &c, 1); if (len != 1 && errno == EPIPE) { - error("%s: Connection closed by remote host", - __func__); + error_f("Connection closed by remote host"); r = SSH_ERR_CONN_CLOSED; goto out; } else if (len != 1) { oerrno = errno; - error("%s: read: %.100s", - __func__, strerror(errno)); + error_f("read: %.100s", strerror(errno)); r = SSH_ERR_SYSTEM_ERROR; goto out; } @@ -1265,18 +1260,17 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, if (c == '\n') break; if (c == '\0' || expect_nl) { - error("%s: banner line contains invalid " - "characters", __func__); + error_f("banner line contains invalid " + "characters"); goto invalid; } if ((r = sshbuf_put_u8(peer_version, c)) != 0) { oerrno = errno; - error("%s: sshbuf_put: %s", - __func__, ssh_err(r)); + error_fr(r, "sshbuf_put"); goto out; } if (sshbuf_len(peer_version) > SSH_MAX_BANNER_LEN) { - error("%s: banner line too long", __func__); + error_f("banner line too long"); goto invalid; } } @@ -1286,26 +1280,26 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, break; /* If not, then just log the line and continue */ if ((cp = sshbuf_dup_string(peer_version)) == NULL) { - error("%s: sshbuf_dup_string failed", __func__); + error_f("sshbuf_dup_string failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } /* Do not accept lines before the SSH ident from a client */ if (ssh->kex->server) { - error("%s: client sent invalid protocol identifier " - "\"%.256s\"", __func__, cp); + error_f("client sent invalid protocol identifier " + "\"%.256s\"", cp); free(cp); goto invalid; } - debug("%s: banner line %zu: %s", __func__, n, cp); + debug_f("banner line %zu: %s", n, cp); free(cp); } peer_version_string = sshbuf_dup_string(peer_version); if (peer_version_string == NULL) - error("%s: sshbuf_dup_string failed", __func__); + error_f("sshbuf_dup_string failed"); /* XXX must be same size for sscanf */ if ((remote_version = calloc(1, sshbuf_len(peer_version))) == NULL) { - error("%s: calloc failed", __func__); + error_f("calloc failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } diff --git a/krl.c b/krl.c index 3a69b636a359..5612e7742733 100644 --- a/krl.c +++ b/krl.c @@ -14,7 +14,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $OpenBSD: krl.c,v 1.51 2020/08/27 01:06:18 djm Exp $ */ +/* $OpenBSD: krl.c,v 1.52 2020/10/18 11:32:01 djm Exp $ */ #include "includes.h" @@ -44,7 +44,7 @@ /* #define DEBUG_KRL */ #ifdef DEBUG_KRL -# define KRL_DBG(x) debug3 x +# define KRL_DBG(x) debug3_f x #else # define KRL_DBG(x) #endif @@ -241,8 +241,7 @@ revoked_certs_for_ca_key(struct ssh_krl *krl, const struct sshkey *ca_key, RB_INIT(&rc->revoked_serials); RB_INIT(&rc->revoked_key_ids); TAILQ_INSERT_TAIL(&krl->revoked_certs, rc, entry); - KRL_DBG(("%s: new CA %s", __func__, - ca_key == NULL ? "*" : sshkey_type(ca_key))); + KRL_DBG(("new CA %s", ca_key == NULL ? "*" : sshkey_type(ca_key))); *rcp = rc; return 0; } @@ -252,7 +251,7 @@ insert_serial_range(struct revoked_serial_tree *rt, u_int64_t lo, u_int64_t hi) { struct revoked_serial rs, *ers, *crs, *irs; - KRL_DBG(("%s: insert %llu:%llu", __func__, lo, hi)); + KRL_DBG(("insert %llu:%llu", lo, hi)); memset(&rs, 0, sizeof(rs)); rs.lo = lo; rs.hi = hi; @@ -264,15 +263,14 @@ insert_serial_range(struct revoked_serial_tree *rt, u_int64_t lo, u_int64_t hi) memcpy(irs, &rs, sizeof(*irs)); ers = RB_INSERT(revoked_serial_tree, rt, irs); if (ers != NULL) { - KRL_DBG(("%s: bad: ers != NULL", __func__)); + KRL_DBG(("bad: ers != NULL")); /* Shouldn't happen */ free(irs); return SSH_ERR_INTERNAL_ERROR; } ers = irs; } else { - KRL_DBG(("%s: overlap found %llu:%llu", __func__, - ers->lo, ers->hi)); + KRL_DBG(("overlap found %llu:%llu", ers->lo, ers->hi)); /* * The inserted entry overlaps an existing one. Grow the * existing entry. @@ -290,33 +288,31 @@ insert_serial_range(struct revoked_serial_tree *rt, u_int64_t lo, u_int64_t hi) /* Check predecessors */ while ((crs = RB_PREV(revoked_serial_tree, rt, ers)) != NULL) { - KRL_DBG(("%s: pred %llu:%llu", __func__, crs->lo, crs->hi)); + KRL_DBG(("pred %llu:%llu", crs->lo, crs->hi)); if (ers->lo != 0 && crs->hi < ers->lo - 1) break; /* This entry overlaps. */ if (crs->lo < ers->lo) { ers->lo = crs->lo; - KRL_DBG(("%s: pred extend %llu:%llu", __func__, - ers->lo, ers->hi)); + KRL_DBG(("pred extend %llu:%llu", ers->lo, ers->hi)); } RB_REMOVE(revoked_serial_tree, rt, crs); free(crs); } /* Check successors */ while ((crs = RB_NEXT(revoked_serial_tree, rt, ers)) != NULL) { - KRL_DBG(("%s: succ %llu:%llu", __func__, crs->lo, crs->hi)); + KRL_DBG(("succ %llu:%llu", crs->lo, crs->hi)); if (ers->hi != (u_int64_t)-1 && crs->lo > ers->hi + 1) break; /* This entry overlaps. */ if (crs->hi > ers->hi) { ers->hi = crs->hi; - KRL_DBG(("%s: succ extend %llu:%llu", __func__, - ers->lo, ers->hi)); + KRL_DBG(("succ extend %llu:%llu", ers->lo, ers->hi)); } RB_REMOVE(revoked_serial_tree, rt, crs); free(crs); } - KRL_DBG(("%s: done, final %llu:%llu", __func__, ers->lo, ers->hi)); + KRL_DBG(("done, final %llu:%llu", ers->lo, ers->hi)); return 0; } @@ -352,7 +348,7 @@ ssh_krl_revoke_cert_by_key_id(struct ssh_krl *krl, const struct sshkey *ca_key, if ((r = revoked_certs_for_ca_key(krl, ca_key, &rc, 1)) != 0) return r; - KRL_DBG(("%s: revoke %s", __func__, key_id)); + KRL_DBG(("revoke %s", key_id)); if ((rki = calloc(1, sizeof(*rki))) == NULL || (rki->key_id = strdup(key_id)) == NULL) { free(rki); @@ -411,7 +407,7 @@ ssh_krl_revoke_key_explicit(struct ssh_krl *krl, const struct sshkey *key) size_t len; int r; - debug3("%s: revoke type %s", __func__, sshkey_type(key)); + debug3_f("revoke type %s", sshkey_type(key)); if ((r = plain_key_blob(key, &blob, &len)) != 0) return r; return revoke_blob(&krl->revoked_keys, blob, len); @@ -437,7 +433,7 @@ revoke_by_hash(struct revoked_blob_tree *target, const u_char *p, size_t len) int ssh_krl_revoke_key_sha1(struct ssh_krl *krl, const u_char *p, size_t len) { - debug3("%s: revoke by sha1", __func__); + debug3_f("revoke by sha1"); if (len != 20) return SSH_ERR_INVALID_FORMAT; return revoke_by_hash(&krl->revoked_sha1s, p, len); @@ -446,7 +442,7 @@ ssh_krl_revoke_key_sha1(struct ssh_krl *krl, const u_char *p, size_t len) int ssh_krl_revoke_key_sha256(struct ssh_krl *krl, const u_char *p, size_t len) { - debug3("%s: revoke by sha256", __func__); + debug3_f("revoke by sha256"); if (len != 32) return SSH_ERR_INVALID_FORMAT; return revoke_by_hash(&krl->revoked_sha256s, p, len); @@ -542,9 +538,9 @@ choose_next_state(int current_state, u_int64_t contig, int final, *force_new_section = 1; cost = cost_bitmap_restart; } - KRL_DBG(("%s: contig %llu last_gap %llu next_gap %llu final %d, costs:" + KRL_DBG(("contig %llu last_gap %llu next_gap %llu final %d, costs:" "list %llu range %llu bitmap %llu new bitmap %llu, " - "selected 0x%02x%s", __func__, (long long unsigned)contig, + "selected 0x%02x%s", (long long unsigned)contig, (long long unsigned)last_gap, (long long unsigned)next_gap, final, (long long unsigned)cost_list, (long long unsigned)cost_range, (long long unsigned)cost_bitmap, @@ -602,7 +598,7 @@ revoked_certs_generate(struct revoked_certs *rc, struct sshbuf *buf) for (rs = RB_MIN(revoked_serial_tree, &rc->revoked_serials); rs != NULL; rs = RB_NEXT(revoked_serial_tree, &rc->revoked_serials, rs)) { - KRL_DBG(("%s: serial %llu:%llu state 0x%02x", __func__, + KRL_DBG(("serial %llu:%llu state 0x%02x", (long long unsigned)rs->lo, (long long unsigned)rs->hi, state)); @@ -622,7 +618,7 @@ revoked_certs_generate(struct revoked_certs *rc, struct sshbuf *buf) */ if (state != 0 && (force_new_sect || next_state != state || state == KRL_SECTION_CERT_SERIAL_RANGE)) { - KRL_DBG(("%s: finish state 0x%02x", __func__, state)); + KRL_DBG(("finish state 0x%02x", state)); switch (state) { case KRL_SECTION_CERT_SERIAL_LIST: case KRL_SECTION_CERT_SERIAL_RANGE: @@ -642,7 +638,7 @@ revoked_certs_generate(struct revoked_certs *rc, struct sshbuf *buf) /* If we are starting a new section then prepare it now */ if (next_state != state || force_new_sect) { - KRL_DBG(("%s: start state 0x%02x", __func__, + KRL_DBG(("start state 0x%02x", next_state)); state = next_state; sshbuf_reset(sect); @@ -678,7 +674,7 @@ revoked_certs_generate(struct revoked_certs *rc, struct sshbuf *buf) break; case KRL_SECTION_CERT_SERIAL_BITMAP: if (rs->lo - bitmap_start > INT_MAX) { - error("%s: insane bitmap gap", __func__); + error_f("insane bitmap gap"); goto out; } for (i = 0; i < contig; i++) { @@ -694,8 +690,7 @@ revoked_certs_generate(struct revoked_certs *rc, struct sshbuf *buf) } /* Flush the remaining section, if any */ if (state != 0) { - KRL_DBG(("%s: serial final flush for state 0x%02x", - __func__, state)); + KRL_DBG(("serial final flush for state 0x%02x", state)); switch (state) { case KRL_SECTION_CERT_SERIAL_LIST: case KRL_SECTION_CERT_SERIAL_RANGE: @@ -711,12 +706,12 @@ revoked_certs_generate(struct revoked_certs *rc, struct sshbuf *buf) (r = sshbuf_put_stringb(buf, sect)) != 0) goto out; } - KRL_DBG(("%s: serial done ", __func__)); + KRL_DBG(("serial done ")); /* Now output a section for any revocations by key ID */ sshbuf_reset(sect); RB_FOREACH(rki, revoked_key_id_tree, &rc->revoked_key_ids) { - KRL_DBG(("%s: key ID %s", __func__, rki->key_id)); + KRL_DBG(("key ID %s", rki->key_id)); if ((r = sshbuf_put_cstring(sect, rki->key_id)) != 0) goto out; } @@ -772,7 +767,7 @@ ssh_krl_to_blob(struct ssh_krl *krl, struct sshbuf *buf, /* Finally, output sections for revocations by public key/hash */ sshbuf_reset(sect); RB_FOREACH(rb, revoked_blob_tree, &krl->revoked_keys) { - KRL_DBG(("%s: key len %zu ", __func__, rb->len)); + KRL_DBG(("key len %zu ", rb->len)); if ((r = sshbuf_put_string(sect, rb->blob, rb->len)) != 0) goto out; } @@ -783,7 +778,7 @@ ssh_krl_to_blob(struct ssh_krl *krl, struct sshbuf *buf, } sshbuf_reset(sect); RB_FOREACH(rb, revoked_blob_tree, &krl->revoked_sha1s) { - KRL_DBG(("%s: hash len %zu ", __func__, rb->len)); + KRL_DBG(("hash len %zu ", rb->len)); if ((r = sshbuf_put_string(sect, rb->blob, rb->len)) != 0) goto out; } @@ -795,7 +790,7 @@ ssh_krl_to_blob(struct ssh_krl *krl, struct sshbuf *buf, } sshbuf_reset(sect); RB_FOREACH(rb, revoked_blob_tree, &krl->revoked_sha256s) { - KRL_DBG(("%s: hash len %zu ", __func__, rb->len)); + KRL_DBG(("hash len %zu ", rb->len)); if ((r = sshbuf_put_string(sect, rb->blob, rb->len)) != 0) goto out; } @@ -807,8 +802,7 @@ ssh_krl_to_blob(struct ssh_krl *krl, struct sshbuf *buf, } for (i = 0; i < nsign_keys; i++) { - KRL_DBG(("%s: signature key %s", __func__, - sshkey_ssh_name(sign_keys[i]))); + KRL_DBG(("sig key %s", sshkey_ssh_name(sign_keys[i]))); if ((r = sshbuf_put_u8(buf, KRL_SECTION_SIGNATURE)) != 0 || (r = sshkey_puts(sign_keys[i], buf)) != 0) goto out; @@ -817,7 +811,7 @@ ssh_krl_to_blob(struct ssh_krl *krl, struct sshbuf *buf, sshbuf_ptr(buf), sshbuf_len(buf), NULL, NULL, NULL, 0)) != 0) goto out; - KRL_DBG(("%s: signature sig len %zu", __func__, slen)); + KRL_DBG(("signature sig len %zu", slen)); if ((r = sshbuf_put_string(buf, sblob, slen)) != 0) goto out; } @@ -874,7 +868,7 @@ parse_revoked_certs(struct sshbuf *buf, struct ssh_krl *krl) if ((r = sshbuf_get_u8(buf, &type)) != 0 || (r = sshbuf_froms(buf, &subsect)) != 0) goto out; - KRL_DBG(("%s: subsection type 0x%02x", __func__, type)); + KRL_DBG(("subsection type 0x%02x", type)); /* sshbuf_dump(subsect, stderr); */ switch (type) { @@ -911,7 +905,7 @@ parse_revoked_certs(struct sshbuf *buf, struct ssh_krl *krl) nbits = bitmap_nbits(bitmap); for (serial = 0; serial < (u_int64_t)nbits; serial++) { if (serial > 0 && serial_lo + serial == 0) { - error("%s: bitmap wraps u64", __func__); + error_f("bitmap wraps u64"); r = SSH_ERR_INVALID_FORMAT; goto out; } @@ -970,7 +964,7 @@ blob_section(struct sshbuf *sect, struct revoked_blob_tree *target_tree, if ((r = sshbuf_get_string(sect, &rdata, &rlen)) != 0) return r; if (expected_len != 0 && rlen != expected_len) { - error("%s: bad length", __func__); + error_f("bad length"); free(rdata); return SSH_ERR_INVALID_FORMAT; } @@ -1001,7 +995,7 @@ ssh_krl_from_blob(struct sshbuf *buf, struct ssh_krl **krlp, *krlp = NULL; if (sshbuf_len(buf) < sizeof(KRL_MAGIC) - 1 || memcmp(sshbuf_ptr(buf), KRL_MAGIC, sizeof(KRL_MAGIC) - 1) != 0) { - debug3("%s: not a KRL", __func__); + debug3_f("not a KRL"); return SSH_ERR_KRL_BAD_MAGIC; } @@ -1014,7 +1008,7 @@ ssh_krl_from_blob(struct sshbuf *buf, struct ssh_krl **krlp, goto out; if ((krl = ssh_krl_init()) == NULL) { - error("%s: alloc failed", __func__); + error_f("alloc failed"); goto out; } @@ -1051,7 +1045,7 @@ ssh_krl_from_blob(struct sshbuf *buf, struct ssh_krl **krlp, if ((r = sshbuf_get_u8(copy, &type)) != 0 || (r = sshbuf_get_string_direct(copy, &blob, &blen)) != 0) goto out; - KRL_DBG(("%s: first pass, section 0x%02x", __func__, type)); + KRL_DBG(("first pass, section 0x%02x", type)); if (type != KRL_SECTION_SIGNATURE) { if (sig_seen) { error("KRL contains non-signature section " @@ -1127,7 +1121,7 @@ ssh_krl_from_blob(struct sshbuf *buf, struct ssh_krl **krlp, if ((r = sshbuf_get_u8(copy, &type)) != 0 || (r = sshbuf_froms(copy, §)) != 0) goto out; - KRL_DBG(("%s: second pass, section 0x%02x", __func__, type)); + KRL_DBG(("second pass, section 0x%02x", type)); switch (type) { case KRL_SECTION_CERTIFICATES: @@ -1230,7 +1224,7 @@ is_cert_revoked(const struct sshkey *key, struct revoked_certs *rc) rki.key_id = key->cert->key_id; erki = RB_FIND(revoked_key_id_tree, &rc->revoked_key_ids, &rki); if (erki != NULL) { - KRL_DBG(("%s: revoked by key ID", __func__)); + KRL_DBG(("revoked by key ID")); return SSH_ERR_KEY_REVOKED; } @@ -1245,7 +1239,7 @@ is_cert_revoked(const struct sshkey *key, struct revoked_certs *rc) rs.lo = rs.hi = key->cert->serial; ers = RB_FIND(revoked_serial_tree, &rc->revoked_serials, &rs); if (ers != NULL) { - KRL_DBG(("%s: revoked serial %llu matched %llu:%llu", __func__, + KRL_DBG(("revoked serial %llu matched %llu:%llu", key->cert->serial, ers->lo, ers->hi)); return SSH_ERR_KEY_REVOKED; } @@ -1268,7 +1262,7 @@ is_key_revoked(struct ssh_krl *krl, const struct sshkey *key) erb = RB_FIND(revoked_blob_tree, &krl->revoked_sha1s, &rb); free(rb.blob); if (erb != NULL) { - KRL_DBG(("%s: revoked by key SHA1", __func__)); + KRL_DBG(("revoked by key SHA1")); return SSH_ERR_KEY_REVOKED; } memset(&rb, 0, sizeof(rb)); @@ -1278,7 +1272,7 @@ is_key_revoked(struct ssh_krl *krl, const struct sshkey *key) erb = RB_FIND(revoked_blob_tree, &krl->revoked_sha256s, &rb); free(rb.blob); if (erb != NULL) { - KRL_DBG(("%s: revoked by key SHA256", __func__)); + KRL_DBG(("revoked by key SHA256")); return SSH_ERR_KEY_REVOKED; } @@ -1289,7 +1283,7 @@ is_key_revoked(struct ssh_krl *krl, const struct sshkey *key) erb = RB_FIND(revoked_blob_tree, &krl->revoked_keys, &rb); free(rb.blob); if (erb != NULL) { - KRL_DBG(("%s: revoked by explicit key", __func__)); + KRL_DBG(("revoked by explicit key")); return SSH_ERR_KEY_REVOKED; } @@ -1312,7 +1306,7 @@ is_key_revoked(struct ssh_krl *krl, const struct sshkey *key) return r; } - KRL_DBG(("%s: %llu no match", __func__, key->cert->serial)); + KRL_DBG(("%llu no match", key->cert->serial)); return 0; } @@ -1321,15 +1315,15 @@ ssh_krl_check_key(struct ssh_krl *krl, const struct sshkey *key) { int r; - KRL_DBG(("%s: checking key", __func__)); + KRL_DBG(("checking key")); if ((r = is_key_revoked(krl, key)) != 0) return r; if (sshkey_is_cert(key)) { - debug2("%s: checking CA key", __func__); + debug2_f("checking CA key"); if ((r = is_key_revoked(krl, key->cert->signature_key)) != 0) return r; } - KRL_DBG(("%s: key okay", __func__)); + KRL_DBG(("key okay")); return 0; } @@ -1348,7 +1342,7 @@ ssh_krl_file_contains_key(const char *path, const struct sshkey *key) } if ((r = ssh_krl_from_blob(krlbuf, &krl, NULL, 0)) != 0) goto out; - debug2("%s: checking KRL %s", __func__, path); + debug2_f("checking KRL %s", path); r = ssh_krl_check_key(krl, key); out: sshbuf_free(krlbuf); @@ -1385,7 +1379,7 @@ krl_dump(struct ssh_krl *krl, FILE *f) RB_FOREACH(rb, revoked_blob_tree, &krl->revoked_keys) { if ((r = sshkey_from_blob(rb->blob, rb->len, &key)) != 0) { ret = SSH_ERR_INVALID_FORMAT; - error("Parse key in KRL: %s", ssh_err(r)); + error_r(r, "parse KRL key"); continue; } if ((fp = sshkey_fingerprint(key, SSH_FP_HASH_DEFAULT, diff --git a/misc.c b/misc.c index b3a6a1cb7fe6..a25cd6ad554c 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.154 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: misc.c,v 1.155 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -1111,9 +1111,9 @@ vdollar_percent_expand(int *parseerror, int dollar, int percent, size_t len; if ((buf = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if (parseerror == NULL) - fatal("%s: null parseerror arg", __func__); + fatal_f("null parseerror arg"); *parseerror = 1; /* Gather keys if we're doing percent expansion. */ @@ -1123,14 +1123,15 @@ vdollar_percent_expand(int *parseerror, int dollar, int percent, if (keys[num_keys].key == NULL) break; keys[num_keys].repl = va_arg(ap, char *); - if (keys[num_keys].repl == NULL) - fatal("%s: NULL replacement for token %s", __func__, keys[num_keys].key); + if (keys[num_keys].repl == NULL) { + fatal_f("NULL replacement for token %s", + keys[num_keys].key); + } } if (num_keys == EXPAND_MAX_KEYS && va_arg(ap, char *) != NULL) - fatal("%s: too many keys", __func__); + fatal_f("too many keys"); if (num_keys == 0) - fatal("%s: percent expansion without token list", - __func__); + fatal_f("percent expansion without token list"); } /* Expand string */ @@ -1139,28 +1140,24 @@ vdollar_percent_expand(int *parseerror, int dollar, int percent, if (dollar && string[0] == '$' && string[1] == '{') { string += 2; /* skip over '${' */ if ((varend = strchr(string, '}')) == NULL) { - error("%s: environment variable '%s' missing " - "closing '}'", __func__, string); + error_f("environment variable '%s' missing " + "closing '}'", string); goto out; } len = varend - string; if (len == 0) { - error("%s: zero-length environment variable", - __func__); + error_f("zero-length environment variable"); goto out; } var = xmalloc(len + 1); (void)strlcpy(var, string, len + 1); if ((val = getenv(var)) == NULL) { - error("%s: env var ${%s} has no value", - __func__, var); + error_f("env var ${%s} has no value", var); missingvar = 1; } else { - debug3("%s: expand ${%s} -> '%s'", __func__, - var, val); + debug3_f("expand ${%s} -> '%s'", var, val); if ((r = sshbuf_put(buf, val, strlen(val))) !=0) - fatal("%s: sshbuf_put: %s", __func__, - ssh_err(r)); + fatal_fr(r, "sshbuf_put ${}"); } free(var); string += len; @@ -1174,10 +1171,8 @@ vdollar_percent_expand(int *parseerror, int dollar, int percent, */ if (*string != '%' || !percent) { append: - if ((r = sshbuf_put_u8(buf, *string)) != 0) { - fatal("%s: sshbuf_put_u8: %s", - __func__, ssh_err(r)); - } + if ((r = sshbuf_put_u8(buf, *string)) != 0) + fatal_fr(r, "sshbuf_put_u8 %%"); continue; } string++; @@ -1185,26 +1180,24 @@ vdollar_percent_expand(int *parseerror, int dollar, int percent, if (*string == '%') goto append; if (*string == '\0') { - error("%s: invalid format", __func__); + error_f("invalid format"); goto out; } for (i = 0; i < num_keys; i++) { if (strchr(keys[i].key, *string) != NULL) { if ((r = sshbuf_put(buf, keys[i].repl, - strlen(keys[i].repl))) != 0) { - fatal("%s: sshbuf_put: %s", - __func__, ssh_err(r)); - } + strlen(keys[i].repl))) != 0) + fatal_fr(r, "sshbuf_put %%-repl"); break; } } if (i >= num_keys) { - error("%s: unknown key %%%c", __func__, *string); + error_f("unknown key %%%c", *string); goto out; } } if (!missingvar && (ret = sshbuf_dup_string(buf)) == NULL) - fatal("%s: sshbuf_dup_string failed", __func__); + fatal_f("sshbuf_dup_string failed"); *parseerror = 0; out: sshbuf_free(buf); @@ -1248,7 +1241,7 @@ percent_expand(const char *string, ...) ret = vdollar_percent_expand(&err, 0, 1, string, ap); va_end(ap); if (err) - fatal("%s failed", __func__); + fatal_f("failed"); return ret; } @@ -1267,7 +1260,7 @@ percent_dollar_expand(const char *string, ...) ret = vdollar_percent_expand(&err, 1, 1, string, ap); va_end(ap); if (err) - fatal("%s failed", __func__); + fatal_f("failed"); return ret; } @@ -1300,16 +1293,16 @@ tun_open(int tun, int mode, char **ifname) break; } } else { - debug("%s: invalid tunnel %u", __func__, tun); + debug_f("invalid tunnel %u", tun); return -1; } if (fd == -1) { - debug("%s: %s open: %s", __func__, name, strerror(errno)); + debug_f("%s open: %s", name, strerror(errno)); return -1; } - debug("%s: %s mode %d fd %d", __func__, name, mode, fd); + debug_f("%s mode %d fd %d", name, mode, fd); /* Bring interface up if it is not already */ snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s%d", tunbase, tun); @@ -1317,16 +1310,16 @@ tun_open(int tun, int mode, char **ifname) goto failed; if (ioctl(sock, SIOCGIFFLAGS, &ifr) == -1) { - debug("%s: get interface %s flags: %s", __func__, - ifr.ifr_name, strerror(errno)); + debug_f("get interface %s flags: %s", ifr.ifr_name, + strerror(errno)); goto failed; } if (!(ifr.ifr_flags & IFF_UP)) { ifr.ifr_flags |= IFF_UP; if (ioctl(sock, SIOCSIFFLAGS, &ifr) == -1) { - debug("%s: activate interface %s: %s", __func__, - ifr.ifr_name, strerror(errno)); + debug_f("activate interface %s: %s", ifr.ifr_name, + strerror(errno)); goto failed; } } @@ -1677,7 +1670,7 @@ mktemp_proto(char *s, size_t len) } r = snprintf(s, len, "/tmp/ssh-XXXXXXXXXXXX"); if (r < 0 || (size_t)r >= len) - fatal("%s: template string too short", __func__); + fatal_f("template string too short"); } static const struct { @@ -1764,8 +1757,7 @@ unix_listener(const char *path, int backlog, int unlink_first) sunaddr.sun_family = AF_UNIX; if (strlcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path)) >= sizeof(sunaddr.sun_path)) { - error("%s: path \"%s\" too long for Unix domain socket", - __func__, path); + error_f("path \"%s\" too long for Unix domain socket", path); errno = ENAMETOOLONG; return -1; } @@ -1773,7 +1765,7 @@ unix_listener(const char *path, int backlog, int unlink_first) sock = socket(PF_UNIX, SOCK_STREAM, 0); if (sock == -1) { saved_errno = errno; - error("%s: socket: %.100s", __func__, strerror(errno)); + error_f("socket: %.100s", strerror(errno)); errno = saved_errno; return -1; } @@ -1783,16 +1775,14 @@ unix_listener(const char *path, int backlog, int unlink_first) } if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) == -1) { saved_errno = errno; - error("%s: cannot bind to path %s: %s", - __func__, path, strerror(errno)); + error_f("cannot bind to path %s: %s", path, strerror(errno)); close(sock); errno = saved_errno; return -1; } if (listen(sock, backlog) == -1) { saved_errno = errno; - error("%s: cannot listen on path %s: %s", - __func__, path, strerror(errno)); + error_f("cannot listen on path %s: %s", path, strerror(errno)); close(sock); unlink(path); errno = saved_errno; @@ -1956,7 +1946,7 @@ argv_assemble(int argc, char **argv) struct sshbuf *buf, *arg; if ((buf = sshbuf_new()) == NULL || (arg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); for (i = 0; i < argc; i++) { ws = 0; @@ -1981,17 +1971,16 @@ argv_assemble(int argc, char **argv) break; } if (r != 0) - fatal("%s: sshbuf_put_u8: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put_u8"); } if ((i != 0 && (r = sshbuf_put_u8(buf, ' ')) != 0) || (ws != 0 && (r = sshbuf_put_u8(buf, '"')) != 0) || (r = sshbuf_putb(buf, arg)) != 0 || (ws != 0 && (r = sshbuf_put_u8(buf, '"')) != 0)) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); } if ((ret = malloc(sshbuf_len(buf) + 1)) == NULL) - fatal("%s: malloc failed", __func__); + fatal_f("malloc failed"); memcpy(ret, sshbuf_ptr(buf), sshbuf_len(buf)); ret[sshbuf_len(buf)] = '\0'; sshbuf_free(buf); @@ -2007,7 +1996,7 @@ exited_cleanly(pid_t pid, const char *tag, const char *cmd, int quiet) while (waitpid(pid, &status, 0) == -1) { if (errno != EINTR) { - error("%s: waitpid: %s", tag, strerror(errno)); + error("%s waitpid: %s", tag, strerror(errno)); return -1; } } @@ -2422,14 +2411,14 @@ stdfd_devnull(int do_stdin, int do_stdout, int do_stderr) int devnull, ret = 0; if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) { - error("%s: open %s: %s", __func__, _PATH_DEVNULL, + error_f("open %s: %s", _PATH_DEVNULL, strerror(errno)); return -1; } if ((do_stdin && dup2(devnull, STDIN_FILENO) == -1) || (do_stdout && dup2(devnull, STDOUT_FILENO) == -1) || (do_stderr && dup2(devnull, STDERR_FILENO) == -1)) { - error("%s: dup2: %s", __func__, strerror(errno)); + error_f("dup2: %s", strerror(errno)); ret = -1; } if (devnull > STDERR_FILENO) diff --git a/monitor.c b/monitor.c index c4e07ba4dfe2..10f8462429a6 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.216 2020/10/18 11:21:59 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.217 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -309,8 +309,7 @@ monitor_child_preauth(struct ssh *ssh, struct monitor *pmonitor) if (authenticated && !auth2_update_methods_lists(authctxt, auth_method, auth_submethod)) { - debug3("%s: method %s: partial", __func__, - auth_method); + debug3_f("method %s: partial", auth_method); authenticated = 0; partial = 1; } @@ -318,8 +317,8 @@ monitor_child_preauth(struct ssh *ssh, struct monitor *pmonitor) if (authenticated) { if (!(ent->flags & MON_AUTHDECIDE)) - fatal("%s: unexpected authentication from %d", - __func__, ent->type); + fatal_f("unexpected authentication from %d", + ent->type); if (authctxt->pw->pw_uid == 0 && !auth_root_allowed(ssh, auth_method)) authenticated = 0; @@ -352,12 +351,11 @@ monitor_child_preauth(struct ssh *ssh, struct monitor *pmonitor) } if (!authctxt->valid) - fatal("%s: authenticated invalid user", __func__); + fatal_f("authenticated invalid user"); if (strcmp(auth_method, "unknown") == 0) - fatal("%s: authentication method name unknown", __func__); + fatal_f("authentication method name unknown"); - debug("%s: %s has been authenticated by privileged process", - __func__, authctxt->user); + debug_f("user %s authenticated by privileged process", authctxt->user); ssh->authctxt = NULL; ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user); @@ -426,38 +424,38 @@ monitor_read_log(struct monitor *pmonitor) int r; if ((logmsg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); /* Read length */ if ((r = sshbuf_reserve(logmsg, 4, &p)) != 0) - fatal("%s: reserve: %s", __func__, ssh_err(r)); + fatal_fr(r, "reserve len"); if (atomicio(read, pmonitor->m_log_recvfd, p, 4) != 4) { if (errno == EPIPE) { sshbuf_free(logmsg); - debug("%s: child log fd closed", __func__); + debug_f("child log fd closed"); close(pmonitor->m_log_recvfd); pmonitor->m_log_recvfd = -1; return -1; } - fatal("%s: log fd read: %s", __func__, strerror(errno)); + fatal_f("log fd read: %s", strerror(errno)); } if ((r = sshbuf_get_u32(logmsg, &len)) != 0) - fatal("%s: get len: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse len"); if (len <= 4 || len > 8192) - fatal("%s: invalid log message length %u", __func__, len); + fatal_f("invalid log message length %u", len); /* Read severity, message */ sshbuf_reset(logmsg); if ((r = sshbuf_reserve(logmsg, len, &p)) != 0) - fatal("%s: reserve: %s", __func__, ssh_err(r)); + fatal_fr(r, "reserve msg"); if (atomicio(read, pmonitor->m_log_recvfd, p, len) != len) - fatal("%s: log fd read: %s", __func__, strerror(errno)); + fatal_f("log fd read: %s", strerror(errno)); if ((r = sshbuf_get_cstring(logmsg, &file, NULL)) != 0 || (r = sshbuf_get_cstring(logmsg, &func, NULL)) != 0 || (r = sshbuf_get_u32(logmsg, &line)) != 0 || (r = sshbuf_get_u32(logmsg, &level)) != 0 || (r = sshbuf_get_cstring(logmsg, &msg, NULL)) != 0) - fatal("%s: decode: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); /* Log it */ if (log_level_name(level) == NULL) @@ -490,7 +488,7 @@ monitor_read(struct ssh *ssh, struct monitor *pmonitor, struct mon_table *ent, if (poll(pfd, pfd[1].fd == -1 ? 1 : 2, -1) == -1) { if (errno == EINTR || errno == EAGAIN) continue; - fatal("%s: poll: %s", __func__, strerror(errno)); + fatal_f("poll: %s", strerror(errno)); } if (pfd[1].revents) { /* @@ -505,13 +503,13 @@ monitor_read(struct ssh *ssh, struct monitor *pmonitor, struct mon_table *ent, } if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); mm_request_receive(pmonitor->m_sendfd, m); if ((r = sshbuf_get_u8(m, &type)) != 0) - fatal("%s: decode: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); - debug3("%s: checking request %d", __func__, type); + debug3_f("checking request %d", type); while (ent->f != NULL) { if (ent->type == type) @@ -521,15 +519,13 @@ monitor_read(struct ssh *ssh, struct monitor *pmonitor, struct mon_table *ent, if (ent->f != NULL) { if (!(ent->flags & MON_PERMIT)) - fatal("%s: unpermitted request %d", __func__, - type); + fatal_f("unpermitted request %d", type); ret = (*ent->f)(ssh, pmonitor->m_sendfd, m); sshbuf_free(m); /* The child may use this request only once, disable it */ if (ent->flags & MON_ONCE) { - debug2("%s: %d used once, disabling now", __func__, - type); + debug2_f("%d used once, disabling now", type); ent->flags &= ~MON_PERMIT; } @@ -539,7 +535,7 @@ monitor_read(struct ssh *ssh, struct monitor *pmonitor, struct mon_table *ent, return ret; } - fatal("%s: unsupported request: %d", __func__, type); + fatal_f("unsupported request: %d", type); /* NOTREACHED */ return (-1); @@ -584,21 +580,19 @@ mm_answer_moduli(struct ssh *ssh, int sock, struct sshbuf *m) if ((r = sshbuf_get_u32(m, &min)) != 0 || (r = sshbuf_get_u32(m, &want)) != 0 || (r = sshbuf_get_u32(m, &max)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); - debug3("%s: got parameters: %d %d %d", - __func__, min, want, max); + debug3_f("got parameters: %d %d %d", min, want, max); /* We need to check here, too, in case the child got corrupted */ if (max < min || want < min || max < want) - fatal("%s: bad parameters: %d %d %d", - __func__, min, want, max); + fatal_f("bad parameters: %d %d %d", min, want, max); sshbuf_reset(m); dh = choose_dh(min, want, max); if (dh == NULL) { if ((r = sshbuf_put_u8(m, 0)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble empty"); return (0); } else { /* Send first bignum */ @@ -606,7 +600,7 @@ mm_answer_moduli(struct ssh *ssh, int sock, struct sshbuf *m) if ((r = sshbuf_put_u8(m, 1)) != 0 || (r = sshbuf_put_bignum2(m, dh_p)) != 0 || (r = sshbuf_put_bignum2(m, dh_g)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); DH_free(dh); } @@ -628,15 +622,15 @@ mm_answer_sign(struct ssh *ssh, int sock, struct sshbuf *m) u_int keyid, compat; const char proof_req[] = "hostkeys-prove-00@openssh.com"; - debug3("%s", __func__); + debug3_f("entering"); if ((r = sshbuf_get_u32(m, &keyid)) != 0 || (r = sshbuf_get_string(m, &p, &datlen)) != 0 || (r = sshbuf_get_cstring(m, &alg, &alglen)) != 0 || (r = sshbuf_get_u32(m, &compat)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (keyid > INT_MAX) - fatal("%s: invalid key ID", __func__); + fatal_f("invalid key ID"); /* * Supported KEX types use SHA1 (20 bytes), SHA256 (32 bytes), @@ -655,21 +649,20 @@ mm_answer_sign(struct ssh *ssh, int sock, struct sshbuf *m) * the client sent us. */ if (session_id2_len == 0) /* hostkeys is never first */ - fatal("%s: bad data length: %zu", __func__, datlen); + fatal_f("bad data length: %zu", datlen); if ((key = get_hostkey_public_by_index(keyid, ssh)) == NULL) - fatal("%s: no hostkey for index %d", __func__, keyid); + fatal_f("no hostkey for index %d", keyid); if ((sigbuf = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_cstring(sigbuf, proof_req)) != 0 || (r = sshbuf_put_string(sigbuf, session_id2, session_id2_len)) != 0 || (r = sshkey_puts(key, sigbuf)) != 0) - fatal("%s: couldn't prepare private key " - "proof buffer: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble private key proof"); if (datlen != sshbuf_len(sigbuf) || memcmp(p, sshbuf_ptr(sigbuf), sshbuf_len(sigbuf)) != 0) - fatal("%s: bad data length: %zu, hostkey proof len %zu", - __func__, datlen, sshbuf_len(sigbuf)); + fatal_f("bad data length: %zu, hostkey proof len %zu", + datlen, sshbuf_len(sigbuf)); sshbuf_free(sigbuf); is_proof = 1; } @@ -684,24 +677,21 @@ mm_answer_sign(struct ssh *ssh, int sock, struct sshbuf *m) if ((key = get_hostkey_by_index(keyid)) != NULL) { if ((r = sshkey_sign(key, &signature, &siglen, p, datlen, alg, options.sk_provider, NULL, compat)) != 0) - fatal("%s: sshkey_sign failed: %s", - __func__, ssh_err(r)); + fatal_fr(r, "sign"); } else if ((key = get_hostkey_public_by_index(keyid, ssh)) != NULL && auth_sock > 0) { if ((r = ssh_agent_sign(auth_sock, key, &signature, &siglen, - p, datlen, alg, compat)) != 0) { - fatal("%s: ssh_agent_sign failed: %s", - __func__, ssh_err(r)); - } + p, datlen, alg, compat)) != 0) + fatal_fr(r, "agent sign"); } else - fatal("%s: no hostkey from index %d", __func__, keyid); + fatal_f("no hostkey from index %d", keyid); - debug3("%s: %s signature %p(%zu)", __func__, - is_proof ? "hostkey proof" : "KEX", signature, siglen); + debug3_f("%s signature %p(%zu)", is_proof ? "hostkey proof" : "KEX", + signature, siglen); sshbuf_reset(m); if ((r = sshbuf_put_string(m, signature, siglen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); free(alg); free(p); @@ -725,13 +715,13 @@ mm_answer_pwnamallow(struct ssh *ssh, int sock, struct sshbuf *m) int r, allowed = 0; u_int i; - debug3("%s", __func__); + debug3_f("entering"); if (authctxt->attempt++ != 0) - fatal("%s: multiple attempts for getpwnam", __func__); + fatal_f("multiple attempts for getpwnam"); if ((r = sshbuf_get_cstring(m, &username, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); pwent = getpwnamallow(ssh, username); @@ -743,7 +733,7 @@ mm_answer_pwnamallow(struct ssh *ssh, int sock, struct sshbuf *m) if (pwent == NULL) { if ((r = sshbuf_put_u8(m, 0)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble fakepw"); authctxt->pw = fakepw(); goto out; } @@ -765,26 +755,23 @@ mm_answer_pwnamallow(struct ssh *ssh, int sock, struct sshbuf *m) #endif (r = sshbuf_put_cstring(m, pwent->pw_dir)) != 0 || (r = sshbuf_put_cstring(m, pwent->pw_shell)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble pw"); out: ssh_packet_set_log_preamble(ssh, "%suser %s", authctxt->valid ? "authenticating" : "invalid ", authctxt->user); if ((r = sshbuf_put_string(m, &options, sizeof(options))) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble options"); #define M_CP_STROPT(x) do { \ - if (options.x != NULL) { \ - if ((r = sshbuf_put_cstring(m, options.x)) != 0) \ - fatal("%s: buffer error: %s", \ - __func__, ssh_err(r)); \ - } \ + if (options.x != NULL && \ + (r = sshbuf_put_cstring(m, options.x)) != 0) \ + fatal_fr(r, "assemble %s", #x); \ } while (0) #define M_CP_STRARRAYOPT(x, nx) do { \ for (i = 0; i < options.nx; i++) { \ if ((r = sshbuf_put_cstring(m, options.x[i])) != 0) \ - fatal("%s: buffer error: %s", \ - __func__, ssh_err(r)); \ + fatal_fr(r, "assemble %s", #x); \ } \ } while (0) /* See comment in servconf.h */ @@ -799,10 +786,10 @@ mm_answer_pwnamallow(struct ssh *ssh, int sock, struct sshbuf *m) * run to it's packet_disconnect(), but it must not allow any * authentication to succeed. */ - debug("%s: no valid authentication method lists", __func__); + debug_f("no valid authentication method lists"); } - debug3("%s: sending MONITOR_ANS_PWNAM: %d", __func__, allowed); + debug3_f("sending MONITOR_ANS_PWNAM: %d", allowed); mm_request_send(sock, MONITOR_ANS_PWNAM, m); /* Allow service/style information on the auth context */ @@ -825,7 +812,7 @@ int mm_answer_auth2_read_banner(struct ssh *ssh, int sock, struct sshbuf *m) sshbuf_reset(m); banner = auth2_read_banner(); if ((r = sshbuf_put_cstring(m, banner != NULL ? banner : "")) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(sock, MONITOR_ANS_AUTH2_READ_BANNER, m); free(banner); @@ -841,9 +828,8 @@ mm_answer_authserv(struct ssh *ssh, int sock, struct sshbuf *m) if ((r = sshbuf_get_cstring(m, &authctxt->service, NULL)) != 0 || (r = sshbuf_get_cstring(m, &authctxt->style, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); - debug3("%s: service=%s, style=%s", - __func__, authctxt->service, authctxt->style); + fatal_fr(r, "parse"); + debug3_f("service=%s, style=%s", authctxt->service, authctxt->style); if (strlen(authctxt->style) == 0) { free(authctxt->style); @@ -891,9 +877,9 @@ mm_answer_authpassword(struct ssh *ssh, int sock, struct sshbuf *m) size_t plen; if (!options.password_authentication) - fatal("%s: password authentication not enabled", __func__); + fatal_f("password authentication not enabled"); if ((r = sshbuf_get_cstring(m, &passwd, &plen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); /* Only authenticate if the context is valid */ authenticated = options.password_authentication && auth_password(ssh, passwd); @@ -901,13 +887,14 @@ mm_answer_authpassword(struct ssh *ssh, int sock, struct sshbuf *m) sshbuf_reset(m); if ((r = sshbuf_put_u32(m, authenticated)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); #ifdef USE_PAM if ((r = sshbuf_put_u32(m, sshpam_get_maxtries_reached())) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble PAM"); #endif debug3("%s: sending result %d", __func__, authenticated); + debug3_f("sending result %d", authenticated); mm_request_send(sock, MONITOR_ANS_AUTHPASSWORD, m); call_count++; @@ -930,19 +917,19 @@ mm_answer_bsdauthquery(struct ssh *ssh, int sock, struct sshbuf *m) int r; if (!options.kbd_interactive_authentication) - fatal("%s: kbd-int authentication not enabled", __func__); + fatal_f("kbd-int authentication not enabled"); success = bsdauth_query(authctxt, &name, &infotxt, &numprompts, &prompts, &echo_on) < 0 ? 0 : 1; sshbuf_reset(m); if ((r = sshbuf_put_u32(m, success)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); if (success) { if ((r = sshbuf_put_cstring(m, prompts[0])) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble prompt"); } - debug3("%s: sending challenge success: %u", __func__, success); + debug3_f("sending challenge success: %u", success); mm_request_send(sock, MONITOR_ANS_BSDAUTHQUERY, m); if (success) { @@ -962,23 +949,23 @@ mm_answer_bsdauthrespond(struct ssh *ssh, int sock, struct sshbuf *m) int r, authok; if (!options.kbd_interactive_authentication) - fatal("%s: kbd-int authentication not enabled", __func__); + fatal_f("kbd-int authentication not enabled"); if (authctxt->as == NULL) - fatal("%s: no bsd auth session", __func__); + fatal_f("no bsd auth session"); if ((r = sshbuf_get_cstring(m, &response, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); authok = options.challenge_response_authentication && auth_userresponse(authctxt->as, response, 0); authctxt->as = NULL; - debug3("%s: <%s> = <%d>", __func__, response, authok); + debug3_f("<%s> = <%d>", response, authok); free(response); sshbuf_reset(m); if ((r = sshbuf_put_u32(m, authok)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); - debug3("%s: sending authenticated: %d", __func__, authok); + debug3_f("sending authenticated: %d", authok); mm_request_send(sock, MONITOR_ANS_BSDAUTHRESPOND, m); auth_method = "keyboard-interactive"; @@ -1161,21 +1148,21 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) int r, allowed = 0; struct sshauthopt *opts = NULL; - debug3("%s entering", __func__); + debug3_f("entering"); if ((r = sshbuf_get_u32(m, &type)) != 0 || (r = sshbuf_get_cstring(m, &cuser, NULL)) != 0 || (r = sshbuf_get_cstring(m, &chost, NULL)) != 0 || (r = sshkey_froms(m, &key)) != 0 || (r = sshbuf_get_u32(m, &pubkey_auth_attempt)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); - debug3("%s: key_from_blob: %p", __func__, key); + debug3_f("key_from_blob: %p", key); if (key != NULL && authctxt->valid) { /* These should not make it past the privsep child */ if (sshkey_type_plain(key->type) == KEY_RSA && (datafellows & SSH_BUG_RSASIGMD5) != 0) - fatal("%s: passed a SSH_BUG_RSASIGMD5 key", __func__); + fatal_f("passed a SSH_BUG_RSASIGMD5 key"); switch (type) { case MM_USERKEY: @@ -1206,13 +1193,13 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) cuser, chost); break; default: - fatal("%s: unknown key type %d", __func__, type); + fatal_f("unknown key type %d", type); break; } } - debug3("%s: %s authentication%s: %s key is %s", __func__, - auth_method, pubkey_auth_attempt ? "" : " test", + debug3_f("%s authentication%s: %s key is %s", auth_method, + pubkey_auth_attempt ? "" : " test", (key == NULL || !authctxt->valid) ? "invalid" : sshkey_type(key), allowed ? "allowed" : "not allowed"); @@ -1224,7 +1211,7 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) if (allowed) { /* Save temporarily for comparison in verify */ if ((r = sshkey_to_blob(key, &key_blob, &key_bloblen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshkey_to_blob"); key_blobtype = type; key_opts = opts; hostbased_cuser = cuser; @@ -1239,9 +1226,9 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) sshbuf_reset(m); if ((r = sshbuf_put_u32(m, allowed)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); if (opts != NULL && (r = sshauthopt_serialise(opts, m, 1)) != 0) - fatal("%s: sshauthopt_serialise: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshauthopt_serialise"); mm_request_send(sock, MONITOR_ANS_KEYALLOWED, m); if (!allowed) @@ -1261,7 +1248,7 @@ monitor_valid_userblob(const u_char *data, u_int datalen) int r, fail = 0; if ((b = sshbuf_from(data, datalen)) == NULL) - fatal("%s: sshbuf_from", __func__); + fatal_f("sshbuf_from"); if (datafellows & SSH_OLD_SESSIONID) { p = sshbuf_ptr(b); @@ -1271,21 +1258,21 @@ monitor_valid_userblob(const u_char *data, u_int datalen) (timingsafe_bcmp(p, session_id2, session_id2_len) != 0)) fail++; if ((r = sshbuf_consume(b, session_id2_len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "consume"); } else { if ((r = sshbuf_get_string_direct(b, &p, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse sessionid"); if ((session_id2 == NULL) || (len != session_id2_len) || (timingsafe_bcmp(p, session_id2, session_id2_len) != 0)) fail++; } if ((r = sshbuf_get_u8(b, &type)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); if (type != SSH2_MSG_USERAUTH_REQUEST) fail++; if ((r = sshbuf_get_cstring(b, &cp, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse userstyle"); xasprintf(&userstyle, "%s%s%s", authctxt->user, authctxt->style ? ":" : "", authctxt->style ? authctxt->style : ""); @@ -1298,17 +1285,17 @@ monitor_valid_userblob(const u_char *data, u_int datalen) free(cp); if ((r = sshbuf_skip_string(b)) != 0 || /* service */ (r = sshbuf_get_cstring(b, &cp, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse method"); if (strcmp("publickey", cp) != 0) fail++; free(cp); if ((r = sshbuf_get_u8(b, &type)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse pktype"); if (type == 0) fail++; if ((r = sshbuf_skip_string(b)) != 0 || /* pkalg */ (r = sshbuf_skip_string(b)) != 0) /* pkblob */ - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse pk"); if (sshbuf_len(b) != 0) fail++; sshbuf_free(b); @@ -1327,9 +1314,9 @@ monitor_valid_hostbasedblob(const u_char *data, u_int datalen, u_char type; if ((b = sshbuf_from(data, datalen)) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_get_string_direct(b, &p, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse sessionid"); if ((session_id2 == NULL) || (len != session_id2_len) || @@ -1337,11 +1324,11 @@ monitor_valid_hostbasedblob(const u_char *data, u_int datalen, fail++; if ((r = sshbuf_get_u8(b, &type)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); if (type != SSH2_MSG_USERAUTH_REQUEST) fail++; if ((r = sshbuf_get_cstring(b, &cp, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse userstyle"); xasprintf(&userstyle, "%s%s%s", authctxt->user, authctxt->style ? ":" : "", authctxt->style ? authctxt->style : ""); @@ -1354,17 +1341,17 @@ monitor_valid_hostbasedblob(const u_char *data, u_int datalen, free(cp); if ((r = sshbuf_skip_string(b)) != 0 || /* service */ (r = sshbuf_get_cstring(b, &cp, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse method"); if (strcmp(cp, "hostbased") != 0) fail++; free(cp); if ((r = sshbuf_skip_string(b)) != 0 || /* pkalg */ (r = sshbuf_skip_string(b)) != 0) /* pkblob */ - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse pk"); /* verify client host, strip trailing dot if necessary */ if ((r = sshbuf_get_cstring(b, &cp, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse host"); if (((len = strlen(cp)) > 0) && cp[len - 1] == '.') cp[len - 1] = '\0'; if (strcmp(cp, chost) != 0) @@ -1373,7 +1360,7 @@ monitor_valid_hostbasedblob(const u_char *data, u_int datalen, /* verify client user */ if ((r = sshbuf_get_cstring(b, &cp, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse ruser"); if (strcmp(cp, cuser) != 0) fail++; free(cp); @@ -1399,11 +1386,11 @@ mm_answer_keyverify(struct ssh *ssh, int sock, struct sshbuf *m) (r = sshbuf_get_string_direct(m, &signature, &signaturelen)) != 0 || (r = sshbuf_get_string_direct(m, &data, &datalen)) != 0 || (r = sshbuf_get_cstring(m, &sigalg, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (hostbased_cuser == NULL || hostbased_chost == NULL || !monitor_allowed_key(blob, bloblen)) - fatal("%s: bad key, not previously allowed", __func__); + fatal_f("bad key, not previously allowed"); /* Empty signature algorithm means NULL. */ if (*sigalg == '\0') { @@ -1413,7 +1400,7 @@ mm_answer_keyverify(struct ssh *ssh, int sock, struct sshbuf *m) /* XXX use sshkey_froms here; need to change key_blob, etc. */ if ((r = sshkey_from_blob(blob, bloblen, &key)) != 0) - fatal("%s: bad public key blob: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse key"); switch (key_blobtype) { case MM_USERKEY: @@ -1430,15 +1417,15 @@ mm_answer_keyverify(struct ssh *ssh, int sock, struct sshbuf *m) break; } if (!valid_data) - fatal("%s: bad signature data blob", __func__); + fatal_f("bad signature data blob"); if ((fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint failed", __func__); + fatal_f("sshkey_fingerprint failed"); ret = sshkey_verify(key, signature, signaturelen, data, datalen, sigalg, ssh->compat, &sig_details); - debug3("%s: %s %p signature %s%s%s", __func__, auth_method, key, + debug3_f("%s %p signature %s%s%s", auth_method, key, (ret == 0) ? "verified" : "unverified", (ret != 0) ? ": " : "", (ret != 0) ? ssh_err(ret) : ""); @@ -1482,11 +1469,11 @@ mm_answer_keyverify(struct ssh *ssh, int sock, struct sshbuf *m) encoded_ret = (ret != 0); if ((r = sshbuf_put_u32(m, encoded_ret)) != 0 || (r = sshbuf_put_u8(m, sig_details != NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); if (sig_details != NULL) { if ((r = sshbuf_put_u32(m, sig_details->sk_counter)) != 0 || (r = sshbuf_put_u8(m, sig_details->sk_flags)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble sk"); } sshkey_sig_details_free(sig_details); mm_request_send(sock, MONITOR_ANS_KEYVERIFY, m); @@ -1526,9 +1513,9 @@ mm_record_login(struct ssh *ssh, Session *s, struct passwd *pw) static void mm_session_close(Session *s) { - debug3("%s: session %d pid %ld", __func__, s->self, (long)s->pid); + debug3_f("session %d pid %ld", s->self, (long)s->pid); if (s->ttyfd != -1) { - debug3("%s: tty %s ptyfd %d", __func__, s->tty, s->ptyfd); + debug3_f("tty %s ptyfd %d", s->tty, s->ptyfd); session_pty_cleanup2(s); } session_unused(s->self); @@ -1541,7 +1528,7 @@ mm_answer_pty(struct ssh *ssh, int sock, struct sshbuf *m) Session *s; int r, res, fd0; - debug3("%s entering", __func__); + debug3_f("entering"); sshbuf_reset(m); s = session_new(); @@ -1557,11 +1544,11 @@ mm_answer_pty(struct ssh *ssh, int sock, struct sshbuf *m) if ((r = sshbuf_put_u32(m, 1)) != 0 || (r = sshbuf_put_cstring(m, s->tty)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); /* We need to trick ttyslot */ if (dup2(s->ttyfd, 0) == -1) - fatal("%s: dup2", __func__); + fatal_f("dup2"); mm_record_login(ssh, s, authctxt->pw); @@ -1570,20 +1557,20 @@ mm_answer_pty(struct ssh *ssh, int sock, struct sshbuf *m) /* send messages generated by record_login */ if ((r = sshbuf_put_stringb(m, loginmsg)) != 0) - fatal("%s: put login message: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble loginmsg"); sshbuf_reset(loginmsg); mm_request_send(sock, MONITOR_ANS_PTY, m); if (mm_send_fd(sock, s->ptyfd) == -1 || mm_send_fd(sock, s->ttyfd) == -1) - fatal("%s: send fds failed", __func__); + fatal_f("send fds failed"); /* make sure nothing uses fd 0 */ if ((fd0 = open(_PATH_DEVNULL, O_RDONLY)) == -1) - fatal("%s: open(/dev/null): %s", __func__, strerror(errno)); + fatal_f("open(/dev/null): %s", strerror(errno)); if (fd0 != 0) - error("%s: fd0 %d != 0", __func__, fd0); + error_f("fd0 %d != 0", fd0); /* slave side of pty is not needed */ close(s->ttyfd); @@ -1591,7 +1578,7 @@ mm_answer_pty(struct ssh *ssh, int sock, struct sshbuf *m) /* no need to dup() because nobody closes ptyfd */ s->ptymaster = s->ptyfd; - debug3("%s: tty %s ptyfd %d", __func__, s->tty, s->ttyfd); + debug3_f("tty %s ptyfd %d", s->tty, s->ttyfd); return (0); @@ -1599,7 +1586,7 @@ mm_answer_pty(struct ssh *ssh, int sock, struct sshbuf *m) if (s != NULL) mm_session_close(s); if ((r = sshbuf_put_u32(m, 0)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble 0"); mm_request_send(sock, MONITOR_ANS_PTY, m); return (0); } @@ -1611,10 +1598,10 @@ mm_answer_pty_cleanup(struct ssh *ssh, int sock, struct sshbuf *m) char *tty; int r; - debug3("%s entering", __func__); + debug3_f("entering"); if ((r = sshbuf_get_cstring(m, &tty, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse tty"); if ((s = session_by_tty(tty)) != NULL) mm_session_close(s); sshbuf_reset(m); @@ -1628,7 +1615,7 @@ mm_answer_term(struct ssh *ssh, int sock, struct sshbuf *req) extern struct monitor *pmonitor; int res, status; - debug3("%s: tearing down sessions", __func__); + debug3_f("tearing down sessions"); /* The child is terminating */ session_destroy_all(ssh, &mm_session_close); @@ -1710,9 +1697,9 @@ monitor_apply_keystate(struct ssh *ssh, struct monitor *pmonitor) struct kex *kex; int r; - debug3("%s: packet_set_state", __func__); + debug3_f("packet_set_state"); if ((r = ssh_packet_set_state(ssh, child_state)) != 0) - fatal("%s: packet_set_state: %s", __func__, ssh_err(r)); + fatal_fr(r, "packet_set_state"); sshbuf_free(child_state); child_state = NULL; @@ -1744,13 +1731,13 @@ monitor_apply_keystate(struct ssh *ssh, struct monitor *pmonitor) void mm_get_keystate(struct ssh *ssh, struct monitor *pmonitor) { - debug3("%s: Waiting for new keys", __func__); + debug3_f("Waiting for new keys"); if ((child_state = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); mm_request_receive_expect(pmonitor->m_sendfd, MONITOR_REQ_KEYEXPORT, child_state); - debug3("%s: GOT new keys", __func__); + debug3_f("GOT new keys"); } @@ -1770,7 +1757,7 @@ monitor_openfds(struct monitor *mon, int do_logfds) #endif if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1) - fatal("%s: socketpair: %s", __func__, strerror(errno)); + fatal_f("socketpair: %s", strerror(errno)); #ifdef SO_ZEROIZE if (setsockopt(pair[0], SOL_SOCKET, SO_ZEROIZE, &on, sizeof(on)) == -1) error("setsockopt SO_ZEROIZE(0): %.100s", strerror(errno)); @@ -1784,7 +1771,7 @@ monitor_openfds(struct monitor *mon, int do_logfds) if (do_logfds) { if (pipe(pair) == -1) - fatal("%s: pipe: %s", __func__, strerror(errno)); + fatal_f("pipe: %s", strerror(errno)); FD_CLOSEONEXEC(pair[0]); FD_CLOSEONEXEC(pair[1]); mon->m_log_recvfd = pair[0]; @@ -1823,10 +1810,10 @@ mm_answer_gss_setup_ctx(struct ssh *ssh, int sock, struct sshbuf *m) int r; if (!options.gss_authentication) - fatal("%s: GSSAPI authentication not enabled", __func__); + fatal_f("GSSAPI authentication not enabled"); if ((r = sshbuf_get_string(m, &p, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); goid.elements = p; goid.length = len; @@ -1836,7 +1823,7 @@ mm_answer_gss_setup_ctx(struct ssh *ssh, int sock, struct sshbuf *m) sshbuf_reset(m); if ((r = sshbuf_put_u32(m, major)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(sock, MONITOR_ANS_GSSSETUP, m); @@ -1856,10 +1843,10 @@ mm_answer_gss_accept_ctx(struct ssh *ssh, int sock, struct sshbuf *m) int r; if (!options.gss_authentication) - fatal("%s: GSSAPI authentication not enabled", __func__); + fatal_f("GSSAPI authentication not enabled"); if ((r = ssh_gssapi_get_buffer_desc(m, &in)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "ssh_gssapi_get_buffer_desc"); major = ssh_gssapi_accept_ctx(gsscontext, &in, &out, &flags); free(in.value); @@ -1867,7 +1854,7 @@ mm_answer_gss_accept_ctx(struct ssh *ssh, int sock, struct sshbuf *m) if ((r = sshbuf_put_u32(m, major)) != 0 || (r = sshbuf_put_string(m, out.value, out.length)) != 0 || (r = sshbuf_put_u32(m, flags)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(sock, MONITOR_ANS_GSSSTEP, m); gss_release_buffer(&minor, &out); @@ -1888,11 +1875,11 @@ mm_answer_gss_checkmic(struct ssh *ssh, int sock, struct sshbuf *m) int r; if (!options.gss_authentication) - fatal("%s: GSSAPI authentication not enabled", __func__); + fatal_f("GSSAPI authentication not enabled"); if ((r = ssh_gssapi_get_buffer_desc(m, &gssbuf)) != 0 || (r = ssh_gssapi_get_buffer_desc(m, &mic)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "ssh_gssapi_get_buffer_desc"); ret = ssh_gssapi_checkmic(gsscontext, &gssbuf, &mic); @@ -1901,7 +1888,7 @@ mm_answer_gss_checkmic(struct ssh *ssh, int sock, struct sshbuf *m) sshbuf_reset(m); if ((r = sshbuf_put_u32(m, ret)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(sock, MONITOR_ANS_GSSCHECKMIC, m); @@ -1918,15 +1905,15 @@ mm_answer_gss_userok(struct ssh *ssh, int sock, struct sshbuf *m) const char *displayname; if (!options.gss_authentication) - fatal("%s: GSSAPI authentication not enabled", __func__); + fatal_f("GSSAPI authentication not enabled"); authenticated = authctxt->valid && ssh_gssapi_userok(authctxt->user); sshbuf_reset(m); if ((r = sshbuf_put_u32(m, authenticated)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); - debug3("%s: sending result %d", __func__, authenticated); + debug3_f("sending result %d", authenticated); mm_request_send(sock, MONITOR_ANS_GSSUSEROK, m); auth_method = "gssapi-with-mic"; diff --git a/monitor_fdpass.c b/monitor_fdpass.c index d766edcf11ca..a07727a8e743 100644 --- a/monitor_fdpass.c +++ b/monitor_fdpass.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_fdpass.c,v 1.21 2016/02/29 20:22:36 jca Exp $ */ +/* $OpenBSD: monitor_fdpass.c,v 1.22 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright 2001 Niels Provos * All rights reserved. @@ -89,17 +89,16 @@ mm_send_fd(int sock, int fd) pfd.events = POLLOUT; while ((n = sendmsg(sock, &msg, 0)) == -1 && (errno == EAGAIN || errno == EINTR)) { - debug3("%s: sendmsg(%d): %s", __func__, fd, strerror(errno)); + debug3_f("sendmsg(%d): %s", fd, strerror(errno)); (void)poll(&pfd, 1, -1); } if (n == -1) { - error("%s: sendmsg(%d): %s", __func__, fd, - strerror(errno)); + error_f("sendmsg(%d): %s", fd, strerror(errno)); return -1; } if (n != 1) { - error("%s: sendmsg: expected sent 1 got %zd", __func__, n); + error_f("sendmsg: expected sent 1 got %zd", n); return -1; } return 0; @@ -145,35 +144,34 @@ mm_receive_fd(int sock) pfd.events = POLLIN; while ((n = recvmsg(sock, &msg, 0)) == -1 && (errno == EAGAIN || errno == EINTR)) { - debug3("%s: recvmsg: %s", __func__, strerror(errno)); + debug3_f("recvmsg: %s", strerror(errno)); (void)poll(&pfd, 1, -1); } if (n == -1) { - error("%s: recvmsg: %s", __func__, strerror(errno)); + error_f("recvmsg: %s", strerror(errno)); return -1; } if (n != 1) { - error("%s: recvmsg: expected received 1 got %zd", __func__, n); + error_f("recvmsg: expected received 1 got %zd", n); return -1; } #ifdef HAVE_ACCRIGHTS_IN_MSGHDR if (msg.msg_accrightslen != sizeof(fd)) { - error("%s: no fd", __func__); + error_f("no fd"); return -1; } #else cmsg = CMSG_FIRSTHDR(&msg); if (cmsg == NULL) { - error("%s: no message header", __func__); + error_f("no message header"); return -1; } #ifndef BROKEN_CMSG_TYPE if (cmsg->cmsg_type != SCM_RIGHTS) { - error("%s: expected type %d got %d", __func__, - SCM_RIGHTS, cmsg->cmsg_type); + error_f("expected %d got %d", SCM_RIGHTS, cmsg->cmsg_type); return -1; } #endif @@ -181,7 +179,7 @@ mm_receive_fd(int sock) #endif return fd; #else - error("%s: file descriptor passing not supported", __func__); + error_f("file descriptor passing not supported"); return -1; #endif } diff --git a/monitor_wrap.c b/monitor_wrap.c index b425cab107ac..8cfd4b413cab 100644 --- a/monitor_wrap.c +++ b/monitor_wrap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_wrap.c,v 1.120 2020/10/16 13:26:13 djm Exp $ */ +/* $OpenBSD: monitor_wrap.c,v 1.121 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -91,10 +91,10 @@ mm_log_handler(const char *file, const char *func, int line, size_t len; if (mon->m_log_sendfd == -1) - fatal("%s: no log channel", __func__); + fatal_f("no log channel"); if ((log_msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u32(log_msg, 0)) != 0 || /* length; filled below */ (r = sshbuf_put_cstring(log_msg, file)) != 0 || @@ -102,13 +102,13 @@ mm_log_handler(const char *file, const char *func, int line, (r = sshbuf_put_u32(log_msg, (u_int)line)) != 0 || (r = sshbuf_put_u32(log_msg, level)) != 0 || (r = sshbuf_put_cstring(log_msg, msg)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); if ((len = sshbuf_len(log_msg)) < 4 || len > 0xffffffff) - fatal("%s: bad length %zu", __func__, len); + fatal_f("bad length %zu", len); POKE_U32(sshbuf_mutable_ptr(log_msg), len - 4); if (atomicio(vwrite, mon->m_log_sendfd, sshbuf_mutable_ptr(log_msg), len) != len) - fatal("%s: write: %s", __func__, strerror(errno)); + fatal_f("write: %s", strerror(errno)); sshbuf_free(log_msg); } @@ -128,16 +128,16 @@ mm_request_send(int sock, enum monitor_reqtype type, struct sshbuf *m) size_t mlen = sshbuf_len(m); u_char buf[5]; - debug3("%s entering: type %d", __func__, type); + debug3_f("entering, type %d", type); if (mlen >= 0xffffffff) - fatal("%s: bad length %zu", __func__, mlen); + fatal_f("bad length %zu", mlen); POKE_U32(buf, mlen + 1); buf[4] = (u_char) type; /* 1st byte of payload is mesg-type */ if (atomicio(vwrite, sock, buf, sizeof(buf)) != sizeof(buf)) - fatal("%s: write: %s", __func__, strerror(errno)); + fatal_f("write: %s", strerror(errno)); if (atomicio(vwrite, sock, sshbuf_mutable_ptr(m), mlen) != mlen) - fatal("%s: write: %s", __func__, strerror(errno)); + fatal_f("write: %s", strerror(errno)); } void @@ -147,21 +147,21 @@ mm_request_receive(int sock, struct sshbuf *m) u_int msg_len; int r; - debug3("%s entering", __func__); + debug3_f("entering"); if (atomicio(read, sock, buf, sizeof(buf)) != sizeof(buf)) { if (errno == EPIPE) cleanup_exit(255); - fatal("%s: read: %s", __func__, strerror(errno)); + fatal_f("read: %s", strerror(errno)); } msg_len = PEEK_U32(buf); if (msg_len > 256 * 1024) - fatal("%s: read: bad msg_len %d", __func__, msg_len); + fatal_f("read: bad msg_len %d", msg_len); sshbuf_reset(m); if ((r = sshbuf_reserve(m, msg_len, &p)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "reserve"); if (atomicio(read, sock, p, msg_len) != msg_len) - fatal("%s: read: %s", __func__, strerror(errno)); + fatal_f("read: %s", strerror(errno)); } void @@ -170,14 +170,13 @@ mm_request_receive_expect(int sock, enum monitor_reqtype type, struct sshbuf *m) u_char rtype; int r; - debug3("%s entering: type %d", __func__, type); + debug3_f("entering, type %d", type); mm_request_receive(sock, m); if ((r = sshbuf_get_u8(m, &rtype)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (rtype != type) - fatal("%s: read: rtype %d != type %d", __func__, - rtype, type); + fatal_f("read: rtype %d != type %d", rtype, type); } #ifdef WITH_OPENSSL @@ -190,27 +189,27 @@ mm_choose_dh(int min, int nbits, int max) struct sshbuf *m; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u32(m, min)) != 0 || (r = sshbuf_put_u32(m, nbits)) != 0 || (r = sshbuf_put_u32(m, max)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_MODULI, m); - debug3("%s: waiting for MONITOR_ANS_MODULI", __func__); + debug3_f("waiting for MONITOR_ANS_MODULI"); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_MODULI, m); if ((r = sshbuf_get_u8(m, &success)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse success"); if (success == 0) - fatal("%s: MONITOR_ANS_MODULI failed", __func__); + fatal_f("MONITOR_ANS_MODULI failed"); if ((r = sshbuf_get_bignum2(m, &p)) != 0 || (r = sshbuf_get_bignum2(m, &g)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse group"); - debug3("%s: remaining %zu", __func__, sshbuf_len(m)); + debug3_f("remaining %zu", sshbuf_len(m)); sshbuf_free(m); return (dh_new_group(g, p)); @@ -227,21 +226,21 @@ mm_sshkey_sign(struct ssh *ssh, struct sshkey *key, u_char **sigp, size_t *lenp, u_int ndx = kex->host_key_index(key, 0, ssh); int r; - debug3("%s entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u32(m, ndx)) != 0 || (r = sshbuf_put_string(m, data, datalen)) != 0 || (r = sshbuf_put_cstring(m, hostkey_alg)) != 0 || (r = sshbuf_put_u32(m, compat)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_SIGN, m); - debug3("%s: waiting for MONITOR_ANS_SIGN", __func__); + debug3_f("waiting for MONITOR_ANS_SIGN"); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_SIGN, m); if ((r = sshbuf_get_string(m, sigp, lenp)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); sshbuf_free(m); return (0); @@ -259,20 +258,20 @@ mm_getpwnamallow(struct ssh *ssh, const char *username) u_char ok; const u_char *p; - debug3("%s entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_cstring(m, username)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PWNAM, m); - debug3("%s: waiting for MONITOR_ANS_PWNAM", __func__); + debug3_f("waiting for MONITOR_ANS_PWNAM"); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_PWNAM, m); if ((r = sshbuf_get_u8(m, &ok)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse success"); if (ok == 0) { pw = NULL; goto out; @@ -281,9 +280,9 @@ mm_getpwnamallow(struct ssh *ssh, const char *username) /* XXX don't like passing struct passwd like this */ pw = xcalloc(sizeof(*pw), 1); if ((r = sshbuf_get_string_direct(m, &p, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (len != sizeof(*pw)) - fatal("%s: struct passwd size mismatch", __func__); + fatal_f("struct passwd size mismatch"); memcpy(pw, p, sizeof(*pw)); if ((r = sshbuf_get_cstring(m, &pw->pw_name, NULL)) != 0 || @@ -296,24 +295,21 @@ mm_getpwnamallow(struct ssh *ssh, const char *username) #endif (r = sshbuf_get_cstring(m, &pw->pw_dir, NULL)) != 0 || (r = sshbuf_get_cstring(m, &pw->pw_shell, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse pw"); out: /* copy options block as a Match directive may have changed some */ if ((r = sshbuf_get_string_direct(m, &p, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse opts"); if (len != sizeof(*newopts)) - fatal("%s: option block size mismatch", __func__); + fatal_f("option block size mismatch"); newopts = xcalloc(sizeof(*newopts), 1); memcpy(newopts, p, sizeof(*newopts)); #define M_CP_STROPT(x) do { \ - if (newopts->x != NULL) { \ - if ((r = sshbuf_get_cstring(m, \ - &newopts->x, NULL)) != 0) \ - fatal("%s: buffer error: %s", \ - __func__, ssh_err(r)); \ - } \ + if (newopts->x != NULL && \ + (r = sshbuf_get_cstring(m, &newopts->x, NULL)) != 0) \ + fatal_fr(r, "parse %s", #x); \ } while (0) #define M_CP_STRARRAYOPT(x, nx) do { \ newopts->x = newopts->nx == 0 ? \ @@ -321,8 +317,7 @@ mm_getpwnamallow(struct ssh *ssh, const char *username) for (i = 0; i < newopts->nx; i++) { \ if ((r = sshbuf_get_cstring(m, \ &newopts->x[i], NULL)) != 0) \ - fatal("%s: buffer error: %s", \ - __func__, ssh_err(r)); \ + fatal_fr(r, "parse %s", #x); \ } \ } while (0) /* See comment in servconf.h */ @@ -350,17 +345,17 @@ mm_auth2_read_banner(void) char *banner; int r; - debug3("%s entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_AUTH2_READ_BANNER, m); sshbuf_reset(m); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_AUTH2_READ_BANNER, m); if ((r = sshbuf_get_cstring(m, &banner, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); sshbuf_free(m); /* treat empty banner as missing banner */ @@ -379,13 +374,13 @@ mm_inform_authserv(char *service, char *style) struct sshbuf *m; int r; - debug3("%s entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_cstring(m, service)) != 0 || (r = sshbuf_put_cstring(m, style ? style : "")) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_AUTHSERV, m); @@ -402,32 +397,31 @@ mm_auth_password(struct ssh *ssh, char *password) u_int maxtries = 0; #endif - debug3("%s entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_cstring(m, password)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_AUTHPASSWORD, m); - debug3("%s: waiting for MONITOR_ANS_AUTHPASSWORD", __func__); + debug3_f("waiting for MONITOR_ANS_AUTHPASSWORD"); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_AUTHPASSWORD, m); if ((r = sshbuf_get_u32(m, &authenticated)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); #ifdef USE_PAM if ((r = sshbuf_get_u32(m, &maxtries)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse PAM"); if (maxtries > INT_MAX) - fatal("%s: bad maxtries %u", __func__, maxtries); + fatal_f(r, "bad maxtries"); sshpam_set_maxtries_reached(maxtries); #endif sshbuf_free(m); - debug3("%s: user %sauthenticated", - __func__, authenticated ? "" : "not "); + debug3_f("user %sauthenticated", authenticated ? "" : "not "); return (authenticated); } @@ -454,33 +448,31 @@ mm_key_allowed(enum mm_keytype type, const char *user, const char *host, int r, allowed = 0; struct sshauthopt *opts = NULL; - debug3("%s entering", __func__); + debug3_f("entering"); if (authoptp != NULL) *authoptp = NULL; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u32(m, type)) != 0 || (r = sshbuf_put_cstring(m, user ? user : "")) != 0 || (r = sshbuf_put_cstring(m, host ? host : "")) != 0 || (r = sshkey_puts(key, m)) != 0 || (r = sshbuf_put_u32(m, pubkey_auth_attempt)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYALLOWED, m); - debug3("%s: waiting for MONITOR_ANS_KEYALLOWED", __func__); + debug3_f("waiting for MONITOR_ANS_KEYALLOWED"); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_KEYALLOWED, m); if ((r = sshbuf_get_u32(m, &allowed)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); - if (allowed && type == MM_USERKEY) { - if ((r = sshauthopt_deserialise(m, &opts)) != 0) - fatal("%s: sshauthopt_deserialise: %s", - __func__, ssh_err(r)); - } + fatal_fr(r, "parse"); + if (allowed && type == MM_USERKEY && + (r = sshauthopt_deserialise(m, &opts)) != 0) + fatal_fr(r, "sshauthopt_deserialise"); sshbuf_free(m); if (authoptp != NULL) { @@ -509,31 +501,31 @@ mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen, u_char sig_details_present, flags; u_int counter; - debug3("%s entering", __func__); + debug3_f("entering"); if (sig_detailsp != NULL) *sig_detailsp = NULL; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshkey_puts(key, m)) != 0 || (r = sshbuf_put_string(m, sig, siglen)) != 0 || (r = sshbuf_put_string(m, data, datalen)) != 0 || (r = sshbuf_put_cstring(m, sigalg == NULL ? "" : sigalg)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYVERIFY, m); - debug3("%s: waiting for MONITOR_ANS_KEYVERIFY", __func__); + debug3_f("waiting for MONITOR_ANS_KEYVERIFY"); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_KEYVERIFY, m); if ((r = sshbuf_get_u32(m, &encoded_ret)) != 0 || (r = sshbuf_get_u8(m, &sig_details_present)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (sig_details_present && encoded_ret == 0) { if ((r = sshbuf_get_u32(m, &counter)) != 0 || (r = sshbuf_get_u8(m, &flags)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse sig_details"); if (sig_detailsp != NULL) { *sig_detailsp = xcalloc(1, sizeof(**sig_detailsp)); (*sig_detailsp)->sk_counter = counter; @@ -555,12 +547,11 @@ mm_send_keystate(struct ssh *ssh, struct monitor *monitor) int r; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = ssh_packet_get_state(ssh, m)) != 0) - fatal("%s: get_state failed: %s", - __func__, ssh_err(r)); + fatal_fr(r, "ssh_packet_get_state"); mm_request_send(monitor->m_recvfd, MONITOR_REQ_KEYEXPORT, m); - debug3("%s: Finished sending state", __func__); + debug3_f("Finished sending state"); sshbuf_free(m); } @@ -574,7 +565,7 @@ mm_pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, size_t namebuflen) /* Kludge: ensure there are fds free to receive the pty/tty */ if ((tmp1 = dup(pmonitor->m_recvfd)) == -1 || (tmp2 = dup(pmonitor->m_recvfd)) == -1) { - error("%s: cannot allocate fds for pty", __func__); + error_f("cannot allocate fds for pty"); if (tmp1 > 0) close(tmp1); if (tmp2 > 0) @@ -585,34 +576,34 @@ mm_pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, size_t namebuflen) close(tmp2); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PTY, m); - debug3("%s: waiting for MONITOR_ANS_PTY", __func__); + debug3_f("waiting for MONITOR_ANS_PTY"); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_PTY, m); if ((r = sshbuf_get_u32(m, &success)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse success"); if (success == 0) { - debug3("%s: pty alloc failed", __func__); + debug3_f("pty alloc failed"); sshbuf_free(m); return (0); } if ((r = sshbuf_get_cstring(m, &p, NULL)) != 0 || (r = sshbuf_get_cstring(m, &msg, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); sshbuf_free(m); strlcpy(namebuf, p, namebuflen); /* Possible truncation */ free(p); if ((r = sshbuf_put(loginmsg, msg, strlen(msg))) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "put loginmsg"); free(msg); if ((*ptyfd = mm_receive_fd(pmonitor->m_recvfd)) == -1 || (*ttyfd = mm_receive_fd(pmonitor->m_recvfd)) == -1) - fatal("%s: receive fds failed", __func__); + fatal_f("receive fds failed"); /* Success */ return (1); @@ -627,9 +618,9 @@ mm_session_pty_cleanup2(Session *s) if (s->ttyfd == -1) return; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_cstring(m, s->tty)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assmble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PTYCLEANUP, m); sshbuf_free(m); @@ -802,7 +793,7 @@ mm_terminate(void) struct sshbuf *m; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_TERM, m); sshbuf_free(m); } @@ -828,31 +819,31 @@ mm_bsdauth_query(void *ctx, char **name, char **infotxt, char *challenge; int r; - debug3("%s: entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_BSDAUTHQUERY, m); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_BSDAUTHQUERY, m); if ((r = sshbuf_get_u32(m, &success)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse success"); if (success == 0) { - debug3("%s: no challenge", __func__); + debug3_f("no challenge"); sshbuf_free(m); return (-1); } /* Get the challenge, and format the response */ if ((r = sshbuf_get_cstring(m, &challenge, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse challenge"); sshbuf_free(m); mm_chall_setup(name, infotxt, numprompts, prompts, echo_on); (*prompts)[0] = challenge; - debug3("%s: received challenge: %s", __func__, challenge); + debug3_f("received challenge: %s", challenge); return (0); } @@ -863,21 +854,21 @@ mm_bsdauth_respond(void *ctx, u_int numresponses, char **responses) struct sshbuf *m; int r, authok; - debug3("%s: entering", __func__); + debug3_f("entering"); if (numresponses != 1) return (-1); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_cstring(m, responses[0])) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_BSDAUTHRESPOND, m); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_BSDAUTHRESPOND, m); if ((r = sshbuf_get_u32(m, &authok)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); sshbuf_free(m); return ((authok == 0) ? -1 : 0); @@ -931,15 +922,15 @@ mm_ssh_gssapi_server_ctx(Gssctxt **ctx, gss_OID goid) *ctx = NULL; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_string(m, goid->elements, goid->length)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GSSSETUP, m); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GSSSETUP, m); if ((r = sshbuf_get_u32(m, &major)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); sshbuf_free(m); return (major); @@ -955,19 +946,19 @@ mm_ssh_gssapi_accept_ctx(Gssctxt *ctx, gss_buffer_desc *in, int r; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_string(m, in->value, in->length)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GSSSTEP, m); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GSSSTEP, m); if ((r = sshbuf_get_u32(m, &major)) != 0 || (r = ssh_gssapi_get_buffer_desc(m, out)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (flagsp != NULL) { if ((r = sshbuf_get_u32(m, &flags)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse flags"); *flagsp = flags; } @@ -984,17 +975,17 @@ mm_ssh_gssapi_checkmic(Gssctxt *ctx, gss_buffer_t gssbuf, gss_buffer_t gssmic) int r; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_string(m, gssbuf->value, gssbuf->length)) != 0 || (r = sshbuf_put_string(m, gssmic->value, gssmic->length)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GSSCHECKMIC, m); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GSSCHECKMIC, m); if ((r = sshbuf_get_u32(m, &major)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); sshbuf_free(m); return(major); } @@ -1006,17 +997,17 @@ mm_ssh_gssapi_userok(char *user) int r, authenticated = 0; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_GSSUSEROK, m); mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_GSSUSEROK, m); if ((r = sshbuf_get_u32(m, &authenticated)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); sshbuf_free(m); - debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not "); + debug3_f("user %sauthenticated", authenticated ? "" : "not "); return (authenticated); } #endif /* GSSAPI */ diff --git a/msg.c b/msg.c index 574a566e3044..d22c4e477d1c 100644 --- a/msg.c +++ b/msg.c @@ -1,4 +1,4 @@ -/* $OpenBSD: msg.c,v 1.19 2020/06/24 15:08:53 markus Exp $ */ +/* $OpenBSD: msg.c,v 1.20 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2002 Markus Friedl. All rights reserved. * @@ -47,16 +47,16 @@ ssh_msg_send(int fd, u_char type, struct sshbuf *m) u_char buf[5]; u_int mlen = sshbuf_len(m); - debug3("%s: type %u", __func__, (unsigned int)type & 0xff); + debug3_f("type %u", (unsigned int)type & 0xff); put_u32(buf, mlen + 1); buf[4] = type; /* 1st byte of payload is mesg-type */ if (atomicio(vwrite, fd, buf, sizeof(buf)) != sizeof(buf)) { - error("%s: write: %s", __func__, strerror(errno)); + error_f("write: %s", strerror(errno)); return (-1); } if (atomicio(vwrite, fd, sshbuf_mutable_ptr(m), mlen) != mlen) { - error("%s: write: %s", __func__, strerror(errno)); + error_f("write: %s", strerror(errno)); return (-1); } return (0); @@ -73,21 +73,21 @@ ssh_msg_recv(int fd, struct sshbuf *m) if (atomicio(read, fd, buf, sizeof(buf)) != sizeof(buf)) { if (errno != EPIPE) - error("%s: read header: %s", __func__, strerror(errno)); + error_f("read header: %s", strerror(errno)); return (-1); } msg_len = get_u32(buf); if (msg_len > sshbuf_max_size(m)) { - error("%s: read: bad msg_len %u", __func__, msg_len); + error_f("read: bad msg_len %u", msg_len); return (-1); } sshbuf_reset(m); if ((r = sshbuf_reserve(m, msg_len, &p)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "reserve"); return -1; } if (atomicio(read, fd, p, msg_len) != msg_len) { - error("%s: read: %s", __func__, strerror(errno)); + error_f("read: %s", strerror(errno)); return (-1); } return (0); diff --git a/mux.c b/mux.c index 4dfcc712a732..24b3d6a02201 100644 --- a/mux.c +++ b/mux.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mux.c,v 1.84 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: mux.c,v 1.85 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2002-2008 Damien Miller * @@ -194,13 +194,13 @@ mux_master_session_cleanup_cb(struct ssh *ssh, int cid, void *unused) { Channel *cc, *c = channel_by_id(ssh, cid); - debug3("%s: entering for channel %d", __func__, cid); + debug3_f("entering for channel %d", cid); if (c == NULL) - fatal("%s: channel_by_id(%i) == NULL", __func__, cid); + fatal_f("channel_by_id(%i) == NULL", cid); if (c->ctl_chan != -1) { if ((cc = channel_by_id(ssh, c->ctl_chan)) == NULL) - fatal("%s: channel %d missing control channel %d", - __func__, c->self, c->ctl_chan); + fatal_f("channel %d missing control channel %d", + c->self, c->ctl_chan); c->ctl_chan = -1; cc->remote_id = 0; cc->have_remote_id = 0; @@ -216,19 +216,19 @@ mux_master_control_cleanup_cb(struct ssh *ssh, int cid, void *unused) { Channel *sc, *c = channel_by_id(ssh, cid); - debug3("%s: entering for channel %d", __func__, cid); + debug3_f("entering for channel %d", cid); if (c == NULL) - fatal("%s: channel_by_id(%i) == NULL", __func__, cid); + fatal_f("channel_by_id(%i) == NULL", cid); if (c->have_remote_id) { if ((sc = channel_by_id(ssh, c->remote_id)) == NULL) - fatal("%s: channel %d missing session channel %u", - __func__, c->self, c->remote_id); + fatal_f("channel %d missing session channel %u", + c->self, c->remote_id); c->remote_id = 0; c->have_remote_id = 0; sc->ctl_chan = -1; if (sc->type != SSH_CHANNEL_OPEN && sc->type != SSH_CHANNEL_OPENING) { - debug2("%s: channel %d: not open", __func__, sc->self); + debug2_f("channel %d: not open", sc->self); chan_mark_dead(ssh, sc); } else { if (sc->istate == CHAN_INPUT_OPEN) @@ -251,7 +251,7 @@ env_permitted(char *env) return 0; ret = snprintf(name, sizeof(name), "%.*s", (int)(cp - env), env); if (ret <= 0 || (size_t)ret >= sizeof(name)) { - error("%s: name '%.100s...' too long", __func__, env); + error_f("name '%.100s...' too long", env); return 0; } @@ -273,21 +273,21 @@ mux_master_process_hello(struct ssh *ssh, u_int rid, int r; if (state == NULL) - fatal("%s: channel %d: c->mux_ctx == NULL", __func__, c->self); + fatal_f("channel %d: c->mux_ctx == NULL", c->self); if (state->hello_rcvd) { - error("%s: HELLO received twice", __func__); + error_f("HELLO received twice"); return -1; } if ((r = sshbuf_get_u32(m, &ver)) != 0) { - error("%s: malformed message: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); return -1; } if (ver != SSHMUX_VER) { - error("%s: unsupported multiplexing protocol version %u " - "(expected %u)", __func__, ver, SSHMUX_VER); + error_f("unsupported multiplexing protocol version %u " + "(expected %u)", ver, SSHMUX_VER); return -1; } - debug2("%s: channel %d client version %u", __func__, c->self, ver); + debug2_f("channel %d client version %u", c->self, ver); /* No extensions are presently defined */ while (sshbuf_len(m) > 0) { @@ -296,12 +296,11 @@ mux_master_process_hello(struct ssh *ssh, u_int rid, if ((r = sshbuf_get_cstring(m, &name, NULL)) != 0 || (r = sshbuf_get_string_direct(m, NULL, &value_len)) != 0) { - error("%s: malformed extension: %s", - __func__, ssh_err(r)); + error_fr(r, "parse extension"); return -1; } - debug2("%s: Unrecognised extension \"%s\" length %zu", - __func__, name, value_len); + debug2_f("Unrecognised extension \"%s\" length %zu", + name, value_len); free(name); } state->hello_rcvd = 1; @@ -316,7 +315,7 @@ reply_ok(struct sshbuf *reply, u_int rid) if ((r = sshbuf_put_u32(reply, MUX_S_OK)) != 0 || (r = sshbuf_put_u32(reply, rid)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); } /* Enqueue an error response to the reply buffer */ @@ -328,7 +327,7 @@ reply_error(struct sshbuf *reply, u_int type, u_int rid, const char *msg) if ((r = sshbuf_put_u32(reply, type)) != 0 || (r = sshbuf_put_u32(reply, rid)) != 0 || (r = sshbuf_put_cstring(reply, msg)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); } static int @@ -363,7 +362,7 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid, free(cctx->env); free(cctx->term); free(cctx); - error("%s: malformed message", __func__); + error_f("malformed message"); return -1; } @@ -380,29 +379,28 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid, cctx->env[env_len++] = cp; cctx->env[env_len] = NULL; if (env_len > MUX_MAX_ENV_VARS) { - error("%s: >%d environment variables received, " - "ignoring additional", __func__, MUX_MAX_ENV_VARS); + error_f(">%d environment variables received, " + "ignoring additional", MUX_MAX_ENV_VARS); break; } } - debug2("%s: channel %d: request tty %d, X %d, agent %d, subsys %d, " - "term \"%s\", cmd \"%s\", env %u", __func__, c->self, + debug2_f("channel %d: request tty %d, X %d, agent %d, subsys %d, " + "term \"%s\", cmd \"%s\", env %u", c->self, cctx->want_tty, cctx->want_x_fwd, cctx->want_agent_fwd, cctx->want_subsys, cctx->term, cmd, env_len); if ((cctx->cmd = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put(cctx->cmd, cmd, strlen(cmd))) != 0) - fatal("%s: sshbuf_put: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put"); free(cmd); cmd = NULL; /* Gather fds from client */ for(i = 0; i < 3; i++) { if ((new_fd[i] = mm_receive_fd(c->sock)) == -1) { - error("%s: failed to receive fd %d from client", - __func__, i); + error_f("failed to receive fd %d from client", i); for (j = 0; j < i; j++) close(new_fd[j]); for (j = 0; j < env_len; j++) @@ -417,12 +415,12 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid, } } - debug3("%s: got fds stdin %d, stdout %d, stderr %d", __func__, + debug3_f("got fds stdin %d, stdout %d, stderr %d", new_fd[0], new_fd[1], new_fd[2]); /* XXX support multiple child sessions in future */ if (c->have_remote_id) { - debug2("%s: session already open", __func__); + debug2_f("session already open"); reply_error(reply, MUX_S_FAILURE, rid, "Multiple sessions not supported"); cleanup: @@ -443,7 +441,7 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid, if (options.control_master == SSHCTL_MASTER_ASK || options.control_master == SSHCTL_MASTER_AUTO_ASK) { if (!ask_permission("Allow shared connection to %s? ", host)) { - debug2("%s: session refused by user", __func__); + debug2_f("session refused by user"); reply_error(reply, MUX_S_PERMISSION_DENIED, rid, "Permission denied"); goto cleanup; @@ -452,7 +450,7 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid, /* Try to pick up ttymodes from client before it goes raw */ if (cctx->want_tty && tcgetattr(new_fd[0], &cctx->tio) == -1) - error("%s: tcgetattr: %s", __func__, strerror(errno)); + error_f("tcgetattr: %s", strerror(errno)); /* enable nonblocking unless tty */ if (!isatty(new_fd[0])) @@ -484,8 +482,8 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid, client_new_escape_filter_ctx((int)escape_char)); } - debug2("%s: channel_new: %d linked to control channel %d", - __func__, nc->self, nc->ctl_chan); + debug2_f("channel_new: %d linked to control channel %d", + nc->self, nc->ctl_chan); channel_send_open(ssh, nc->self); channel_register_open_confirm(ssh, nc->self, mux_session_confirm, cctx); @@ -503,13 +501,13 @@ mux_master_process_alive_check(struct ssh *ssh, u_int rid, { int r; - debug2("%s: channel %d: alive check", __func__, c->self); + debug2_f("channel %d: alive check", c->self); /* prepare reply */ if ((r = sshbuf_put_u32(reply, MUX_S_ALIVE)) != 0 || (r = sshbuf_put_u32(reply, rid)) != 0 || (r = sshbuf_put_u32(reply, (u_int)getpid())) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); return 0; } @@ -518,13 +516,13 @@ static int mux_master_process_terminate(struct ssh *ssh, u_int rid, Channel *c, struct sshbuf *m, struct sshbuf *reply) { - debug2("%s: channel %d: terminate request", __func__, c->self); + debug2_f("channel %d: terminate request", c->self); if (options.control_master == SSHCTL_MASTER_ASK || options.control_master == SSHCTL_MASTER_AUTO_ASK) { if (!ask_permission("Terminate shared connection to %s? ", host)) { - debug2("%s: termination refused by user", __func__); + debug2_f("termination refused by user"); reply_error(reply, MUX_S_PERMISSION_DENIED, rid, "Permission denied"); return 0; @@ -568,7 +566,7 @@ format_forward(u_int ftype, struct Forward *fwd) fwd->connect_host, fwd->connect_port); break; default: - fatal("%s: unknown forward type %u", __func__, ftype); + fatal_f("unknown forward type %u", ftype); } return ret; } @@ -615,11 +613,11 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) if ((c = channel_by_id(ssh, fctx->cid)) == NULL) { /* no channel for reply */ - error("%s: unknown channel", __func__); + error_f("unknown channel"); return; } if ((out = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if (fctx->fid >= options.num_remote_forwards || (options.remote_forwards[fctx->fid].connect_path == NULL && options.remote_forwards[fctx->fid].connect_host == NULL)) { @@ -627,15 +625,14 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) goto fail; } rfwd = &options.remote_forwards[fctx->fid]; - debug("%s: %s for: listen %d, connect %s:%d", __func__, + debug_f("%s for: listen %d, connect %s:%d", type == SSH2_MSG_REQUEST_SUCCESS ? "success" : "failure", rfwd->listen_port, rfwd->connect_path ? rfwd->connect_path : rfwd->connect_host, rfwd->connect_port); if (type == SSH2_MSG_REQUEST_SUCCESS) { if (rfwd->listen_port == 0) { if ((r = sshpkt_get_u32(ssh, &port)) != 0) - fatal("%s: packet error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse port"); if (port > 65535) { fatal("Invalid allocated port %u for " "mux remote forward to %s:%d", port, @@ -650,7 +647,7 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) (r = sshbuf_put_u32(out, fctx->rid)) != 0 || (r = sshbuf_put_u32(out, rfwd->allocated_port)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); channel_update_permission(ssh, rfwd->handle, rfwd->allocated_port); } else { @@ -667,8 +664,8 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) xasprintf(&failmsg, "remote port forwarding failed for " "listen port %d", rfwd->listen_port); - debug2("%s: clearing registered forwarding for listen %d, " - "connect %s:%d", __func__, rfwd->listen_port, + debug2_f("clearing registered forwarding for listen %d, " + "connect %s:%d", rfwd->listen_port, rfwd->connect_path ? rfwd->connect_path : rfwd->connect_host, rfwd->connect_port); @@ -679,15 +676,15 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) memset(rfwd, 0, sizeof(*rfwd)); } fail: - error("%s: %s", __func__, failmsg); + error_f("%s", failmsg); reply_error(out, MUX_S_FAILURE, fctx->rid, failmsg); free(failmsg); out: if ((r = sshbuf_put_stringb(c->output, out)) != 0) - fatal("%s: sshbuf_put_stringb: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue"); sshbuf_free(out); if (c->mux_pause <= 0) - fatal("%s: mux_pause %d", __func__, c->mux_pause); + fatal_f("mux_pause %d", c->mux_pause); c->mux_pause = 0; /* start processing messages again */ } @@ -712,7 +709,7 @@ mux_master_process_open_fwd(struct ssh *ssh, u_int rid, (r = sshbuf_get_u32(m, &cport)) != 0 || (lport != (u_int)PORT_STREAMLOCAL && lport > 65535) || (cport != (u_int)PORT_STREAMLOCAL && cport > 65535)) { - error("%s: malformed message", __func__); + error_f("malformed message"); ret = -1; goto out; } @@ -737,12 +734,12 @@ mux_master_process_open_fwd(struct ssh *ssh, u_int rid, else fwd.connect_host = connect_addr; - debug2("%s: channel %d: request %s", __func__, c->self, + debug2_f("channel %d: request %s", c->self, (fwd_desc = format_forward(ftype, &fwd))); if (ftype != MUX_FWD_LOCAL && ftype != MUX_FWD_REMOTE && ftype != MUX_FWD_DYNAMIC) { - logit("%s: invalid forwarding type %u", __func__, ftype); + logit_f("invalid forwarding type %u", ftype); invalid: free(listen_addr); free(connect_addr); @@ -751,26 +748,25 @@ mux_master_process_open_fwd(struct ssh *ssh, u_int rid, return 0; } if (ftype == MUX_FWD_DYNAMIC && fwd.listen_path) { - logit("%s: streamlocal and dynamic forwards " - "are mutually exclusive", __func__); + logit_f("streamlocal and dynamic forwards " + "are mutually exclusive"); goto invalid; } if (fwd.listen_port != PORT_STREAMLOCAL && fwd.listen_port >= 65536) { - logit("%s: invalid listen port %u", __func__, - fwd.listen_port); + logit_f("invalid listen port %u", fwd.listen_port); goto invalid; } if ((fwd.connect_port != PORT_STREAMLOCAL && fwd.connect_port >= 65536) || (ftype != MUX_FWD_DYNAMIC && ftype != MUX_FWD_REMOTE && fwd.connect_port == 0)) { - logit("%s: invalid connect port %u", __func__, + logit_f("invalid connect port %u", fwd.connect_port); goto invalid; } if (ftype != MUX_FWD_DYNAMIC && fwd.connect_host == NULL && fwd.connect_path == NULL) { - logit("%s: missing connect host", __func__); + logit_f("missing connect host"); goto invalid; } @@ -782,8 +778,7 @@ mux_master_process_open_fwd(struct ssh *ssh, u_int rid, if (compare_forward(&fwd, options.local_forwards + i)) { exists: - debug2("%s: found existing forwarding", - __func__); + debug2_f("found existing forwarding"); reply_ok(reply, rid); goto out; } @@ -795,13 +790,13 @@ mux_master_process_open_fwd(struct ssh *ssh, u_int rid, continue; if (fwd.listen_port != 0) goto exists; - debug2("%s: found allocated port", __func__); + debug2_f("found allocated port"); if ((r = sshbuf_put_u32(reply, MUX_S_REMOTE_PORT)) != 0 || (r = sshbuf_put_u32(reply, rid)) != 0 || (r = sshbuf_put_u32(reply, options.remote_forwards[i].allocated_port)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply FWD_REMOTE"); goto out; } break; @@ -810,7 +805,7 @@ mux_master_process_open_fwd(struct ssh *ssh, u_int rid, if (options.control_master == SSHCTL_MASTER_ASK || options.control_master == SSHCTL_MASTER_AUTO_ASK) { if (!ask_permission("Open %s on %s?", fwd_desc, host)) { - debug2("%s: forwarding refused by user", __func__); + debug2_f("forwarding refused by user"); reply_error(reply, MUX_S_PERMISSION_DENIED, rid, "Permission denied"); goto out; @@ -821,7 +816,7 @@ mux_master_process_open_fwd(struct ssh *ssh, u_int rid, if (!channel_setup_local_fwd_listener(ssh, &fwd, &options.fwd_opts)) { fail: - logit("%s: requested %s failed", __func__, fwd_desc); + logit_f("requested %s failed", fwd_desc); reply_error(reply, MUX_S_FAILURE, rid, "Port forwarding failed"); goto out; @@ -879,7 +874,7 @@ mux_master_process_close_fwd(struct ssh *ssh, u_int rid, (r = sshbuf_get_u32(m, &cport)) != 0 || (lport != (u_int)PORT_STREAMLOCAL && lport > 65535) || (cport != (u_int)PORT_STREAMLOCAL && cport > 65535)) { - error("%s: malformed message", __func__); + error_f("malformed message"); ret = -1; goto out; } @@ -905,7 +900,7 @@ mux_master_process_close_fwd(struct ssh *ssh, u_int rid, else fwd.connect_host = connect_addr; - debug2("%s: channel %d: request cancel %s", __func__, c->self, + debug2_f("channel %d: request cancel %s", c->self, (fwd_desc = format_forward(ftype, &fwd))); /* make sure this has been requested */ @@ -984,18 +979,16 @@ mux_master_process_stdio_fwd(struct ssh *ssh, u_int rid, (r = sshbuf_get_cstring(m, &chost, NULL)) != 0 || (r = sshbuf_get_u32(m, &cport)) != 0) { free(chost); - error("%s: malformed message", __func__); + error_f("malformed message"); return -1; } - debug2("%s: channel %d: request stdio fwd to %s:%u", - __func__, c->self, chost, cport); + debug2_f("channel %d: stdio fwd to %s:%u", c->self, chost, cport); /* Gather fds from client */ for(i = 0; i < 2; i++) { if ((new_fd[i] = mm_receive_fd(c->sock)) == -1) { - error("%s: failed to receive fd %d from client", - __func__, i); + error_f("failed to receive fd %d from client", i); for (j = 0; j < i; j++) close(new_fd[j]); free(chost); @@ -1007,12 +1000,11 @@ mux_master_process_stdio_fwd(struct ssh *ssh, u_int rid, } } - debug3("%s: got fds stdin %d, stdout %d", __func__, - new_fd[0], new_fd[1]); + debug3_f("got fds stdin %d, stdout %d", new_fd[0], new_fd[1]); /* XXX support multiple child sessions in future */ if (c->have_remote_id) { - debug2("%s: session already open", __func__); + debug2_f("session already open"); reply_error(reply, MUX_S_FAILURE, rid, "Multiple sessions not supported"); cleanup: @@ -1026,7 +1018,7 @@ mux_master_process_stdio_fwd(struct ssh *ssh, u_int rid, options.control_master == SSHCTL_MASTER_AUTO_ASK) { if (!ask_permission("Allow forward to %s:%u? ", chost, cport)) { - debug2("%s: stdio fwd refused by user", __func__); + debug2_f("stdio fwd refused by user"); reply_error(reply, MUX_S_PERMISSION_DENIED, rid, "Permission denied"); goto cleanup; @@ -1046,8 +1038,7 @@ mux_master_process_stdio_fwd(struct ssh *ssh, u_int rid, c->remote_id = nc->self; /* link control -> session channel */ c->have_remote_id = 1; - debug2("%s: channel_new: %d linked to control channel %d", - __func__, nc->self, nc->ctl_chan); + debug2_f("channel_new: %d control %d", nc->self, nc->ctl_chan); channel_register_cleanup(ssh, nc->self, mux_master_session_cleanup_cb, 1); @@ -1071,38 +1062,38 @@ mux_stdio_confirm(struct ssh *ssh, int id, int success, void *arg) int r; if (cctx == NULL) - fatal("%s: cctx == NULL", __func__); + fatal_f("cctx == NULL"); if ((c = channel_by_id(ssh, id)) == NULL) - fatal("%s: no channel for id %d", __func__, id); + fatal_f("no channel for id %d", id); if ((cc = channel_by_id(ssh, c->ctl_chan)) == NULL) - fatal("%s: channel %d lacks control channel %d", __func__, + fatal_f("channel %d lacks control channel %d", id, c->ctl_chan); if ((reply = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if (!success) { - debug3("%s: sending failure reply", __func__); + debug3_f("sending failure reply"); reply_error(reply, MUX_S_FAILURE, cctx->rid, "Session open refused by peer"); /* prepare reply */ goto done; } - debug3("%s: sending success reply", __func__); + debug3_f("sending success reply"); /* prepare reply */ if ((r = sshbuf_put_u32(reply, MUX_S_SESSION_OPENED)) != 0 || (r = sshbuf_put_u32(reply, cctx->rid)) != 0 || (r = sshbuf_put_u32(reply, c->self)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); done: /* Send reply */ if ((r = sshbuf_put_stringb(cc->output, reply)) != 0) - fatal("%s: sshbuf_put_stringb: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue"); sshbuf_free(reply); if (cc->mux_pause <= 0) - fatal("%s: mux_pause %d", __func__, cc->mux_pause); + fatal_f("mux_pause %d", cc->mux_pause); cc->mux_pause = 0; /* start processing messages again */ c->open_confirm_ctx = NULL; free(cctx); @@ -1112,13 +1103,13 @@ static int mux_master_process_stop_listening(struct ssh *ssh, u_int rid, Channel *c, struct sshbuf *m, struct sshbuf *reply) { - debug("%s: channel %d: stop listening", __func__, c->self); + debug_f("channel %d: stop listening", c->self); if (options.control_master == SSHCTL_MASTER_ASK || options.control_master == SSHCTL_MASTER_AUTO_ASK) { if (!ask_permission("Disable further multiplexing on shared " "connection to %s? ", host)) { - debug2("%s: stop listen refused by user", __func__); + debug2_f("stop listen refused by user"); reply_error(reply, MUX_S_PERMISSION_DENIED, rid, "Permission denied"); return 0; @@ -1144,12 +1135,12 @@ mux_master_process_proxy(struct ssh *ssh, u_int rid, { int r; - debug("%s: channel %d: proxy request", __func__, c->self); + debug_f("channel %d: proxy request", c->self); c->mux_rcb = channel_proxy_downstream; if ((r = sshbuf_put_u32(reply, MUX_S_PROXY)) != 0 || (r = sshbuf_put_u32(reply, rid)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); return 0; } @@ -1164,7 +1155,7 @@ mux_master_read_cb(struct ssh *ssh, Channel *c) int r, ret = -1; if ((out = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); /* Setup ctx and */ if (c->mux_ctx == NULL) { @@ -1176,12 +1167,11 @@ mux_master_read_cb(struct ssh *ssh, Channel *c) /* Send hello */ if ((r = sshbuf_put_u32(out, MUX_MSG_HELLO)) != 0 || (r = sshbuf_put_u32(out, SSHMUX_VER)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); /* no extensions */ if ((r = sshbuf_put_stringb(c->output, out)) != 0) - fatal("%s: sshbuf_put_stringb: %s", - __func__, ssh_err(r)); - debug3("%s: channel %d: hello sent", __func__, c->self); + fatal_fr(r, "enqueue"); + debug3_f("channel %d: hello sent", c->self); ret = 0; goto out; } @@ -1189,21 +1179,21 @@ mux_master_read_cb(struct ssh *ssh, Channel *c) /* Channel code ensures that we receive whole packets */ if ((r = sshbuf_froms(c->input, &in)) != 0) { malf: - error("%s: malformed message", __func__); + error_f("malformed message"); goto out; } if ((r = sshbuf_get_u32(in, &type)) != 0) goto malf; - debug3("%s: channel %d packet type 0x%08x len %zu", - __func__, c->self, type, sshbuf_len(in)); + debug3_f("channel %d packet type 0x%08x len %zu", c->self, + type, sshbuf_len(in)); if (type == MUX_MSG_HELLO) rid = 0; else { if (!state->hello_rcvd) { - error("%s: expected MUX_MSG_HELLO(0x%08x), " - "received 0x%08x", __func__, MUX_MSG_HELLO, type); + error_f("expected MUX_MSG_HELLO(0x%08x), " + "received 0x%08x", MUX_MSG_HELLO, type); goto out; } if ((r = sshbuf_get_u32(in, &rid)) != 0) @@ -1218,16 +1208,14 @@ mux_master_read_cb(struct ssh *ssh, Channel *c) } } if (mux_master_handlers[i].handler == NULL) { - error("%s: unsupported mux message 0x%08x", __func__, type); + error_f("unsupported mux message 0x%08x", type); reply_error(out, MUX_S_FAILURE, rid, "unsupported request"); ret = 0; } /* Enqueue reply packet */ - if (sshbuf_len(out) != 0) { - if ((r = sshbuf_put_stringb(c->output, out)) != 0) - fatal("%s: sshbuf_put_stringb: %s", - __func__, ssh_err(r)); - } + if (sshbuf_len(out) != 0 && + (r = sshbuf_put_stringb(c->output, out)) != 0) + fatal_fr(r, "enqueue"); out: sshbuf_free(in); sshbuf_free(out); @@ -1241,21 +1229,19 @@ mux_exit_message(struct ssh *ssh, Channel *c, int exitval) Channel *mux_chan; int r; - debug3("%s: channel %d: exit message, exitval %d", __func__, c->self, - exitval); + debug3_f("channel %d: exit message, exitval %d", c->self, exitval); if ((mux_chan = channel_by_id(ssh, c->ctl_chan)) == NULL) - fatal("%s: channel %d missing mux channel %d", - __func__, c->self, c->ctl_chan); + fatal_f("channel %d missing mux %d", c->self, c->ctl_chan); /* Append exit message packet to control socket output queue */ if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_S_EXIT_MESSAGE)) != 0 || (r = sshbuf_put_u32(m, c->self)) != 0 || (r = sshbuf_put_u32(m, exitval)) != 0 || (r = sshbuf_put_stringb(mux_chan->output, m)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); sshbuf_free(m); } @@ -1266,19 +1252,18 @@ mux_tty_alloc_failed(struct ssh *ssh, Channel *c) Channel *mux_chan; int r; - debug3("%s: channel %d: TTY alloc failed", __func__, c->self); + debug3_f("channel %d: TTY alloc failed", c->self); if ((mux_chan = channel_by_id(ssh, c->ctl_chan)) == NULL) - fatal("%s: channel %d missing mux channel %d", - __func__, c->self, c->ctl_chan); + fatal_f("channel %d missing mux %d", c->self, c->ctl_chan); /* Append exit message packet to control socket output queue */ if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_S_TTY_ALLOC_FAIL)) != 0 || (r = sshbuf_put_u32(m, c->self)) != 0 || (r = sshbuf_put_stringb(mux_chan->output, m)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); sshbuf_free(m); } @@ -1313,7 +1298,7 @@ muxserver_listen(struct ssh *ssh) rbuf[sizeof(rbuf) - 1] = '\0'; options.control_path = NULL; xasprintf(&options.control_path, "%s.%s", orig_control_path, rbuf); - debug3("%s: temporary control path %s", __func__, options.control_path); + debug3_f("temporary control path %s", options.control_path); old_umask = umask(0177); muxserver_sock = unix_listener(options.control_path, 64, 0); @@ -1342,7 +1327,7 @@ muxserver_listen(struct ssh *ssh) /* Now atomically "move" the mux socket into position */ if (link(options.control_path, orig_control_path) != 0) { if (errno != EEXIST) { - fatal("%s: link mux listener %s => %s: %s", __func__, + fatal_f("link mux listener %s => %s: %s", options.control_path, orig_control_path, strerror(errno)); } @@ -1362,7 +1347,7 @@ muxserver_listen(struct ssh *ssh) CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, options.control_path, 1); mux_listener_channel->mux_rcb = mux_master_read_cb; - debug3("%s: mux listener channel %d fd %d", __func__, + debug3_f("mux listener channel %d fd %d", mux_listener_channel->self, mux_listener_channel->sock); } @@ -1377,17 +1362,17 @@ mux_session_confirm(struct ssh *ssh, int id, int success, void *arg) struct sshbuf *reply; if (cctx == NULL) - fatal("%s: cctx == NULL", __func__); + fatal_f("cctx == NULL"); if ((c = channel_by_id(ssh, id)) == NULL) - fatal("%s: no channel for id %d", __func__, id); + fatal_f("no channel for id %d", id); if ((cc = channel_by_id(ssh, c->ctl_chan)) == NULL) - fatal("%s: channel %d lacks control channel %d", __func__, + fatal_f("channel %d lacks control channel %d", id, c->ctl_chan); if ((reply = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if (!success) { - debug3("%s: sending failure reply", __func__); + debug3_f("sending failure reply"); reply_error(reply, MUX_S_FAILURE, cctx->rid, "Session open refused by peer"); goto done; @@ -1416,27 +1401,27 @@ mux_session_confirm(struct ssh *ssh, int id, int success, void *arg) debug("Requesting authentication agent forwarding."); channel_request_start(ssh, id, "auth-agent-req@openssh.com", 0); if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: packet error: %s", __func__, ssh_err(r)); + fatal_fr(r, "send"); } client_session2_setup(ssh, id, cctx->want_tty, cctx->want_subsys, cctx->term, &cctx->tio, c->rfd, cctx->cmd, cctx->env); - debug3("%s: sending success reply", __func__); + debug3_f("sending success reply"); /* prepare reply */ if ((r = sshbuf_put_u32(reply, MUX_S_SESSION_OPENED)) != 0 || (r = sshbuf_put_u32(reply, cctx->rid)) != 0 || (r = sshbuf_put_u32(reply, c->self)) != 0) - fatal("%s: reply: %s", __func__, ssh_err(r)); + fatal_fr(r, "reply"); done: /* Send reply */ if ((r = sshbuf_put_stringb(cc->output, reply)) != 0) - fatal("%s: sshbuf_put_stringb: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue"); sshbuf_free(reply); if (cc->mux_pause <= 0) - fatal("%s: mux_pause %d", __func__, cc->mux_pause); + fatal_f("mux_pause %d", cc->mux_pause); cc->mux_pause = 0; /* start processing messages again */ c->open_confirm_ctx = NULL; sshbuf_free(cctx->cmd); @@ -1485,7 +1470,7 @@ mux_client_read(int fd, struct sshbuf *b, size_t need) pfd.fd = fd; pfd.events = POLLIN; if ((r = sshbuf_reserve(b, need, &p)) != 0) - fatal("%s: reserve: %s", __func__, ssh_err(r)); + fatal_fr(r, "reserve"); for (have = 0; have < need; ) { if (muxclient_terminate) { errno = EINTR; @@ -1527,9 +1512,9 @@ mux_client_write_packet(int fd, struct sshbuf *m) pfd.fd = fd; pfd.events = POLLOUT; if ((queue = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_stringb(queue, m)) != 0) - fatal("%s: sshbuf_put_stringb: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue"); need = sshbuf_len(queue); ptr = sshbuf_ptr(queue); @@ -1578,10 +1563,10 @@ mux_client_read_packet(int fd, struct sshbuf *m) int r, oerrno; if ((queue = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if (mux_client_read(fd, queue, 4) != 0) { if ((oerrno = errno) == EPIPE) - debug3("%s: read header failed: %s", __func__, + debug3_f("read header failed: %s", strerror(errno)); sshbuf_free(queue); errno = oerrno; @@ -1590,14 +1575,14 @@ mux_client_read_packet(int fd, struct sshbuf *m) need = PEEK_U32(sshbuf_ptr(queue)); if (mux_client_read(fd, queue, need) != 0) { oerrno = errno; - debug3("%s: read body failed: %s", __func__, strerror(errno)); + debug3_f("read body failed: %s", strerror(errno)); sshbuf_free(queue); errno = oerrno; return -1; } if ((r = sshbuf_get_string_direct(queue, &ptr, &have)) != 0 || (r = sshbuf_put(m, ptr, have)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "dequeue"); sshbuf_free(queue); return 0; } @@ -1610,14 +1595,14 @@ mux_client_hello_exchange(int fd) int r, ret = -1; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_MSG_HELLO)) != 0 || (r = sshbuf_put_u32(m, SSHMUX_VER)) != 0) - fatal("%s: hello: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble hello"); /* no extensions */ if (mux_client_write_packet(fd, m) != 0) { - debug("%s: write packet: %s", __func__, strerror(errno)); + debug_f("write packet: %s", strerror(errno)); goto out; } @@ -1625,33 +1610,31 @@ mux_client_hello_exchange(int fd) /* Read their HELLO */ if (mux_client_read_packet(fd, m) != 0) { - debug("%s: read packet failed", __func__); + debug_f("read packet failed"); goto out; } if ((r = sshbuf_get_u32(m, &type)) != 0) - fatal("%s: decode type: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); if (type != MUX_MSG_HELLO) { - error("%s: expected HELLO (%u) received %u", - __func__, MUX_MSG_HELLO, type); + error_f("expected HELLO (%u) got %u", MUX_MSG_HELLO, type); goto out; } if ((r = sshbuf_get_u32(m, &ver)) != 0) - fatal("%s: decode version: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse version"); if (ver != SSHMUX_VER) { error("Unsupported multiplexing protocol version %d " "(expected %d)", ver, SSHMUX_VER); goto out; } - debug2("%s: master version %u", __func__, ver); + debug2_f("master version %u", ver); /* No extensions are presently defined */ while (sshbuf_len(m) > 0) { char *name = NULL; if ((r = sshbuf_get_cstring(m, &name, NULL)) != 0 || (r = sshbuf_skip_string(m)) != 0) { /* value */ - error("%s: malformed extension: %s", - __func__, ssh_err(r)); + error_fr(r, "parse extension"); goto out; } debug2("Unrecognised master extension \"%s\"", name); @@ -1672,16 +1655,16 @@ mux_client_request_alive(int fd) u_int pid, type, rid; int r; - debug3("%s: entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_C_ALIVE_CHECK)) != 0 || (r = sshbuf_put_u32(m, muxclient_request_id)) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "assemble"); if (mux_client_write_packet(fd, m) != 0) - fatal("%s: write packet: %s", __func__, strerror(errno)); + fatal_f("write packet: %s", strerror(errno)); sshbuf_reset(m); @@ -1692,23 +1675,23 @@ mux_client_request_alive(int fd) } if ((r = sshbuf_get_u32(m, &type)) != 0) - fatal("%s: decode type: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); if (type != MUX_S_ALIVE) { if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); - fatal("%s: master returned error: %s", __func__, e); + fatal_fr(r, "parse error message"); + fatal_f("master returned error: %s", e); } if ((r = sshbuf_get_u32(m, &rid)) != 0) - fatal("%s: decode remote ID: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse remote ID"); if (rid != muxclient_request_id) - fatal("%s: out of sequence reply: my id %u theirs %u", - __func__, muxclient_request_id, rid); + fatal_f("out of sequence reply: my id %u theirs %u", + muxclient_request_id, rid); if ((r = sshbuf_get_u32(m, &pid)) != 0) - fatal("%s: decode PID: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse PID"); sshbuf_free(m); - debug3("%s: done pid = %u", __func__, pid); + debug3_f("done pid = %u", pid); muxclient_request_id++; @@ -1723,16 +1706,16 @@ mux_client_request_terminate(int fd) u_int type, rid; int r; - debug3("%s: entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_C_TERMINATE)) != 0 || (r = sshbuf_put_u32(m, muxclient_request_id)) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "request"); if (mux_client_write_packet(fd, m) != 0) - fatal("%s: write packet: %s", __func__, strerror(errno)); + fatal_f("write packet: %s", strerror(errno)); sshbuf_reset(m); @@ -1743,30 +1726,28 @@ mux_client_request_terminate(int fd) sshbuf_free(m); return; } - fatal("%s: read from master failed: %s", - __func__, strerror(errno)); + fatal_f("read from master failed: %s", strerror(errno)); } if ((r = sshbuf_get_u32(m, &type)) != 0 || (r = sshbuf_get_u32(m, &rid)) != 0) - fatal("%s: decode: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (rid != muxclient_request_id) - fatal("%s: out of sequence reply: my id %u theirs %u", - __func__, muxclient_request_id, rid); + fatal_f("out of sequence reply: my id %u theirs %u", + muxclient_request_id, rid); switch (type) { case MUX_S_OK: break; case MUX_S_PERMISSION_DENIED: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse error message"); fatal("Master refused termination request: %s", e); case MUX_S_FAILURE: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); - fatal("%s: termination request failed: %s", __func__, e); + fatal_fr(r, "parse error message"); + fatal_f("termination request failed: %s", e); default: - fatal("%s: unexpected response from master 0x%08x", - __func__, type); + fatal_f("unexpected response from master 0x%08x", type); } sshbuf_free(m); muxclient_request_id++; @@ -1804,7 +1785,7 @@ mux_client_forward(int fd, int cancel_flag, u_int ftype, struct Forward *fwd) chost = fwd->connect_host; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, type)) != 0 || (r = sshbuf_put_u32(m, muxclient_request_id)) != 0 || (r = sshbuf_put_u32(m, ftype)) != 0 || @@ -1812,10 +1793,10 @@ mux_client_forward(int fd, int cancel_flag, u_int ftype, struct Forward *fwd) (r = sshbuf_put_u32(m, fwd->listen_port)) != 0 || (r = sshbuf_put_cstring(m, chost)) != 0 || (r = sshbuf_put_u32(m, fwd->connect_port)) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "request"); if (mux_client_write_packet(fd, m) != 0) - fatal("%s: write packet: %s", __func__, strerror(errno)); + fatal_f("write packet: %s", strerror(errno)); sshbuf_reset(m); @@ -1827,19 +1808,19 @@ mux_client_forward(int fd, int cancel_flag, u_int ftype, struct Forward *fwd) if ((r = sshbuf_get_u32(m, &type)) != 0 || (r = sshbuf_get_u32(m, &rid)) != 0) - fatal("%s: decode: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (rid != muxclient_request_id) - fatal("%s: out of sequence reply: my id %u theirs %u", - __func__, muxclient_request_id, rid); + fatal_f("out of sequence reply: my id %u theirs %u", + muxclient_request_id, rid); switch (type) { case MUX_S_OK: break; case MUX_S_REMOTE_PORT: if (cancel_flag) - fatal("%s: got MUX_S_REMOTE_PORT for cancel", __func__); + fatal_f("got MUX_S_REMOTE_PORT for cancel"); if ((r = sshbuf_get_u32(m, &fwd->allocated_port)) != 0) - fatal("%s: decode port: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse port"); verbose("Allocated port %u for remote forward to %s:%d", fwd->allocated_port, fwd->connect_host ? fwd->connect_host : "", @@ -1849,19 +1830,18 @@ mux_client_forward(int fd, int cancel_flag, u_int ftype, struct Forward *fwd) break; case MUX_S_PERMISSION_DENIED: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse error message"); sshbuf_free(m); error("Master refused forwarding request: %s", e); return -1; case MUX_S_FAILURE: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse error message"); sshbuf_free(m); - error("%s: forwarding request failed: %s", __func__, e); + error_f("forwarding request failed: %s", e); return -1; default: - fatal("%s: unexpected response from master 0x%08x", - __func__, type); + fatal_f("unexpected response from master 0x%08x", type); } sshbuf_free(m); @@ -1874,7 +1854,7 @@ mux_client_forwards(int fd, int cancel_flag) { int i, ret = 0; - debug3("%s: %s forwardings: %d local, %d remote", __func__, + debug3_f("%s forwardings: %d local, %d remote", cancel_flag ? "cancel" : "request", options.num_local_forwards, options.num_remote_forwards); @@ -1904,17 +1884,17 @@ mux_client_request_session(int fd) extern char **environ; int r, i, rawmode; - debug3("%s: entering", __func__); + debug3_f("entering"); if ((muxserver_pid = mux_client_request_alive(fd)) == 0) { - error("%s: master alive request failed", __func__); + error_f("master alive request failed"); return -1; } ssh_signal(SIGPIPE, SIG_IGN); if (stdin_null_flag && stdfd_devnull(1, 0, 0) == -1) - fatal("%s: stdfd_devnull failed", __func__); + fatal_f("stdfd_devnull failed"); if ((term = getenv("TERM")) == NULL) term = ""; @@ -1923,7 +1903,7 @@ mux_client_request_session(int fd) echar = (u_int)options.escape_char; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_C_NEW_SESSION)) != 0 || (r = sshbuf_put_u32(m, muxclient_request_id)) != 0 || (r = sshbuf_put_string(m, NULL, 0)) != 0 || /* reserved */ @@ -1934,7 +1914,7 @@ mux_client_request_session(int fd) (r = sshbuf_put_u32(m, echar)) != 0 || (r = sshbuf_put_cstring(m, term)) != 0 || (r = sshbuf_put_stringb(m, command)) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "request"); /* Pass environment */ if (options.num_send_env > 0 && environ != NULL) { @@ -1942,69 +1922,67 @@ mux_client_request_session(int fd) if (!env_permitted(environ[i])) continue; if ((r = sshbuf_put_cstring(m, environ[i])) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "request sendenv"); } } for (i = 0; i < options.num_setenv; i++) { if ((r = sshbuf_put_cstring(m, options.setenv[i])) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "request setenv"); } if (mux_client_write_packet(fd, m) != 0) - fatal("%s: write packet: %s", __func__, strerror(errno)); + fatal_f("write packet: %s", strerror(errno)); /* Send the stdio file descriptors */ if (mm_send_fd(fd, STDIN_FILENO) == -1 || mm_send_fd(fd, STDOUT_FILENO) == -1 || mm_send_fd(fd, STDERR_FILENO) == -1) - fatal("%s: send fds failed", __func__); + fatal_f("send fds failed"); - debug3("%s: session request sent", __func__); + debug3_f("session request sent"); /* Read their reply */ sshbuf_reset(m); if (mux_client_read_packet(fd, m) != 0) { - error("%s: read from master failed: %s", - __func__, strerror(errno)); + error_f("read from master failed: %s", strerror(errno)); sshbuf_free(m); return -1; } if ((r = sshbuf_get_u32(m, &type)) != 0 || (r = sshbuf_get_u32(m, &rid)) != 0) - fatal("%s: decode: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (rid != muxclient_request_id) - fatal("%s: out of sequence reply: my id %u theirs %u", - __func__, muxclient_request_id, rid); + fatal_f("out of sequence reply: my id %u theirs %u", + muxclient_request_id, rid); switch (type) { case MUX_S_SESSION_OPENED: if ((r = sshbuf_get_u32(m, &sid)) != 0) - fatal("%s: decode ID: %s", __func__, ssh_err(r)); - debug("%s: master session id: %u", __func__, sid); + fatal_fr(r, "parse session ID"); + debug_f("master session id: %u", sid); break; case MUX_S_PERMISSION_DENIED: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse error message"); error("Master refused session request: %s", e); sshbuf_free(m); return -1; case MUX_S_FAILURE: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); - error("%s: session request failed: %s", __func__, e); + fatal_fr(r, "parse error message"); + error_f("session request failed: %s", e); sshbuf_free(m); return -1; default: sshbuf_free(m); - error("%s: unexpected response from master 0x%08x", - __func__, type); + error_f("unexpected response from master 0x%08x", type); return -1; } muxclient_request_id++; if (pledge("stdio proc tty", NULL) == -1) - fatal("%s pledge(): %s", __func__, strerror(errno)); + fatal_f("pledge(): %s", strerror(errno)); platform_pledge_mux(); ssh_signal(SIGHUP, control_client_sighandler); @@ -2028,40 +2006,34 @@ mux_client_request_session(int fd) if (mux_client_read_packet(fd, m) != 0) break; if ((r = sshbuf_get_u32(m, &type)) != 0) - fatal("%s: decode type: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); switch (type) { case MUX_S_TTY_ALLOC_FAIL: if ((r = sshbuf_get_u32(m, &esid)) != 0) - fatal("%s: decode ID: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse session ID"); if (esid != sid) - fatal("%s: tty alloc fail on unknown session: " - "my id %u theirs %u", - __func__, sid, esid); + fatal_f("tty alloc fail on unknown session: " + "my id %u theirs %u", sid, esid); leave_raw_mode(options.request_tty == REQUEST_TTY_FORCE); rawmode = 0; continue; case MUX_S_EXIT_MESSAGE: if ((r = sshbuf_get_u32(m, &esid)) != 0) - fatal("%s: decode ID: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse session ID"); if (esid != sid) - fatal("%s: exit on unknown session: " - "my id %u theirs %u", - __func__, sid, esid); + fatal_f("exit on unknown session: " + "my id %u theirs %u", sid, esid); if (exitval_seen) - fatal("%s: exitval sent twice", __func__); + fatal_f("exitval sent twice"); if ((r = sshbuf_get_u32(m, &exitval)) != 0) - fatal("%s: decode exit value: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse exitval"); exitval_seen = 1; continue; default: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", - __func__, ssh_err(r)); - fatal("%s: master returned error: %s", __func__, e); + fatal_fr(r, "parse error message"); + fatal_f("master returned error: %s", e); } } @@ -2093,12 +2065,12 @@ mux_client_proxy(int fd) int r; if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_C_PROXY)) != 0 || (r = sshbuf_put_u32(m, muxclient_request_id)) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "request"); if (mux_client_write_packet(fd, m) != 0) - fatal("%s: write packet: %s", __func__, strerror(errno)); + fatal_f("write packet: %s", strerror(errno)); sshbuf_reset(m); @@ -2109,18 +2081,18 @@ mux_client_proxy(int fd) } if ((r = sshbuf_get_u32(m, &type)) != 0 || (r = sshbuf_get_u32(m, &rid)) != 0) - fatal("%s: decode: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (rid != muxclient_request_id) - fatal("%s: out of sequence reply: my id %u theirs %u", - __func__, muxclient_request_id, rid); + fatal_f("out of sequence reply: my id %u theirs %u", + muxclient_request_id, rid); if (type != MUX_S_PROXY) { if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); - fatal("%s: master returned error: %s", __func__, e); + fatal_fr(r, "parse error message"); + fatal_f("master returned error: %s", e); } sshbuf_free(m); - debug3("%s: done", __func__); + debug3_f("done"); muxclient_request_id++; return 0; } @@ -2133,77 +2105,75 @@ mux_client_request_stdio_fwd(int fd) u_int type, rid, sid; int r; - debug3("%s: entering", __func__); + debug3_f("entering"); if ((muxserver_pid = mux_client_request_alive(fd)) == 0) { - error("%s: master alive request failed", __func__); + error_f("master alive request failed"); return -1; } ssh_signal(SIGPIPE, SIG_IGN); if (stdin_null_flag && stdfd_devnull(1, 0, 0) == -1) - fatal("%s: stdfd_devnull failed", __func__); + fatal_f("stdfd_devnull failed"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_C_NEW_STDIO_FWD)) != 0 || (r = sshbuf_put_u32(m, muxclient_request_id)) != 0 || (r = sshbuf_put_string(m, NULL, 0)) != 0 || /* reserved */ (r = sshbuf_put_cstring(m, options.stdio_forward_host)) != 0 || (r = sshbuf_put_u32(m, options.stdio_forward_port)) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "request"); if (mux_client_write_packet(fd, m) != 0) - fatal("%s: write packet: %s", __func__, strerror(errno)); + fatal_f("write packet: %s", strerror(errno)); /* Send the stdio file descriptors */ if (mm_send_fd(fd, STDIN_FILENO) == -1 || mm_send_fd(fd, STDOUT_FILENO) == -1) - fatal("%s: send fds failed", __func__); + fatal_f("send fds failed"); if (pledge("stdio proc tty", NULL) == -1) - fatal("%s pledge(): %s", __func__, strerror(errno)); + fatal_f("pledge(): %s", strerror(errno)); platform_pledge_mux(); - debug3("%s: stdio forward request sent", __func__); + debug3_f("stdio forward request sent"); /* Read their reply */ sshbuf_reset(m); if (mux_client_read_packet(fd, m) != 0) { - error("%s: read from master failed: %s", - __func__, strerror(errno)); + error_f("read from master failed: %s", strerror(errno)); sshbuf_free(m); return -1; } if ((r = sshbuf_get_u32(m, &type)) != 0 || (r = sshbuf_get_u32(m, &rid)) != 0) - fatal("%s: decode: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (rid != muxclient_request_id) - fatal("%s: out of sequence reply: my id %u theirs %u", - __func__, muxclient_request_id, rid); + fatal_f("out of sequence reply: my id %u theirs %u", + muxclient_request_id, rid); switch (type) { case MUX_S_SESSION_OPENED: if ((r = sshbuf_get_u32(m, &sid)) != 0) - fatal("%s: decode ID: %s", __func__, ssh_err(r)); - debug("%s: master session id: %u", __func__, sid); + fatal_fr(r, "parse session ID"); + debug_f("master session id: %u", sid); break; case MUX_S_PERMISSION_DENIED: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse error message"); sshbuf_free(m); fatal("Master refused stdio forwarding request: %s", e); case MUX_S_FAILURE: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse error message"); sshbuf_free(m); fatal("Stdio forwarding request failed: %s", e); default: sshbuf_free(m); - error("%s: unexpected response from master 0x%08x", - __func__, type); + error_f("unexpected response from master 0x%08x", type); return -1; } muxclient_request_id++; @@ -2221,10 +2191,9 @@ mux_client_request_stdio_fwd(int fd) if (errno == EPIPE || (errno == EINTR && muxclient_terminate != 0)) return 0; - fatal("%s: mux_client_read_packet: %s", - __func__, strerror(errno)); + fatal_f("mux_client_read_packet: %s", strerror(errno)); } - fatal("%s: master returned unexpected message %u", __func__, type); + fatal_f("master returned unexpected message %u", type); } static void @@ -2235,45 +2204,43 @@ mux_client_request_stop_listening(int fd) u_int type, rid; int r; - debug3("%s: entering", __func__); + debug3_f("entering"); if ((m = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if ((r = sshbuf_put_u32(m, MUX_C_STOP_LISTENING)) != 0 || (r = sshbuf_put_u32(m, muxclient_request_id)) != 0) - fatal("%s: request: %s", __func__, ssh_err(r)); + fatal_fr(r, "request"); if (mux_client_write_packet(fd, m) != 0) - fatal("%s: write packet: %s", __func__, strerror(errno)); + fatal_f("write packet: %s", strerror(errno)); sshbuf_reset(m); /* Read their reply */ if (mux_client_read_packet(fd, m) != 0) - fatal("%s: read from master failed: %s", - __func__, strerror(errno)); + fatal_f("read from master failed: %s", strerror(errno)); if ((r = sshbuf_get_u32(m, &type)) != 0 || (r = sshbuf_get_u32(m, &rid)) != 0) - fatal("%s: decode: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (rid != muxclient_request_id) - fatal("%s: out of sequence reply: my id %u theirs %u", - __func__, muxclient_request_id, rid); + fatal_f("out of sequence reply: my id %u theirs %u", + muxclient_request_id, rid); switch (type) { case MUX_S_OK: break; case MUX_S_PERMISSION_DENIED: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse error message"); fatal("Master refused stop listening request: %s", e); case MUX_S_FAILURE: if ((r = sshbuf_get_cstring(m, &e, NULL)) != 0) - fatal("%s: decode error: %s", __func__, ssh_err(r)); - fatal("%s: stop listening request failed: %s", __func__, e); + fatal_fr(r, "parse error message"); + fatal_f("stop listening request failed: %s", e); default: - fatal("%s: unexpected response from master 0x%08x", - __func__, type); + fatal_f("unexpected response from master 0x%08x", type); } sshbuf_free(m); muxclient_request_id++; @@ -2314,7 +2281,7 @@ muxclient(const char *path) (unsigned int)sizeof(addr.sun_path)); if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) == -1) - fatal("%s socket(): %s", __func__, strerror(errno)); + fatal_f("socket(): %s", strerror(errno)); if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) { switch (muxclient_command) { @@ -2341,7 +2308,7 @@ muxclient(const char *path) set_nonblock(sock); if (mux_client_hello_exchange(sock) != 0) { - error("%s: master hello exchange failed", __func__); + error_f("master hello exchange failed"); close(sock); return -1; } @@ -2349,7 +2316,7 @@ muxclient(const char *path) switch (muxclient_command) { case SSHMUX_COMMAND_ALIVE_CHECK: if ((pid = mux_client_request_alive(sock)) == 0) - fatal("%s: master alive check failed", __func__); + fatal_f("master alive check failed"); fprintf(stderr, "Master running (pid=%u)\r\n", pid); exit(0); case SSHMUX_COMMAND_TERMINATE: @@ -2359,11 +2326,11 @@ muxclient(const char *path) exit(0); case SSHMUX_COMMAND_FORWARD: if (mux_client_forwards(sock, 0) != 0) - fatal("%s: master forward request failed", __func__); + fatal_f("master forward request failed"); exit(0); case SSHMUX_COMMAND_OPEN: if (mux_client_forwards(sock, 0) != 0) { - error("%s: master forward request failed", __func__); + error_f("master forward request failed"); return -1; } mux_client_request_session(sock); @@ -2378,8 +2345,7 @@ muxclient(const char *path) exit(0); case SSHMUX_COMMAND_CANCEL_FWD: if (mux_client_forwards(sock, 1) != 0) - error("%s: master cancel forward request failed", - __func__); + error_f("master cancel forward request failed"); exit(0); case SSHMUX_COMMAND_PROXY: mux_client_proxy(sock); diff --git a/nchan.c b/nchan.c index 1e96eb641674..76bfc85a85f8 100644 --- a/nchan.c +++ b/nchan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: nchan.c,v 1.70 2019/06/28 13:35:04 deraadt Exp $ */ +/* $OpenBSD: nchan.c,v 1.71 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved. * @@ -185,12 +185,11 @@ chan_send_eof2(struct ssh *ssh, Channel *c) switch (c->istate) { case CHAN_INPUT_WAIT_DRAIN: if (!c->have_remote_id) - fatal("%s: channel %d: no remote_id", - __func__, c->self); + fatal_f("channel %d: no remote_id", c->self); if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_EOF)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: send CHANNEL_EOF: %s", __func__, ssh_err(r)); + fatal_fr(r, "send CHANNEL_EOF"); c->flags |= CHAN_EOF_SENT; break; default: @@ -214,12 +213,11 @@ chan_send_close2(struct ssh *ssh, Channel *c) error("channel %d: already sent close", c->self); } else { if (!c->have_remote_id) - fatal("%s: channel %d: no remote_id", - __func__, c->self); + fatal_f("channel %d: no remote_id", c->self); if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_CLOSE)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: send CHANNEL_EOF: %s", __func__, ssh_err(r)); + fatal_fr(r, "send CHANNEL_EOF"); c->flags |= CHAN_CLOSE_SENT; } } @@ -238,13 +236,13 @@ chan_send_eow2(struct ssh *ssh, Channel *c) if (!(datafellows & SSH_NEW_OPENSSH)) return; if (!c->have_remote_id) - fatal("%s: channel %d: no remote_id", __func__, c->self); + fatal_f("channel %d: no remote_id", c->self); if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_REQUEST)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || (r = sshpkt_put_cstring(ssh, "eow@openssh.com")) != 0 || (r = sshpkt_put_u8(ssh, 0)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: send CHANNEL_EOF: %s", __func__, ssh_err(r)); + fatal_fr(r, "send CHANNEL_EOF"); } /* shared */ @@ -376,22 +374,20 @@ chan_shutdown_write(struct ssh *ssh, Channel *c) if (c->type == SSH_CHANNEL_LARVAL) return; /* shutdown failure is allowed if write failed already */ - debug2("channel %d: %s (i%d o%d sock %d wfd %d efd %d [%s])", - c->self, __func__, c->istate, c->ostate, c->sock, c->wfd, c->efd, + debug2_f("channel %d: (i%d o%d sock %d wfd %d efd %d [%s])", + c->self, c->istate, c->ostate, c->sock, c->wfd, c->efd, channel_format_extended_usage(c)); if (c->sock != -1) { if (shutdown(c->sock, SHUT_WR) == -1) { - debug2("channel %d: %s: shutdown() failed for " - "fd %d [i%d o%d]: %.100s", c->self, __func__, - c->sock, c->istate, c->ostate, - strerror(errno)); + debug2_f("channel %d: shutdown() failed for " + "fd %d [i%d o%d]: %.100s", c->self, c->sock, + c->istate, c->ostate, strerror(errno)); } } else { if (channel_close_fd(ssh, &c->wfd) < 0) { - logit("channel %d: %s: close() failed for " - "fd %d [i%d o%d]: %.100s", - c->self, __func__, c->wfd, c->istate, c->ostate, - strerror(errno)); + logit_f("channel %d: close() failed for " + "fd %d [i%d o%d]: %.100s", c->self, c->wfd, + c->istate, c->ostate, strerror(errno)); } } } @@ -401,8 +397,8 @@ chan_shutdown_read(struct ssh *ssh, Channel *c) { if (c->type == SSH_CHANNEL_LARVAL) return; - debug2("channel %d: %s (i%d o%d sock %d wfd %d efd %d [%s])", - c->self, __func__, c->istate, c->ostate, c->sock, c->rfd, c->efd, + debug2_f("channel %d: (i%d o%d sock %d wfd %d efd %d [%s])", + c->self, c->istate, c->ostate, c->sock, c->rfd, c->efd, channel_format_extended_usage(c)); if (c->sock != -1) { /* @@ -411,17 +407,15 @@ chan_shutdown_read(struct ssh *ssh, Channel *c) * HP-UX may return ENOTCONN also. */ if (shutdown(c->sock, SHUT_RD) == -1 && errno != ENOTCONN) { - error("channel %d: %s: shutdown() failed for " - "fd %d [i%d o%d]: %.100s", - c->self, __func__, c->sock, c->istate, c->ostate, - strerror(errno)); + error_f("channel %d: shutdown() failed for " + "fd %d [i%d o%d]: %.100s", c->self, c->sock, + c->istate, c->ostate, strerror(errno)); } } else { if (channel_close_fd(ssh, &c->rfd) < 0) { - logit("channel %d: %s: close() failed for " - "fd %d [i%d o%d]: %.100s", - c->self, __func__, c->rfd, c->istate, c->ostate, - strerror(errno)); + logit_f("channel %d: close() failed for " + "fd %d [i%d o%d]: %.100s", c->self, c->rfd, + c->istate, c->ostate, strerror(errno)); } } } @@ -434,13 +428,12 @@ chan_shutdown_extended_read(struct ssh *ssh, Channel *c) if (c->extended_usage != CHAN_EXTENDED_READ && c->extended_usage != CHAN_EXTENDED_IGNORE) return; - debug2("channel %d: %s (i%d o%d sock %d wfd %d efd %d [%s])", - c->self, __func__, c->istate, c->ostate, c->sock, c->rfd, c->efd, + debug_f("channel %d: (i%d o%d sock %d wfd %d efd %d [%s])", + c->self, c->istate, c->ostate, c->sock, c->rfd, c->efd, channel_format_extended_usage(c)); if (channel_close_fd(ssh, &c->efd) < 0) { - logit("channel %d: %s: close() failed for " - "extended fd %d [i%d o%d]: %.100s", - c->self, __func__, c->efd, c->istate, c->ostate, - strerror(errno)); + logit_f("channel %d: close() failed for " + "extended fd %d [i%d o%d]: %.100s", c->self, c->efd, + c->istate, c->ostate, strerror(errno)); } } diff --git a/packet.c b/packet.c index 00e3180cb0ab..f22861630752 100644 --- a/packet.c +++ b/packet.c @@ -1,4 +1,4 @@ -/* $OpenBSD: packet.c,v 1.296 2020/07/05 23:59:45 djm Exp $ */ +/* $OpenBSD: packet.c,v 1.297 2020/10/18 11:32:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -297,13 +297,13 @@ ssh_packet_set_connection(struct ssh *ssh, int fd_in, int fd_out) int r; if (none == NULL) { - error("%s: cannot load cipher 'none'", __func__); + error_f("cannot load cipher 'none'"); return NULL; } if (ssh == NULL) ssh = ssh_alloc_session_state(); if (ssh == NULL) { - error("%s: could not allocate state", __func__); + error_f("could not allocate state"); return NULL; } state = ssh->state; @@ -313,7 +313,7 @@ ssh_packet_set_connection(struct ssh *ssh, int fd_in, int fd_out) (const u_char *)"", 0, NULL, 0, CIPHER_ENCRYPT)) != 0 || (r = cipher_init(&state->receive_context, none, (const u_char *)"", 0, NULL, 0, CIPHER_DECRYPT)) != 0) { - error("%s: cipher_init failed: %s", __func__, ssh_err(r)); + error_fr(r, "cipher_init failed"); free(ssh); /* XXX need ssh_free_session_state? */ return NULL; } @@ -897,8 +897,8 @@ ssh_set_newkeys(struct ssh *ssh, int mode) max_blocks = &state->max_blocks_in; } if (state->newkeys[mode] != NULL) { - debug("%s: rekeying %s, input %llu bytes %llu blocks, " - "output %llu bytes %llu blocks", __func__, dir, + debug_f("rekeying %s, input %llu bytes %llu blocks, " + "output %llu bytes %llu blocks", dir, (unsigned long long)state->p_read.bytes, (unsigned long long)state->p_read.blocks, (unsigned long long)state->p_send.bytes, @@ -920,7 +920,7 @@ ssh_set_newkeys(struct ssh *ssh, int mode) return r; } mac->enabled = 1; - DBG(debug("%s: cipher_init_context: %s", __func__, dir)); + DBG(debug_f("cipher_init_context: %s", dir)); cipher_free(*ccp); *ccp = NULL; if ((r = cipher_init(ccp, enc->cipher, enc->key, enc->key_len, @@ -1143,8 +1143,8 @@ ssh_packet_send2_wrapped(struct ssh *ssh) if (tmp > state->extra_pad) return SSH_ERR_INVALID_ARGUMENT; pad = state->extra_pad - tmp; - DBG(debug3("%s: adding %d (len %d padlen %d extra_pad %d)", - __func__, pad, len, padlen, state->extra_pad)); + DBG(debug3_f("adding %d (len %d padlen %d extra_pad %d)", + pad, len, padlen, state->extra_pad)); tmp = padlen; padlen += pad; /* Check whether padlen calculation overflowed */ @@ -1259,7 +1259,7 @@ ssh_packet_send2(struct ssh *ssh) */ if ((need_rekey || state->rekeying) && !ssh_packet_type_is_kex(type)) { if (need_rekey) - debug3("%s: rekex triggered", __func__); + debug3_f("rekex triggered"); debug("enqueue packet: %u", type); p = calloc(1, sizeof(*p)); if (p == NULL) @@ -1301,8 +1301,7 @@ ssh_packet_send2(struct ssh *ssh) */ if (ssh_packet_need_rekeying(ssh, sshbuf_len(p->payload))) { - debug3("%s: queued packet triggered rekex", - __func__); + debug3_f("queued packet triggered rekex"); return kex_start_rekex(ssh); } debug("dequeue packet: %u", type); @@ -1421,7 +1420,7 @@ ssh_packet_read(struct ssh *ssh) int r; if ((r = ssh_packet_read_seqnr(ssh, &type, NULL)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "read"); return type; } @@ -1479,7 +1478,7 @@ ssh_packet_read_poll2_mux(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p) (r = sshbuf_get_u8(state->incoming_packet, typep)) != 0) return r; if (ssh_packet_log_type(*typep)) - debug3("%s: type %u", __func__, *typep); + debug3_f("type %u", *typep); /* sshbuf_dump(state->incoming_packet, stderr); */ /* reset for next packet */ state->packlen = 0; @@ -1710,7 +1709,7 @@ ssh_packet_read_poll2(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p) /* do we need to rekey? */ if (ssh_packet_need_rekeying(ssh, 0)) { - debug3("%s: rekex triggered", __func__); + debug3_f("rekex triggered"); if ((r = kex_start_rekex(ssh)) != 0) return r; } @@ -1836,7 +1835,7 @@ ssh_packet_send_debug(struct ssh *ssh, const char *fmt,...) (r = sshpkt_put_cstring(ssh, "")) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send DEBUG"); } void @@ -1892,15 +1891,13 @@ sshpkt_vfatal(struct ssh *ssh, int r, const char *fmt, va_list ap) default: if (vasprintf(&tag, fmt, ap) == -1) { ssh_packet_clear_keys(ssh); - logdie("%s: could not allocate failure message", - __func__); + logdie_f("could not allocate failure message"); } ssh_packet_clear_keys(ssh); errno = oerrno; - logdie("%s%sConnection %s %s: %s", + logdie_r(r, "%s%sConnection %s %s", tag != NULL ? tag : "", tag != NULL ? ": " : "", - ssh->state->server_side ? "from" : "to", - remote_id, ssh_err(r)); + ssh->state->server_side ? "from" : "to", remote_id); } } @@ -1913,7 +1910,7 @@ sshpkt_fatal(struct ssh *ssh, int r, const char *fmt, ...) sshpkt_vfatal(ssh, r, fmt, ap); /* NOTREACHED */ va_end(ap); - logdie("%s: should have exited", __func__); + logdie_f("should have exited"); } /* @@ -2078,7 +2075,7 @@ ssh_packet_set_tos(struct ssh *ssh, int tos) switch (ssh_packet_connection_af(ssh)) { # ifdef IP_TOS case AF_INET: - debug3("%s: set IP_TOS 0x%02x", __func__, tos); + debug3_f("set IP_TOS 0x%02x", tos); if (setsockopt(ssh->state->connection_in, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) == -1) error("setsockopt IP_TOS %d: %.100s:", @@ -2087,7 +2084,7 @@ ssh_packet_set_tos(struct ssh *ssh, int tos) # endif /* IP_TOS */ # ifdef IPV6_TCLASS case AF_INET6: - debug3("%s: set IPV6_TCLASS 0x%02x", __func__, tos); + debug3_f("set IPV6_TCLASS 0x%02x", tos); if (setsockopt(ssh->state->connection_in, IPPROTO_IPV6, IPV6_TCLASS, &tos, sizeof(tos)) == -1) error("setsockopt IPV6_TCLASS %d: %.100s:", @@ -2216,7 +2213,7 @@ ssh_packet_set_postauth(struct ssh *ssh) { int r; - debug("%s: called", __func__); + debug_f("called"); /* This was set in net child, but is not visible in user child */ ssh->state->after_authentication = 1; ssh->state->rekeying = 0; @@ -2472,7 +2469,7 @@ ssh_packet_set_state(struct ssh *ssh, struct sshbuf *m) if (sshbuf_len(m)) return SSH_ERR_INVALID_FORMAT; - debug3("%s: done", __func__); + debug3_f("done"); return 0; } @@ -2663,7 +2660,7 @@ ssh_packet_send_mux(struct ssh *ssh) cp = sshbuf_mutable_ptr(state->outgoing_packet); type = cp[5]; if (ssh_packet_log_type(type)) - debug3("%s: type %u", __func__, type); + debug3_f("type %u", type); /* drop everything, but the connection protocol */ if (type >= SSH2_MSG_CONNECTION_MIN && type <= SSH2_MSG_CONNECTION_MAX) { diff --git a/readconf.c b/readconf.c index ea13bf99b1a1..8da57731d520 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.339 2020/10/16 13:26:13 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.340 2020/10/18 11:32:01 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -338,7 +338,7 @@ ssh_connection_hash(const char *thishost, const char *host, const char *portstr, ssh_digest_update(md, portstr, strlen(portstr)) < 0 || ssh_digest_update(md, user, strlen(user)) < 0 || ssh_digest_final(md, conn_hash, sizeof(conn_hash)) < 0) - fatal("%s: mux digest failed", __func__); + fatal_f("mux digest failed"); ssh_digest_free(md); return tohex(conn_hash, ssh_digest_bytes(SSH_DIGEST_SHA1)); } @@ -446,7 +446,7 @@ add_certificate_file(Options *options, const char *path, int userprovided) for (i = 0; i < options->num_certificate_files; i++) { if (options->certificate_file_userprovided[i] == userprovided && strcmp(options->certificate_files[i], path) == 0) { - debug2("%s: ignoring duplicate key %s", __func__, path); + debug2_f("ignoring duplicate key %s", path); return; } } @@ -477,7 +477,7 @@ add_identity_file(Options *options, const char *dir, const char *filename, for (i = 0; i < options->num_identity_files; i++) { if (options->identity_file_userprovided[i] == userprovided && strcmp(options->identity_files[i], path) == 0) { - debug2("%s: ignoring duplicate key %s", __func__, path); + debug2_f("ignoring duplicate key %s", path); free(path); return; } @@ -527,7 +527,7 @@ execute_in_shell(const char *cmd) char *argv[4]; if (stdfd_devnull(1, 1, 0) == -1) - fatal("%s: stdfd_devnull failed", __func__); + fatal_f("stdfd_devnull failed"); closefrom(STDERR_FILENO + 1); argv[0] = shell; @@ -544,11 +544,11 @@ execute_in_shell(const char *cmd) } /* Parent. */ if (pid == -1) - fatal("%s: fork: %.100s", __func__, strerror(errno)); + fatal_f("fork: %.100s", strerror(errno)); while (waitpid(pid, &status, 0) == -1) { if (errno != EINTR && errno != EAGAIN) - fatal("%s: waitpid: %s", __func__, strerror(errno)); + fatal_f("waitpid: %s", strerror(errno)); } if (!WIFEXITED(status)) { error("command '%.100s' exited abnormally", cmd); @@ -1465,10 +1465,9 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, (u_char) arg[1] >= 64 && (u_char) arg[1] < 128) value = (u_char) arg[1] & 31; else { + value = 0; /* Avoid compiler warning. */ fatal("%.200s line %d: Bad escape character.", filename, linenum); - /* NOTREACHED */ - value = 0; /* Avoid compiler warning. */ } if (*activep && *intptr == -1) *intptr = value; @@ -1866,7 +1865,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, return 0; default: - fatal("%s: Unimplemented opcode %d", __func__, opcode); + fatal_f("Unimplemented opcode %d", opcode); } /* Check that there is no garbage at end of line. */ @@ -2275,7 +2274,7 @@ fill_default_options(Options * options) do { \ if ((r = kex_assemble_names(&options->what, \ defaults, all)) != 0) \ - fatal("%s: %s: %s", __func__, #what, ssh_err(r)); \ + fatal_fr(r, "%s", #what); \ } while (0) ASSEMBLE(ciphers, def_cipher, all_cipher); ASSEMBLE(macs, def_mac, all_mac); @@ -2761,7 +2760,7 @@ dump_client_config(Options *o, const char *host) all_key = sshkey_alg_list(0, 0, 1, ','); if ((r = kex_assemble_names(&o->hostkeyalgorithms, kex_default_pk_alg(), all_key)) != 0) - fatal("%s: expand HostKeyAlgorithms: %s", __func__, ssh_err(r)); + fatal_fr(r, "expand HostKeyAlgorithms"); free(all_key); /* Most interesting options first: user, host, port */ diff --git a/readpass.c b/readpass.c index 7e79f49e40d7..1362a49e9d64 100644 --- a/readpass.c +++ b/readpass.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readpass.c,v 1.64 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: readpass.c,v 1.65 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * @@ -58,27 +58,27 @@ ssh_askpass(char *askpass, const char *msg, const char *env_hint) void (*osigchld)(int); if (fflush(stdout) != 0) - error("%s: fflush: %s", __func__, strerror(errno)); + error_f("fflush: %s", strerror(errno)); if (askpass == NULL) fatal("internal error: askpass undefined"); if (pipe(p) == -1) { - error("%s: pipe: %s", __func__, strerror(errno)); + error_f("pipe: %s", strerror(errno)); return NULL; } osigchld = ssh_signal(SIGCHLD, SIG_DFL); if ((pid = fork()) == -1) { - error("%s: fork: %s", __func__, strerror(errno)); + error_f("fork: %s", strerror(errno)); ssh_signal(SIGCHLD, osigchld); return NULL; } if (pid == 0) { close(p[0]); if (dup2(p[1], STDOUT_FILENO) == -1) - fatal("%s: dup2: %s", __func__, strerror(errno)); + fatal_f("dup2: %s", strerror(errno)); if (env_hint != NULL) setenv("SSH_ASKPASS_PROMPT", env_hint, 1); execlp(askpass, askpass, msg, (char *)NULL); - fatal("%s: exec(%s): %s", __func__, askpass, strerror(errno)); + fatal_f("exec(%s): %s", askpass, strerror(errno)); } close(p[1]); @@ -141,7 +141,7 @@ read_passphrase(const char *prompt, int flags) rppflags = (flags & RP_ECHO) ? RPP_ECHO_ON : RPP_ECHO_OFF; if (use_askpass) - debug("%s: requested to askpass", __func__); + debug_f("requested to askpass"); else if (flags & RP_USE_ASKPASS) use_askpass = 1; else if (flags & RP_ALLOW_STDIN) { @@ -242,7 +242,7 @@ notify_start(int force_askpass, const char *fmt, ...) va_end(args); if (fflush(NULL) != 0) - error("%s: fflush: %s", __func__, strerror(errno)); + error_f("fflush: %s", strerror(errno)); if (!force_askpass && isatty(STDERR_FILENO)) { (void)write(STDERR_FILENO, "\r", 1); (void)write(STDERR_FILENO, prompt, strlen(prompt)); @@ -252,35 +252,35 @@ notify_start(int force_askpass, const char *fmt, ...) if ((askpass = getenv("SSH_ASKPASS")) == NULL) askpass = _PATH_SSH_ASKPASS_DEFAULT; if (*askpass == '\0') { - debug3("%s: cannot notify: no askpass", __func__); + debug3_f("cannot notify: no askpass"); goto out; } if (getenv("DISPLAY") == NULL && ((s = getenv(SSH_ASKPASS_REQUIRE_ENV)) == NULL || strcmp(s, "force") != 0)) { - debug3("%s: cannot notify: no display", __func__); + debug3_f("cannot notify: no display"); goto out; } osigchld = ssh_signal(SIGCHLD, SIG_DFL); if ((pid = fork()) == -1) { - error("%s: fork: %s", __func__, strerror(errno)); + error_f("fork: %s", strerror(errno)); ssh_signal(SIGCHLD, osigchld); free(prompt); return NULL; } if (pid == 0) { if (stdfd_devnull(1, 1, 0) == -1) - fatal("%s: stdfd_devnull failed", __func__); + fatal_f("stdfd_devnull failed"); closefrom(STDERR_FILENO + 1); setenv("SSH_ASKPASS_PROMPT", "none", 1); /* hint to UI */ execlp(askpass, askpass, prompt, (char *)NULL); - error("%s: exec(%s): %s", __func__, askpass, strerror(errno)); + error_f("exec(%s): %s", askpass, strerror(errno)); _exit(1); /* NOTREACHED */ } if ((ret = calloc(1, sizeof(*ret))) == NULL) { kill(pid, SIGTERM); - fatal("%s: calloc failed", __func__); + fatal_f("calloc failed"); } ret->pid = pid; ret->osigchld = osigchld; @@ -304,7 +304,7 @@ notify_complete(struct notifier_ctx *ctx) break; } if (ret == -1) - fatal("%s: waitpid: %s", __func__, strerror(errno)); + fatal_f("waitpid: %s", strerror(errno)); ssh_signal(SIGCHLD, ctx->osigchld); free(ctx); } diff --git a/regress/misc/sk-dummy/fatal.c b/regress/misc/sk-dummy/fatal.c index f0c5bb479824..1ba50809b79a 100644 --- a/regress/misc/sk-dummy/fatal.c +++ b/regress/misc/sk-dummy/fatal.c @@ -10,11 +10,11 @@ #include "log.h" void sshfatal(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *fmt, ...); + LogLevel level, const char *suffix, const char *fmt, ...); void sshfatal(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *fmt, ...) + LogLevel level, const char *suffix, const char *fmt, ...) { va_list ap; @@ -23,6 +23,8 @@ sshfatal(const char *file, const char *func, int line, int showfunc, va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); + if (suffix != NULL) + fprintf(stderr, ": %s", suffix); fputc('\n', stderr); _exit(1); } diff --git a/sandbox-pledge.c b/sandbox-pledge.c index d28fc27274e2..302f1cfedd3d 100644 --- a/sandbox-pledge.c +++ b/sandbox-pledge.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sandbox-pledge.c,v 1.1 2015/10/09 01:37:08 deraadt Exp $ */ +/* $OpenBSD: sandbox-pledge.c,v 1.2 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2015 Theo de Raadt * @@ -46,7 +46,7 @@ ssh_sandbox_init(struct monitor *m) { struct ssh_sandbox *box; - debug3("%s: preparing pledge sandbox", __func__); + debug3_f("preparing pledge sandbox"); box = xcalloc(1, sizeof(*box)); box->child_pid = 0; @@ -57,14 +57,14 @@ void ssh_sandbox_child(struct ssh_sandbox *box) { if (pledge("stdio", NULL) == -1) - fatal("%s: pledge()", __func__); + fatal_f("pledge()"); } void ssh_sandbox_parent_finish(struct ssh_sandbox *box) { free(box); - debug3("%s: finished", __func__); + debug3_f("finished"); } void diff --git a/sandbox-rlimit.c b/sandbox-rlimit.c index 0bff3dfba496..26c61d264817 100644 --- a/sandbox-rlimit.c +++ b/sandbox-rlimit.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sandbox-rlimit.c,v 1.4 2016/09/12 01:22:38 deraadt Exp $ */ +/* $OpenBSD: sandbox-rlimit.c,v 1.5 2020/10/18 11:32:01 djm Exp $ */ /* * Copyright (c) 2011 Damien Miller * @@ -49,7 +49,7 @@ ssh_sandbox_init(struct monitor *monitor) * Strictly, we don't need to maintain any state here but we need * to return non-NULL to satisfy the API. */ - debug3("%s: preparing rlimit sandbox", __func__); + debug3_f("preparing rlimit sandbox"); box = xcalloc(1, sizeof(*box)); box->child_pid = 0; @@ -65,18 +65,18 @@ ssh_sandbox_child(struct ssh_sandbox *box) #ifndef SANDBOX_SKIP_RLIMIT_FSIZE if (setrlimit(RLIMIT_FSIZE, &rl_zero) == -1) - fatal("%s: setrlimit(RLIMIT_FSIZE, { 0, 0 }): %s", - __func__, strerror(errno)); + fatal_f("setrlimit(RLIMIT_FSIZE, { 0, 0 }): %s", + strerror(errno)); #endif #ifndef SANDBOX_SKIP_RLIMIT_NOFILE if (setrlimit(RLIMIT_NOFILE, &rl_zero) == -1) - fatal("%s: setrlimit(RLIMIT_NOFILE, { 0, 0 }): %s", - __func__, strerror(errno)); + fatal_f("setrlimit(RLIMIT_NOFILE, { 0, 0 }): %s", + strerror(errno)); #endif #ifdef HAVE_RLIMIT_NPROC if (setrlimit(RLIMIT_NPROC, &rl_zero) == -1) - fatal("%s: setrlimit(RLIMIT_NPROC, { 0, 0 }): %s", - __func__, strerror(errno)); + fatal_f("setrlimit(RLIMIT_NPROC, { 0, 0 }): %s", + strerror(errno)); #endif } @@ -84,7 +84,7 @@ void ssh_sandbox_parent_finish(struct ssh_sandbox *box) { free(box); - debug3("%s: finished", __func__); + debug3_f("finished"); } void diff --git a/scp.c b/scp.c index 6ae17061d69e..59b0a36a1378 100644 --- a/scp.c +++ b/scp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scp.c,v 1.212 2020/08/03 02:43:41 djm Exp $ */ +/* $OpenBSD: scp.c,v 1.213 2020/10/18 11:32:01 djm Exp $ */ /* * scp - secure remote copy. This is basically patched BSD rcp which * uses ssh to do the data transfer (instead of using rcmd). @@ -848,7 +848,7 @@ brace_expand(const char *pattern, char ***patternsp, size_t *npatternsp) goto fail; } if (invalid) - fatal("%s: invalid brace pattern \"%s\"", __func__, cp); + fatal_f("invalid brace pattern \"%s\"", cp); if (expanded) { /* * Current entry expanded to new entries on the @@ -1279,7 +1279,7 @@ sink(int argc, char **argv, const char *src) * the requested destination file glob. */ if (brace_expand(src, &patterns, &npatterns) != 0) - fatal("%s: could not expand pattern", __func__); + fatal_f("could not expand pattern"); } for (first = 1;; first = 0) { cp = buf; diff --git a/servconf.c b/servconf.c index cd5834df12a1..ea7625d3631f 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.370 2020/10/16 13:26:13 djm Exp $ */ +/* $OpenBSD: servconf.c,v 1.371 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -223,7 +223,7 @@ assemble_algorithms(ServerOptions *o) #define ASSEMBLE(what, defaults, all) \ do { \ if ((r = kex_assemble_names(&o->what, defaults, all)) != 0) \ - fatal("%s: %s: %s", __func__, #what, ssh_err(r)); \ + fatal_fr(r, "%s", #what); \ } while (0) ASSEMBLE(ciphers, def_cipher, all_cipher); ASSEMBLE(macs, def_mac, all_mac); @@ -751,7 +751,7 @@ derelativise_path(const char *path) if (path_absolute(expanded)) return expanded; if (getcwd(cwd, sizeof(cwd)) == NULL) - fatal("%s: getcwd: %s", __func__, strerror(errno)); + fatal_f("getcwd: %s", strerror(errno)); xasprintf(&ret, "%s/%s", cwd, expanded); free(expanded); return ret; @@ -794,7 +794,7 @@ add_one_listen_addr(ServerOptions *options, const char *addr, if (i >= options->num_listen_addrs) { /* No entry for this rdomain; allocate one */ if (i >= INT_MAX) - fatal("%s: too many listen addresses", __func__); + fatal_f("too many listen addresses"); options->listen_addrs = xrecallocarray(options->listen_addrs, options->num_listen_addrs, options->num_listen_addrs + 1, sizeof(*options->listen_addrs)); @@ -931,10 +931,10 @@ process_permitopen_list(struct ssh *ssh, ServerOpCodes opcode, ch = '\0'; host = hpdelim2(&arg, &ch); if (host == NULL || ch == '/') - fatal("%s: missing host in %s", __func__, what); + fatal_f("missing host in %s", what); host = cleanhostname(host); if (arg == NULL || ((port = permitopen_port(arg)) < 0)) - fatal("%s: bad port number in %s", __func__, what); + fatal_f("bad port number in %s", what); /* Send it to channels layer */ channel_add_permission(ssh, FORWARD_ADM, where, host, port); @@ -2051,17 +2051,15 @@ process_server_config_line_depth(ServerOptions *options, char *line, item, entry); } if (gbuf.gl_pathc > INT_MAX) - fatal("%s: too many glob results", __func__); + fatal_f("too many glob results"); for (n = 0; n < (int)gbuf.gl_pathc; n++) { debug2("%s line %d: including %s", filename, linenum, gbuf.gl_pathv[n]); item = xcalloc(1, sizeof(*item)); item->selector = strdup(arg); item->filename = strdup(gbuf.gl_pathv[n]); - if ((item->contents = sshbuf_new()) == NULL) { - fatal("%s: sshbuf_new failed", - __func__); - } + if ((item->contents = sshbuf_new()) == NULL) + fatal_f("sshbuf_new failed"); load_server_config(item->filename, item->contents); parse_server_config_depth(options, @@ -2415,7 +2413,7 @@ load_server_config(const char *filename, struct sshbuf *conf) FILE *f; int r, lineno = 0; - debug2("%s: filename %s", __func__, filename); + debug2_f("filename %s", filename); if ((f = fopen(filename, "r")) == NULL) { perror(filename); exit(1); @@ -2424,7 +2422,7 @@ load_server_config(const char *filename, struct sshbuf *conf) /* grow buffer, so realloc is avoided for large config files */ if (fstat(fileno(f), &st) == 0 && st.st_size > 0 && (r = sshbuf_allocate(conf, st.st_size)) != 0) - fatal("%s: allocate failed: %s", __func__, ssh_err(r)); + fatal_fr(r, "allocate"); while (getline(&line, &linesize, f) != -1) { lineno++; /* @@ -2436,13 +2434,13 @@ load_server_config(const char *filename, struct sshbuf *conf) memcpy(cp, "\n", 2); cp = line + strspn(line, " \t\r"); if ((r = sshbuf_put(conf, cp, strlen(cp))) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put"); } free(line); if ((r = sshbuf_put_u8(conf, 0)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put_u8"); fclose(f); - debug2("%s: done config len = %zu", __func__, sshbuf_len(conf)); + debug2_f("done config len = %zu", sshbuf_len(conf)); } void @@ -2610,11 +2608,11 @@ parse_server_config_depth(ServerOptions *options, const char *filename, if (depth < 0 || depth > SERVCONF_MAX_DEPTH) fatal("Too many recursive configuration includes"); - debug2("%s: config %s len %zu%s", __func__, filename, sshbuf_len(conf), + debug2_f("config %s len %zu%s", filename, sshbuf_len(conf), (flags & SSHCFG_NEVERMATCH ? " [checking syntax only]" : "")); if ((obuf = cbuf = sshbuf_dup_string(conf)) == NULL) - fatal("%s: sshbuf_dup_string failed", __func__); + fatal_f("sshbuf_dup_string failed"); linenum = 1; while ((cp = strsep(&cbuf, "\n")) != NULL) { if (process_server_config_line_depth(options, cp, diff --git a/serverloop.c b/serverloop.c index 48d936d2e395..5fc465babe9d 100644 --- a/serverloop.c +++ b/serverloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: serverloop.c,v 1.223 2020/07/03 06:29:57 djm Exp $ */ +/* $OpenBSD: serverloop.c,v 1.224 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -157,7 +157,7 @@ notify_done(fd_set *readset) if (notify_pipe[0] != -1 && FD_ISSET(notify_pipe[0], readset)) while (read(notify_pipe[0], &c, 1) != -1) - debug2("%s: reading", __func__); + debug2_f("reading"); } /*ARGSUSED*/ @@ -201,13 +201,13 @@ client_alive_check(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, "keepalive@openssh.com")) != 0 || (r = sshpkt_put_u8(ssh, 1)) != 0) /* boolean: want reply */ - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); } else { channel_request_start(ssh, channel_id, "keepalive@openssh.com", 1); } if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send"); } /* @@ -332,21 +332,17 @@ process_input(struct ssh *ssh, fd_set *readset, int connection_in) ssh_remote_ipaddr(ssh), ssh_remote_port(ssh)); return -1; } else if (len == -1) { - if (errno != EINTR && errno != EAGAIN && - errno != EWOULDBLOCK) { - verbose("Read error from remote host " - "%.100s port %d: %.100s", - ssh_remote_ipaddr(ssh), - ssh_remote_port(ssh), strerror(errno)); - cleanup_exit(255); - } - } else { - /* Buffer any received data. */ - if ((r = ssh_packet_process_incoming(ssh, buf, len)) - != 0) - fatal("%s: ssh_packet_process_incoming: %s", - __func__, ssh_err(r)); + if (errno == EINTR || errno == EAGAIN || + errno != EWOULDBLOCK) + return 0; + verbose("Read error from remote host %s port %d: %s", + ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), + strerror(errno)); + cleanup_exit(255); } + /* Buffer any received data. */ + if ((r = ssh_packet_process_incoming(ssh, buf, len)) != 0) + fatal_fr(r, "ssh_packet_process_incoming"); } return 0; } @@ -494,17 +490,17 @@ server_request_direct_tcpip(struct ssh *ssh, int *reason, const char **errmsg) (r = sshpkt_get_end(ssh)) != 0) sshpkt_fatal(ssh, r, "%s: parse packet", __func__); if (target_port > 0xFFFF) { - error("%s: invalid target port", __func__); + error_f("invalid target port"); *reason = SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED; goto out; } if (originator_port > 0xFFFF) { - error("%s: invalid originator port", __func__); + error_f("invalid originator port"); *reason = SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED; goto out; } - debug("%s: originator %s port %u, target %s port %u", __func__, + debug_f("originator %s port %u, target %s port %u", originator, originator_port, target, target_port); /* XXX fine grained permissions */ @@ -537,7 +533,7 @@ server_request_direct_streamlocal(struct ssh *ssh) int r; if (pw == NULL || !the_authctxt->valid) - fatal("%s: no/invalid user", __func__); + fatal_f("no/invalid user"); if ((r = sshpkt_get_cstring(ssh, &target, NULL)) != 0 || (r = sshpkt_get_cstring(ssh, &originator, NULL)) != 0 || @@ -545,11 +541,11 @@ server_request_direct_streamlocal(struct ssh *ssh) (r = sshpkt_get_end(ssh)) != 0) sshpkt_fatal(ssh, r, "%s: parse packet", __func__); if (originator_port > 0xFFFF) { - error("%s: invalid originator port", __func__); + error_f("invalid originator port"); goto out; } - debug("%s: originator %s port %d, target %s", __func__, + debug_f("originator %s port %d, target %s", originator, originator_port, target); /* XXX fine grained permissions */ @@ -597,7 +593,7 @@ server_request_tun(struct ssh *ssh) if ((r = sshpkt_get_u32(ssh, &tun)) != 0) sshpkt_fatal(ssh, r, "%s: parse device", __func__); if (tun > INT_MAX) { - debug("%s: invalid tun", __func__); + debug_f("invalid tun"); goto done; } if (auth_opts->force_tun_device != -1) { @@ -686,7 +682,7 @@ server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh) (r = sshpkt_get_u32(ssh, &rwindow)) != 0 || (r = sshpkt_get_u32(ssh, &rmaxpack)) != 0) sshpkt_fatal(ssh, r, "%s: parse packet", __func__); - debug("%s: ctype %s rchan %u win %u max %u", __func__, + debug_f("ctype %s rchan %u win %u max %u", ctype, rchan, rwindow, rmaxpack); if (strcmp(ctype, "session") == 0) { @@ -699,7 +695,7 @@ server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh) c = server_request_tun(ssh); } if (c != NULL) { - debug("%s: confirm %s", __func__, ctype); + debug_f("confirm %s", ctype); c->remote_id = rchan; c->have_remote_id = 1; c->remote_window = rwindow; @@ -716,7 +712,7 @@ server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh) } } } else { - debug("%s: failure %s", __func__, ctype); + debug_f("failure %s", ctype); if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN_FAILURE)) != 0 || (r = sshpkt_put_u32(ssh, rchan)) != 0 || (r = sshpkt_put_u32(ssh, reason)) != 0 || @@ -743,7 +739,7 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp) size_t blen, slen; if ((resp = sshbuf_new()) == NULL || (sigbuf = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); kexsigtype = sshkey_type_plain( sshkey_type_from_name(ssh->kex->hostkey_alg)); @@ -752,8 +748,7 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp) key = NULL; if ((r = sshpkt_get_string_direct(ssh, &blob, &blen)) != 0 || (r = sshkey_from_blob(blob, blen, &key)) != 0) { - error("%s: couldn't parse key: %s", - __func__, ssh_err(r)); + error_fr(r, "parse key"); goto out; } /* @@ -761,8 +756,7 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp) * before attempting to sign anything with it. */ if ((ndx = ssh->kex->host_key_index(key, 1, ssh)) == -1) { - error("%s: unknown host %s key", - __func__, sshkey_type(key)); + error_f("unknown host %s key", sshkey_type(key)); goto out; } /* @@ -771,7 +765,7 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp) */ if ((key_prv = get_hostkey_by_index(ndx)) == NULL && (key_pub = get_hostkey_public_by_index(ndx, ssh)) == NULL) { - error("%s: can't retrieve hostkey %d", __func__, ndx); + error_f("can't retrieve hostkey %d", ndx); goto out; } sshbuf_reset(sigbuf); @@ -792,8 +786,7 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp) sshbuf_ptr(sigbuf), sshbuf_len(sigbuf), use_kexsigtype ? ssh->kex->hostkey_alg : NULL)) != 0 || (r = sshbuf_put_string(resp, sig, slen)) != 0) { - error("%s: couldn't prepare signature: %s", - __func__, ssh_err(r)); + error_fr(r, "assemble signature"); goto out; } } @@ -822,19 +815,19 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh) memset(&fwd, 0, sizeof(fwd)); if (pw == NULL || !the_authctxt->valid) - fatal("%s: no/invalid user", __func__); + fatal_f("no/invalid user"); if ((r = sshpkt_get_cstring(ssh, &rtype, NULL)) != 0 || (r = sshpkt_get_u8(ssh, &want_reply)) != 0) sshpkt_fatal(ssh, r, "%s: parse packet", __func__); - debug("%s: rtype %s want_reply %d", __func__, rtype, want_reply); + debug_f("rtype %s want_reply %d", rtype, want_reply); /* -R style forwarding */ if (strcmp(rtype, "tcpip-forward") == 0) { if ((r = sshpkt_get_cstring(ssh, &fwd.listen_host, NULL)) != 0 || (r = sshpkt_get_u32(ssh, &port)) != 0) sshpkt_fatal(ssh, r, "%s: parse tcpip-forward", __func__); - debug("%s: tcpip-forward listen %s port %u", __func__, + debug_f("tcpip-forward listen %s port %u", fwd.listen_host, port); if (port <= INT_MAX) fwd.listen_port = (int)port; @@ -854,16 +847,16 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh) &allocated_listen_port, &options.fwd_opts); } if ((resp = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); if (allocated_listen_port != 0 && (r = sshbuf_put_u32(resp, allocated_listen_port)) != 0) - fatal("%s: sshbuf_put_u32: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put_u32"); } else if (strcmp(rtype, "cancel-tcpip-forward") == 0) { if ((r = sshpkt_get_cstring(ssh, &fwd.listen_host, NULL)) != 0 || (r = sshpkt_get_u32(ssh, &port)) != 0) sshpkt_fatal(ssh, r, "%s: parse cancel-tcpip-forward", __func__); - debug("%s: cancel-tcpip-forward addr %s port %d", __func__, + debug_f("cancel-tcpip-forward addr %s port %d", fwd.listen_host, port); if (port <= INT_MAX) { fwd.listen_port = (int)port; @@ -872,7 +865,7 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh) } else if (strcmp(rtype, "streamlocal-forward@openssh.com") == 0) { if ((r = sshpkt_get_cstring(ssh, &fwd.listen_path, NULL)) != 0) sshpkt_fatal(ssh, r, "%s: parse streamlocal-forward@openssh.com", __func__); - debug("%s: streamlocal-forward listen path %s", __func__, + debug_f("streamlocal-forward listen path %s", fwd.listen_path); /* check permissions */ @@ -891,7 +884,7 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh) } else if (strcmp(rtype, "cancel-streamlocal-forward@openssh.com") == 0) { if ((r = sshpkt_get_cstring(ssh, &fwd.listen_path, NULL)) != 0) sshpkt_fatal(ssh, r, "%s: parse cancel-streamlocal-forward@openssh.com", __func__); - debug("%s: cancel-streamlocal-forward path %s", __func__, + debug_f("cancel-streamlocal-forward path %s", fwd.listen_path); success = channel_cancel_rport_listener(ssh, &fwd); @@ -947,8 +940,7 @@ server_input_channel_req(int type, u_int32_t seq, struct ssh *ssh) success = session_input_channel_req(ssh, c, rtype); if (want_reply && !(c->flags & CHAN_CLOSE_SENT)) { if (!c->have_remote_id) - fatal("%s: channel %d: no remote_id", - __func__, c->self); + fatal_f("channel %d: no remote_id", c->self); if ((r = sshpkt_start(ssh, success ? SSH2_MSG_CHANNEL_SUCCESS : SSH2_MSG_CHANNEL_FAILURE)) != 0 || (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || diff --git a/session.c b/session.c index 27ca8a104dd6..97f19a4dc7b0 100644 --- a/session.c +++ b/session.c @@ -1,4 +1,4 @@ -/* $OpenBSD: session.c,v 1.324 2020/07/07 02:47:21 deraadt Exp $ */ +/* $OpenBSD: session.c,v 1.325 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -253,7 +253,7 @@ display_loginmsg(void) if (sshbuf_len(loginmsg) == 0) return; if ((r = sshbuf_put_u8(loginmsg, 0)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put_u8"); printf("%s", (char *)sshbuf_ptr(loginmsg)); sshbuf_reset(loginmsg); } @@ -269,16 +269,16 @@ prepare_auth_info_file(struct passwd *pw, struct sshbuf *info) temporarily_use_uid(pw); auth_info_file = xstrdup("/tmp/sshauth.XXXXXXXXXXXXXXX"); if ((fd = mkstemp(auth_info_file)) == -1) { - error("%s: mkstemp: %s", __func__, strerror(errno)); + error_f("mkstemp: %s", strerror(errno)); goto out; } if (atomicio(vwrite, fd, sshbuf_mutable_ptr(info), sshbuf_len(info)) != sshbuf_len(info)) { - error("%s: write: %s", __func__, strerror(errno)); + error_f("write: %s", strerror(errno)); goto out; } if (close(fd) != 0) { - error("%s: close: %s", __func__, strerror(errno)); + error_f("close: %s", strerror(errno)); goto out; } success = 1; @@ -305,11 +305,10 @@ set_fwdpermit_from_authopts(struct ssh *ssh, const struct sshauthopt *opts) tmp = cp = xstrdup(auth_opts->permitopen[i]); /* This shouldn't fail as it has already been checked */ if ((host = hpdelim(&cp)) == NULL) - fatal("%s: internal error: hpdelim", __func__); + fatal_f("internal error: hpdelim"); host = cleanhostname(host); if (cp == NULL || (port = permitopen_port(cp)) < 0) - fatal("%s: internal error: permitopen port", - __func__); + fatal_f("internal error: permitopen port"); channel_add_permission(ssh, FORWARD_USER, FORWARD_LOCAL, host, port); free(tmp); @@ -321,11 +320,10 @@ set_fwdpermit_from_authopts(struct ssh *ssh, const struct sshauthopt *opts) tmp = cp = xstrdup(auth_opts->permitlisten[i]); /* This shouldn't fail as it has already been checked */ if ((host = hpdelim(&cp)) == NULL) - fatal("%s: internal error: hpdelim", __func__); + fatal_f("internal error: hpdelim"); host = cleanhostname(host); if (cp == NULL || (port = permitopen_port(cp)) < 0) - fatal("%s: internal error: permitlisten port", - __func__); + fatal_f("internal error: permitlisten port"); channel_add_permission(ssh, FORWARD_USER, FORWARD_REMOTE, host, port); free(tmp); @@ -400,18 +398,17 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command) /* Allocate pipes for communicating with the program. */ if (pipe(pin) == -1) { - error("%s: pipe in: %.100s", __func__, strerror(errno)); + error_f("pipe in: %.100s", strerror(errno)); return -1; } if (pipe(pout) == -1) { - error("%s: pipe out: %.100s", __func__, strerror(errno)); + error_f("pipe out: %.100s", strerror(errno)); close(pin[0]); close(pin[1]); return -1; } if (pipe(perr) == -1) { - error("%s: pipe err: %.100s", __func__, - strerror(errno)); + error_f("pipe err: %.100s", strerror(errno)); close(pin[0]); close(pin[1]); close(pout[0]); @@ -426,12 +423,11 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command) /* Uses socket pairs to communicate with the program. */ if (socketpair(AF_UNIX, SOCK_STREAM, 0, inout) == -1) { - error("%s: socketpair #1: %.100s", __func__, strerror(errno)); + error_f("socketpair #1: %.100s", strerror(errno)); return -1; } if (socketpair(AF_UNIX, SOCK_STREAM, 0, err) == -1) { - error("%s: socketpair #2: %.100s", __func__, - strerror(errno)); + error_f("socketpair #2: %.100s", strerror(errno)); close(inout[0]); close(inout[1]); return -1; @@ -443,7 +439,7 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command) /* Fork the child. */ switch ((pid = fork())) { case -1: - error("%s: fork: %.100s", __func__, strerror(errno)); + error_f("fork: %.100s", strerror(errno)); #ifdef USE_PIPES close(pin[0]); close(pin[1]); @@ -578,14 +574,14 @@ do_exec_pty(struct ssh *ssh, Session *s, const char *command) * detect and gracefully fail out-of-fd conditions. */ if ((fdout = dup(ptyfd)) == -1) { - error("%s: dup #1: %s", __func__, strerror(errno)); + error_f("dup #1: %s", strerror(errno)); close(ttyfd); close(ptyfd); return -1; } /* we keep a reference to the pty master */ if ((ptymaster = dup(ptyfd)) == -1) { - error("%s: dup #2: %s", __func__, strerror(errno)); + error_f("dup #2: %s", strerror(errno)); close(ttyfd); close(ptyfd); close(fdout); @@ -595,7 +591,7 @@ do_exec_pty(struct ssh *ssh, Session *s, const char *command) /* Fork the child. */ switch ((pid = fork())) { case -1: - error("%s: fork: %.100s", __func__, strerror(errno)); + error_f("fork: %.100s", strerror(errno)); close(fdout); close(ptymaster); close(ttyfd); @@ -1220,7 +1216,7 @@ do_rc_files(struct ssh *ssh, Session *s, const char *shell) stat(user_rc, &st) >= 0) { if (xasprintf(&cmd, "%s -c '%s %s'", shell, _PATH_BSHELL, user_rc) == -1) - fatal("%s: xasprintf: %s", __func__, strerror(errno)); + fatal_f("xasprintf: %s", strerror(errno)); if (debug_flag) fprintf(stderr, "Running %s\n", cmd); f = popen(cmd, "w"); @@ -1257,7 +1253,7 @@ do_rc_files(struct ssh *ssh, Session *s, const char *shell) s->auth_proto, s->auth_data); } if (xasprintf(&cmd, "%s -q -", options.xauth_location) == -1) - fatal("%s: xasprintf: %s", __func__, strerror(errno)); + fatal_f("xasprintf: %s", strerror(errno)); f = popen(cmd, "w"); if (f) { fprintf(f, "remove %s\n", @@ -1336,10 +1332,10 @@ safely_chroot(const char *path, uid_t uid) component[cp - path] = '\0'; } - debug3("%s: checking '%s'", __func__, component); + debug3_f("checking '%s'", component); if (stat(component, &st) != 0) - fatal("%s: stat(\"%s\"): %s", __func__, + fatal_f("stat(\"%s\"): %s", component, strerror(errno)); if (st.st_uid != 0 || (st.st_mode & 022) != 0) fatal("bad ownership or modes for chroot " @@ -1357,8 +1353,7 @@ safely_chroot(const char *path, uid_t uid) if (chroot(path) == -1) fatal("chroot(\"%s\"): %s", path, strerror(errno)); if (chdir("/") == -1) - fatal("%s: chdir(/) after chroot: %s", - __func__, strerror(errno)); + fatal_f("chdir(/) after chroot: %s", strerror(errno)); verbose("Changed root directory to \"%s\"", path); } @@ -1727,11 +1722,11 @@ do_child(struct ssh *ssh, Session *s, const char *command) void session_unused(int id) { - debug3("%s: session id %d unused", __func__, id); + debug3_f("session id %d unused", id); if (id >= options.max_sessions || id >= sessions_nalloc) { - fatal("%s: insane session id %d (max %d nalloc %d)", - __func__, id, options.max_sessions, sessions_nalloc); + fatal_f("insane session id %d (max %d nalloc %d)", + id, options.max_sessions, sessions_nalloc); } memset(&sessions[id], 0, sizeof(*sessions)); sessions[id].self = id; @@ -1753,13 +1748,13 @@ session_new(void) if (sessions_first_unused == -1) { if (sessions_nalloc >= options.max_sessions) return NULL; - debug2("%s: allocate (allocated %d max %d)", - __func__, sessions_nalloc, options.max_sessions); + debug2_f("allocate (allocated %d max %d)", + sessions_nalloc, options.max_sessions); tmp = xrecallocarray(sessions, sessions_nalloc, sessions_nalloc + 1, sizeof(*sessions)); if (tmp == NULL) { - error("%s: cannot allocate %d sessions", - __func__, sessions_nalloc + 1); + error_f("cannot allocate %d sessions", + sessions_nalloc + 1); return NULL; } sessions = tmp; @@ -1768,16 +1763,14 @@ session_new(void) if (sessions_first_unused >= sessions_nalloc || sessions_first_unused < 0) { - fatal("%s: insane first_unused %d max %d nalloc %d", - __func__, sessions_first_unused, options.max_sessions, + fatal_f("insane first_unused %d max %d nalloc %d", + sessions_first_unused, options.max_sessions, sessions_nalloc); } s = &sessions[sessions_first_unused]; - if (s->used) { - fatal("%s: session %d already used", - __func__, sessions_first_unused); - } + if (s->used) + fatal_f("session %d already used", sessions_first_unused); sessions_first_unused = s->next_unused; s->used = 1; s->next_unused = -1; @@ -2147,35 +2140,33 @@ session_signal_req(struct ssh *ssh, Session *s) if ((r = sshpkt_get_cstring(ssh, &signame, NULL)) != 0 || (r = sshpkt_get_end(ssh)) != 0) { - error("%s: parse packet: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto out; } if ((sig = name2sig(signame)) == -1) { - error("%s: unsupported signal \"%s\"", __func__, signame); + error_f("unsupported signal \"%s\"", signame); goto out; } if (s->pid <= 0) { - error("%s: no pid for session %d", __func__, s->self); + error_f("no pid for session %d", s->self); goto out; } if (s->forced || s->is_subsystem) { - error("%s: refusing to send signal %s to %s session", __func__, + error_f("refusing to send signal %s to %s session", signame, s->forced ? "forced-command" : "subsystem"); goto out; } if (!use_privsep || mm_is_monitor()) { - error("%s: session signalling requires privilege separation", - __func__); + error_f("session signalling requires privilege separation"); goto out; } - debug("%s: signal %s, killpg(%ld, %d)", __func__, signame, - (long)s->pid, sig); + debug_f("signal %s, killpg(%ld, %d)", signame, (long)s->pid, sig); temporarily_use_uid(s->pw); r = killpg(s->pid, sig); restore_uid(); if (r != 0) { - error("%s: killpg(%ld, %d): %s", __func__, (long)s->pid, + error_f("killpg(%ld, %d): %s", (long)s->pid, sig, strerror(errno)); goto out; } @@ -2197,7 +2188,7 @@ session_auth_agent_req(struct ssh *ssh, Session *s) sshpkt_fatal(ssh, r, "%s: parse packet", __func__); if (!auth_opts->permit_agent_forwarding_flag || !options.allow_agent_forwarding) { - debug("%s: agent forwarding disabled", __func__); + debug_f("agent forwarding disabled"); return 0; } if (called) { @@ -2215,10 +2206,10 @@ session_input_channel_req(struct ssh *ssh, Channel *c, const char *rtype) Session *s; if ((s = session_by_channel(c->self)) == NULL) { - logit("%s: no session %d req %.100s", __func__, c->self, rtype); + logit_f("no session %d req %.100s", c->self, rtype); return 0; } - debug("%s: session %d req %s", __func__, s->self, rtype); + debug_f("session %d req %s", s->self, rtype); /* * a session is in LARVAL state until a shell, a command @@ -2276,13 +2267,13 @@ void session_pty_cleanup2(Session *s) { if (s == NULL) { - error("%s: no session", __func__); + error_f("no session"); return; } if (s->ttyfd == -1) return; - debug("%s: session %d release %s", __func__, s->self, s->tty); + debug_f("session %d release %s", s->self, s->tty); /* Record that the user has logged out. */ if (s->pid != 0) @@ -2338,10 +2329,10 @@ session_close_x11(struct ssh *ssh, int id) Channel *c; if ((c = channel_by_id(ssh, id)) == NULL) { - debug("%s: x11 channel %d missing", __func__, id); + debug_f("x11 channel %d missing", id); } else { /* Detach X11 listener */ - debug("%s: detach x11 channel %d", __func__, id); + debug_f("detach x11 channel %d", id); channel_cancel_cleanup(ssh, id); if (c->ostate != CHAN_OUTPUT_CLOSED) chan_mark_dead(ssh, c); @@ -2354,13 +2345,13 @@ session_close_single_x11(struct ssh *ssh, int id, void *arg) Session *s; u_int i; - debug3("%s: channel %d", __func__, id); + debug3_f("channel %d", id); channel_cancel_cleanup(ssh, id); if ((s = session_by_x11_channel(id)) == NULL) - fatal("%s: no x11 channel %d", __func__, id); + fatal_f("no x11 channel %d", id); for (i = 0; s->x11_chanids[i] != -1; i++) { - debug("%s: session %d: closing channel %d", - __func__, s->self, s->x11_chanids[i]); + debug_f("session %d: closing channel %d", + s->self, s->x11_chanids[i]); /* * The channel "id" is already closing, but make sure we * close all of its siblings. @@ -2387,10 +2378,9 @@ session_exit_message(struct ssh *ssh, Session *s, int status) int r; if ((c = channel_lookup(ssh, s->chanid)) == NULL) - fatal("%s: session %d: no channel %d", - __func__, s->self, s->chanid); - debug("%s: session %d channel %d pid %ld", - __func__, s->self, s->chanid, (long)s->pid); + fatal_f("session %d: no channel %d", s->self, s->chanid); + debug_f("session %d channel %d pid %ld", + s->self, s->chanid, (long)s->pid); if (WIFEXITED(status)) { channel_request_start(ssh, s->chanid, "exit-status", 0); @@ -2414,7 +2404,7 @@ session_exit_message(struct ssh *ssh, Session *s, int status) } /* disconnect channel */ - debug("%s: release channel %d", __func__, s->chanid); + debug_f("release channel %d", s->chanid); /* * Adjust cleanup callback attachment to send close messages when @@ -2469,7 +2459,7 @@ session_close_by_pid(struct ssh *ssh, pid_t pid, int status) { Session *s = session_by_pid(pid); if (s == NULL) { - debug("%s: no session for pid %ld", __func__, (long)pid); + debug_f("no session for pid %ld", (long)pid); return; } if (s->chanid != -1) @@ -2490,13 +2480,12 @@ session_close_by_channel(struct ssh *ssh, int id, void *arg) u_int i; if (s == NULL) { - debug("%s: no session for id %d", __func__, id); + debug_f("no session for id %d", id); return; } - debug("%s: channel %d child %ld", __func__, id, (long)s->pid); + debug_f("channel %d child %ld", id, (long)s->pid); if (s->pid != 0) { - debug("%s: channel %d: has child, ttyfd %d", - __func__, id, s->ttyfd); + debug_f("channel %d: has child, ttyfd %d", id, s->ttyfd); /* * delay detach of session, but release pty, since * the fd's to the child are already closed diff --git a/sftp-client.c b/sftp-client.c index b8e131be67dc..6c2a4fb76deb 100644 --- a/sftp-client.c +++ b/sftp-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.c,v 1.136 2020/05/15 03:57:33 djm Exp $ */ +/* $OpenBSD: sftp-client.c,v 1.137 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -140,7 +140,7 @@ get_msg_extended(struct sftp_conn *conn, struct sshbuf *m, int initial) int r; if ((r = sshbuf_reserve(m, 4, &p)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "reserve"); if (atomicio6(read, conn->fd_in, p, 4, sftpio, conn->limit_kbps > 0 ? &conn->bwlimit_in : NULL) != 4) { if (errno == EPIPE || errno == ECONNRESET) @@ -150,7 +150,7 @@ get_msg_extended(struct sftp_conn *conn, struct sshbuf *m, int initial) } if ((r = sshbuf_get_u32(m, &msg_len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_get_u32"); if (msg_len > SFTP_MAX_MSG_LENGTH) { do_log2(initial ? SYSLOG_LEVEL_ERROR : SYSLOG_LEVEL_FATAL, "Received message too long %u", msg_len); @@ -159,7 +159,7 @@ get_msg_extended(struct sftp_conn *conn, struct sshbuf *m, int initial) } if ((r = sshbuf_reserve(m, msg_len, &p)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "reserve"); if (atomicio6(read, conn->fd_in, p, msg_len, sftpio, conn->limit_kbps > 0 ? &conn->bwlimit_in : NULL) != msg_len) { @@ -184,11 +184,11 @@ send_string_request(struct sftp_conn *conn, u_int id, u_int code, const char *s, int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, code)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_string(msg, s, len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message fd %d T:%u I:%u", conn->fd_out, code, id); sshbuf_free(msg); @@ -202,12 +202,12 @@ send_string_attrs_request(struct sftp_conn *conn, u_int id, u_int code, int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, code)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_string(msg, s, len)) != 0 || (r = encode_attrib(msg, a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message fd %d T:%u I:%u", conn->fd_out, code, id); sshbuf_free(msg); @@ -222,11 +222,11 @@ get_status(struct sftp_conn *conn, u_int expected_id) int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); get_msg(conn, msg); if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); if (id != expected_id) fatal("ID mismatch (%u != %u)", id, expected_id); @@ -235,7 +235,7 @@ get_status(struct sftp_conn *conn, u_int expected_id) SSH2_FXP_STATUS, type); if ((r = sshbuf_get_u32(msg, &status)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); sshbuf_free(msg); debug3("SSH2_FXP_STATUS %u", status); @@ -261,18 +261,18 @@ get_handle(struct sftp_conn *conn, u_int expected_id, size_t *len, va_end(args); if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); get_msg(conn, msg); if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (id != expected_id) fatal("%s: ID mismatch (%u != %u)", errfmt == NULL ? __func__ : errmsg, id, expected_id); if (type == SSH2_FXP_STATUS) { if ((r = sshbuf_get_u32(msg, &status)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse status"); if (errfmt != NULL) error("%s: %s", errmsg, fx2txt(status)); sshbuf_free(msg); @@ -282,7 +282,7 @@ get_handle(struct sftp_conn *conn, u_int expected_id, size_t *len, errfmt == NULL ? __func__ : errmsg, SSH2_FXP_HANDLE, type); if ((r = sshbuf_get_string(msg, &handle, len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse handle"); sshbuf_free(msg); return handle; @@ -298,12 +298,12 @@ get_decode_stat(struct sftp_conn *conn, u_int expected_id, int quiet) static Attrib a; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); get_msg(conn, msg); if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("Received stat reply T:%u I:%u", type, id); if (id != expected_id) @@ -312,7 +312,7 @@ get_decode_stat(struct sftp_conn *conn, u_int expected_id, int quiet) u_int status; if ((r = sshbuf_get_u32(msg, &status)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse status"); if (quiet) debug("Couldn't stat remote file: %s", fx2txt(status)); else @@ -324,7 +324,7 @@ get_decode_stat(struct sftp_conn *conn, u_int expected_id, int quiet) SSH2_FXP_ATTRS, type); } if ((r = decode_attrib(msg, &a)) != 0) { - error("%s: couldn't decode attrib: %s", __func__, ssh_err(r)); + error_fr(r, "decode_attrib"); sshbuf_free(msg); return NULL; } @@ -344,12 +344,12 @@ get_decode_statvfs(struct sftp_conn *conn, struct sftp_statvfs *st, int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); get_msg(conn, msg); if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("Received statvfs reply T:%u I:%u", type, id); if (id != expected_id) @@ -358,7 +358,7 @@ get_decode_statvfs(struct sftp_conn *conn, struct sftp_statvfs *st, u_int status; if ((r = sshbuf_get_u32(msg, &status)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse status"); if (quiet) debug("Couldn't statvfs: %s", fx2txt(status)); else @@ -382,7 +382,7 @@ get_decode_statvfs(struct sftp_conn *conn, struct sftp_statvfs *st, (r = sshbuf_get_u64(msg, &st->f_fsid)) != 0 || (r = sshbuf_get_u64(msg, &flag)) != 0 || (r = sshbuf_get_u64(msg, &st->f_namemax)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse statvfs"); st->f_flag = (flag & SSH2_FXE_STATVFS_ST_RDONLY) ? ST_RDONLY : 0; st->f_flag |= (flag & SSH2_FXE_STATVFS_ST_NOSUID) ? ST_NOSUID : 0; @@ -411,10 +411,11 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, ret->limit_kbps = 0; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_INIT)) != 0 || (r = sshbuf_put_u32(msg, SSH2_FILEXFER_VERSION)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); + send_msg(ret, msg); sshbuf_reset(msg); @@ -423,7 +424,7 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, /* Expecting a VERSION reply */ if ((r = sshbuf_get_u8(msg, &type)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); if (type != SSH2_FXP_VERSION) { error("Invalid packet back from SSH2_FXP_INIT (type %u)", type); @@ -432,7 +433,7 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, return(NULL); } if ((r = sshbuf_get_u32(msg, &ret->version)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse version"); debug2("Remote version: %u", ret->version); @@ -445,7 +446,7 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, if ((r = sshbuf_get_cstring(msg, &name, NULL)) != 0 || (r = sshbuf_get_string(msg, &value, &vlen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse extension"); if (strcmp(name, "posix-rename@openssh.com") == 0 && strcmp((char *)value, "1") == 0) { ret->exts |= SFTP_EXT_POSIX_RENAME; @@ -512,13 +513,13 @@ do_close(struct sftp_conn *conn, const u_char *handle, u_int handle_len) int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); id = conn->msg_id++; if ((r = sshbuf_put_u8(msg, SSH2_FXP_CLOSE)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_string(msg, handle, handle_len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); send_msg(conn, msg); debug3("Sent message SSH2_FXP_CLOSE I:%u", id); @@ -549,11 +550,11 @@ do_lsreaddir(struct sftp_conn *conn, const char *path, int print_flag, id = conn->msg_id++; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_OPENDIR)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_cstring(msg, path)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose OPENDIR"); send_msg(conn, msg); handle = get_handle(conn, id, &handle_len, @@ -578,7 +579,7 @@ do_lsreaddir(struct sftp_conn *conn, const char *path, int print_flag, if ((r = sshbuf_put_u8(msg, SSH2_FXP_READDIR)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_string(msg, handle, handle_len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose READDIR"); send_msg(conn, msg); sshbuf_reset(msg); @@ -587,7 +588,7 @@ do_lsreaddir(struct sftp_conn *conn, const char *path, int print_flag, if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("Received reply T:%u I:%u", type, id); @@ -598,8 +599,7 @@ do_lsreaddir(struct sftp_conn *conn, const char *path, int print_flag, u_int rstatus; if ((r = sshbuf_get_u32(msg, &rstatus)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse status"); debug3("Received SSH2_FXP_STATUS %d", rstatus); if (rstatus == SSH2_FX_EOF) break; @@ -610,9 +610,9 @@ do_lsreaddir(struct sftp_conn *conn, const char *path, int print_flag, SSH2_FXP_NAME, type); if ((r = sshbuf_get_u32(msg, &count)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse count"); if (count > SSHBUF_SIZE_MAX) - fatal("%s: nonsensical number of entries", __func__); + fatal_f("nonsensical number of entries"); if (count == 0) break; debug3("Received %d SSH2_FXP_NAME responses", count); @@ -624,11 +624,9 @@ do_lsreaddir(struct sftp_conn *conn, const char *path, int print_flag, NULL)) != 0 || (r = sshbuf_get_cstring(msg, &longname, NULL)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse filenames"); if ((r = decode_attrib(msg, &a)) != 0) { - error("%s: couldn't decode attrib: %s", - __func__, ssh_err(r)); + error_fr(r, "couldn't decode attrib"); free(filename); free(longname); goto out; @@ -843,12 +841,12 @@ do_realpath(struct sftp_conn *conn, const char *path) strlen(path)); if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); get_msg(conn, msg); if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (id != expected_id) fatal("ID mismatch (%u != %u)", id, expected_id); @@ -857,7 +855,7 @@ do_realpath(struct sftp_conn *conn, const char *path) u_int status; if ((r = sshbuf_get_u32(msg, &status)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse status"); error("Couldn't canonicalize: %s", fx2txt(status)); sshbuf_free(msg); return NULL; @@ -866,14 +864,14 @@ do_realpath(struct sftp_conn *conn, const char *path) SSH2_FXP_NAME, type); if ((r = sshbuf_get_u32(msg, &count)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse count"); if (count != 1) fatal("Got multiple names (%d) from SSH_FXP_REALPATH", count); if ((r = sshbuf_get_cstring(msg, &filename, NULL)) != 0 || (r = sshbuf_get_cstring(msg, &longname, NULL)) != 0 || (r = decode_attrib(msg, &a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse filename/attrib"); debug3("SSH_FXP_REALPATH %s -> %s size %lu", path, filename, (unsigned long)a.size); @@ -894,7 +892,7 @@ do_rename(struct sftp_conn *conn, const char *oldpath, const char *newpath, int r, use_ext = (conn->exts & SFTP_EXT_POSIX_RENAME) && !force_legacy; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); /* Send rename request */ id = conn->msg_id++; @@ -903,15 +901,15 @@ do_rename(struct sftp_conn *conn, const char *oldpath, const char *newpath, (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_cstring(msg, "posix-rename@openssh.com")) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose posix-rename"); } else { if ((r = sshbuf_put_u8(msg, SSH2_FXP_RENAME)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose rename"); } if ((r = sshbuf_put_cstring(msg, oldpath)) != 0 || (r = sshbuf_put_cstring(msg, newpath)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose paths"); send_msg(conn, msg); debug3("Sent message %s \"%s\" -> \"%s\"", use_ext ? "posix-rename@openssh.com" : @@ -939,7 +937,7 @@ do_hardlink(struct sftp_conn *conn, const char *oldpath, const char *newpath) } if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); /* Send link request */ id = conn->msg_id++; @@ -948,7 +946,7 @@ do_hardlink(struct sftp_conn *conn, const char *oldpath, const char *newpath) (r = sshbuf_put_cstring(msg, "hardlink@openssh.com")) != 0 || (r = sshbuf_put_cstring(msg, oldpath)) != 0 || (r = sshbuf_put_cstring(msg, newpath)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message hardlink@openssh.com \"%s\" -> \"%s\"", oldpath, newpath); @@ -975,7 +973,7 @@ do_symlink(struct sftp_conn *conn, const char *oldpath, const char *newpath) } if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); /* Send symlink request */ id = conn->msg_id++; @@ -983,7 +981,7 @@ do_symlink(struct sftp_conn *conn, const char *oldpath, const char *newpath) (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_cstring(msg, oldpath)) != 0 || (r = sshbuf_put_cstring(msg, newpath)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message SSH2_FXP_SYMLINK \"%s\" -> \"%s\"", oldpath, newpath); @@ -1010,13 +1008,13 @@ do_fsync(struct sftp_conn *conn, u_char *handle, u_int handle_len) /* Send fsync request */ if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); id = conn->msg_id++; if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_cstring(msg, "fsync@openssh.com")) != 0 || (r = sshbuf_put_string(msg, handle, handle_len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message fsync@openssh.com I:%u", id); sshbuf_free(msg); @@ -1043,12 +1041,12 @@ do_readlink(struct sftp_conn *conn, const char *path) send_string_request(conn, id, SSH2_FXP_READLINK, path, strlen(path)); if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); get_msg(conn, msg); if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (id != expected_id) fatal("ID mismatch (%u != %u)", id, expected_id); @@ -1057,7 +1055,7 @@ do_readlink(struct sftp_conn *conn, const char *path) u_int status; if ((r = sshbuf_get_u32(msg, &status)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse status"); error("Couldn't readlink: %s", fx2txt(status)); sshbuf_free(msg); return(NULL); @@ -1066,14 +1064,14 @@ do_readlink(struct sftp_conn *conn, const char *path) SSH2_FXP_NAME, type); if ((r = sshbuf_get_u32(msg, &count)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse count"); if (count != 1) fatal("Got multiple names (%d) from SSH_FXP_READLINK", count); if ((r = sshbuf_get_cstring(msg, &filename, NULL)) != 0 || (r = sshbuf_get_cstring(msg, &longname, NULL)) != 0 || (r = decode_attrib(msg, &a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse filenames/attrib"); debug3("SSH_FXP_READLINK %s -> %s", path, filename); @@ -1101,12 +1099,12 @@ do_statvfs(struct sftp_conn *conn, const char *path, struct sftp_statvfs *st, id = conn->msg_id++; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_cstring(msg, "statvfs@openssh.com")) != 0 || (r = sshbuf_put_cstring(msg, path)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); sshbuf_free(msg); @@ -1129,12 +1127,12 @@ do_fstatvfs(struct sftp_conn *conn, const u_char *handle, u_int handle_len, id = conn->msg_id++; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_cstring(msg, "fstatvfs@openssh.com")) != 0 || (r = sshbuf_put_string(msg, handle, handle_len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); sshbuf_free(msg); @@ -1156,13 +1154,13 @@ do_lsetstat(struct sftp_conn *conn, const char *path, Attrib *a) id = conn->msg_id++; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_cstring(msg, "lsetstat@openssh.com")) != 0 || (r = sshbuf_put_cstring(msg, path)) != 0 || (r = encode_attrib(msg, a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); sshbuf_free(msg); @@ -1182,13 +1180,13 @@ send_read_request(struct sftp_conn *conn, u_int id, u_int64_t offset, int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_READ)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_string(msg, handle, handle_len)) != 0 || (r = sshbuf_put_u64(msg, offset)) != 0 || (r = sshbuf_put_u32(msg, len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); sshbuf_free(msg); } @@ -1242,7 +1240,7 @@ do_download(struct sftp_conn *conn, const char *remote_path, buflen = conn->transfer_buflen; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); attrib_clear(&junk); /* Send empty attributes */ @@ -1253,7 +1251,7 @@ do_download(struct sftp_conn *conn, const char *remote_path, (r = sshbuf_put_cstring(msg, remote_path)) != 0 || (r = sshbuf_put_u32(msg, SSH2_FXF_READ)) != 0 || (r = encode_attrib(msg, &junk)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message SSH2_FXP_OPEN I:%u P:%s", id, remote_path); @@ -1339,7 +1337,7 @@ do_download(struct sftp_conn *conn, const char *remote_path, get_msg(conn, msg); if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("Received reply T:%u I:%u R:%d", type, id, max_req); /* Find the request in our queue */ @@ -1353,8 +1351,7 @@ do_download(struct sftp_conn *conn, const char *remote_path, switch (type) { case SSH2_FXP_STATUS: if ((r = sshbuf_get_u32(msg, &status)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse status"); if (status != SSH2_FX_EOF) read_error = 1; max_req = 0; @@ -1364,8 +1361,7 @@ do_download(struct sftp_conn *conn, const char *remote_path, break; case SSH2_FXP_DATA: if ((r = sshbuf_get_string(msg, &data, &len)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse data"); debug3("Received data %llu -> %llu", (unsigned long long)req->offset, (unsigned long long)req->offset + len - 1); @@ -1677,7 +1673,7 @@ do_upload(struct sftp_conn *conn, const char *local_path, } if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); /* Send open request */ id = conn->msg_id++; @@ -1687,7 +1683,7 @@ do_upload(struct sftp_conn *conn, const char *local_path, (r = sshbuf_put_u32(msg, SSH2_FXF_WRITE|SSH2_FXF_CREAT| (resume ? SSH2_FXF_APPEND : SSH2_FXF_TRUNC))) != 0 || (r = encode_attrib(msg, &a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message SSH2_FXP_OPEN I:%u P:%s", id, remote_path); @@ -1744,8 +1740,7 @@ do_upload(struct sftp_conn *conn, const char *local_path, handle_len)) != 0 || (r = sshbuf_put_u64(msg, offset)) != 0 || (r = sshbuf_put_string(msg, data, len)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message SSH2_FXP_WRITE I:%u O:%llu S:%u", id, (unsigned long long)offset, len); @@ -1763,16 +1758,14 @@ do_upload(struct sftp_conn *conn, const char *local_path, get_msg(conn, msg); if ((r = sshbuf_get_u8(msg, &type)) != 0 || (r = sshbuf_get_u32(msg, &rid)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (type != SSH2_FXP_STATUS) fatal("Expected SSH2_FXP_STATUS(%d) packet, " "got %d", SSH2_FXP_STATUS, type); if ((r = sshbuf_get_u32(msg, &status)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse status"); debug3("SSH2_FXP_STATUS %u", status); /* Find the request in our queue */ @@ -1791,7 +1784,7 @@ do_upload(struct sftp_conn *conn, const char *local_path, } offset += len; if (offset < 0) - fatal("%s: offset < 0", __func__); + fatal_f("offset < 0"); } sshbuf_free(msg); diff --git a/sftp-common.c b/sftp-common.c index 677f27d63c53..3ad57673d41e 100644 --- a/sftp-common.c +++ b/sftp-common.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-common.c,v 1.31 2018/09/13 15:23:32 millert Exp $ */ +/* $OpenBSD: sftp-common.c,v 1.32 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * Copyright (c) 2001 Damien Miller. All rights reserved. @@ -136,7 +136,7 @@ decode_attrib(struct sshbuf *b, Attrib *a) u_int i, count; if ((r = sshbuf_get_u32(b, &count)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + return r; for (i = 0; i < count; i++) { if ((r = sshbuf_get_cstring(b, &type, NULL)) != 0 || (r = sshbuf_get_string(b, &data, &dlen)) != 0) diff --git a/sftp-server.c b/sftp-server.c index 55386fa9a11d..f00f39e64f68 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-server.c,v 1.119 2020/07/17 03:51:32 djm Exp $ */ +/* $OpenBSD: sftp-server.c,v 1.120 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * @@ -489,7 +489,7 @@ send_msg(struct sshbuf *m) int r; if ((r = sshbuf_put_stringb(oqueue, m)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue"); sshbuf_reset(m); } @@ -522,16 +522,16 @@ send_status(u_int32_t id, u_int32_t status) (status != SSH2_FX_OK && status != SSH2_FX_EOF)) logit("sent status %s", status_to_message(status)); if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_STATUS)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_u32(msg, status)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); if (version >= 3) { if ((r = sshbuf_put_cstring(msg, status_to_message(status))) != 0 || (r = sshbuf_put_cstring(msg, "")) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose message"); } send_msg(msg); sshbuf_free(msg); @@ -543,11 +543,11 @@ send_data_or_handle(char type, u_int32_t id, const u_char *data, int dlen) int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, type)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_string(msg, data, dlen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(msg); sshbuf_free(msg); } @@ -578,17 +578,17 @@ send_names(u_int32_t id, int count, const Stat *stats) int i, r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_NAME)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_u32(msg, count)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); debug("request %u: sent names count %d", id, count); for (i = 0; i < count; i++) { if ((r = sshbuf_put_cstring(msg, stats[i].name)) != 0 || (r = sshbuf_put_cstring(msg, stats[i].long_name)) != 0 || (r = encode_attrib(msg, &stats[i].attrib)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose filenames/attrib"); } send_msg(msg); sshbuf_free(msg); @@ -602,11 +602,11 @@ send_attrib(u_int32_t id, const Attrib *a) debug("request %u: sent attrib have 0x%x", id, a->flags); if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_ATTRS)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = encode_attrib(msg, a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(msg); sshbuf_free(msg); } @@ -622,7 +622,7 @@ send_statvfs(u_int32_t id, struct statvfs *st) flag |= (st->f_flag & ST_NOSUID) ? SSH2_FXE_STATVFS_ST_NOSUID : 0; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED_REPLY)) != 0 || (r = sshbuf_put_u32(msg, id)) != 0 || (r = sshbuf_put_u64(msg, st->f_bsize)) != 0 || @@ -636,7 +636,7 @@ send_statvfs(u_int32_t id, struct statvfs *st) (r = sshbuf_put_u64(msg, FSID_TO_ULONG(st->f_fsid))) != 0 || (r = sshbuf_put_u64(msg, flag)) != 0 || (r = sshbuf_put_u64(msg, st->f_namemax)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(msg); sshbuf_free(msg); } @@ -650,10 +650,10 @@ process_init(void) int r; if ((r = sshbuf_get_u32(iqueue, &version)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); verbose("received client version %u", version); if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_VERSION)) != 0 || (r = sshbuf_put_u32(msg, SSH2_FILEXFER_VERSION)) != 0 || /* POSIX rename extension */ @@ -673,7 +673,7 @@ process_init(void) (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ (r = sshbuf_put_cstring(msg, "lsetstat@openssh.com")) != 0 || (r = sshbuf_put_cstring(msg, "1")) != 0) /* version */ - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(msg); sshbuf_free(msg); } @@ -689,7 +689,7 @@ process_open(u_int32_t id) if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 || (r = sshbuf_get_u32(iqueue, &pflags)) != 0 || /* portable flags */ (r = decode_attrib(iqueue, &a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: open flags %d", id, pflags); flags = flags_from_portable(pflags); @@ -726,7 +726,7 @@ process_close(u_int32_t id) int r, handle, ret, status = SSH2_FX_FAILURE; if ((r = get_handle(iqueue, &handle)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: close handle %u", id, handle); handle_log_close(handle, NULL); @@ -746,7 +746,7 @@ process_read(u_int32_t id) if ((r = get_handle(iqueue, &handle)) != 0 || (r = sshbuf_get_u64(iqueue, &off)) != 0 || (r = sshbuf_get_u32(iqueue, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("request %u: read \"%s\" (handle %d) off %llu len %d", id, handle_to_name(handle), handle, (unsigned long long)off, len); @@ -787,7 +787,7 @@ process_write(u_int32_t id) if ((r = get_handle(iqueue, &handle)) != 0 || (r = sshbuf_get_u64(iqueue, &off)) != 0 || (r = sshbuf_get_string(iqueue, &data, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("request %u: write \"%s\" (handle %d) off %llu len %zu", id, handle_to_name(handle), handle, (unsigned long long)off, len); @@ -799,19 +799,18 @@ process_write(u_int32_t id) if (!(handle_to_flags(handle) & O_APPEND) && lseek(fd, off, SEEK_SET) == -1) { status = errno_to_portable(errno); - error("%s: seek failed", __func__); + error_f("seek failed"); } else { /* XXX ATOMICIO ? */ ret = write(fd, data, len); if (ret == -1) { - error("%s: write: %s", __func__, - strerror(errno)); + error_f("write: %s", strerror(errno)); status = errno_to_portable(errno); } else if ((size_t)ret == len) { status = SSH2_FX_OK; handle_update_write(handle, ret); } else { - debug2("%s: nothing at all written", __func__); + debug2_f("nothing at all written"); status = SSH2_FX_FAILURE; } } @@ -829,7 +828,7 @@ process_do_stat(u_int32_t id, int do_lstat) int r, status = SSH2_FX_FAILURE; if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: %sstat", id, do_lstat ? "l" : ""); verbose("%sstat name \"%s\"", do_lstat ? "l" : "", name); @@ -866,7 +865,7 @@ process_fstat(u_int32_t id) int fd, r, handle, status = SSH2_FX_FAILURE; if ((r = get_handle(iqueue, &handle)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("request %u: fstat \"%s\" (handle %u)", id, handle_to_name(handle), handle); fd = handle_to_fd(handle); @@ -917,7 +916,7 @@ process_setstat(u_int32_t id) if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 || (r = decode_attrib(iqueue, &a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("request %u: setstat name \"%s\"", id, name); if (a.flags & SSH2_FILEXFER_ATTR_SIZE) { @@ -964,7 +963,7 @@ process_fsetstat(u_int32_t id) if ((r = get_handle(iqueue, &handle)) != 0 || (r = decode_attrib(iqueue, &a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("request %u: fsetstat handle %d", id, handle); fd = handle_to_fd(handle); @@ -1028,7 +1027,7 @@ process_opendir(u_int32_t id) int r, handle, status = SSH2_FX_FAILURE; if ((r = sshbuf_get_cstring(iqueue, &path, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: opendir", id); logit("opendir \"%s\"", path); @@ -1059,7 +1058,7 @@ process_readdir(u_int32_t id) int r, handle; if ((r = get_handle(iqueue, &handle)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("request %u: readdir \"%s\" (handle %d)", id, handle_to_name(handle), handle); @@ -1113,7 +1112,7 @@ process_remove(u_int32_t id) int r, status = SSH2_FX_FAILURE; if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: remove", id); logit("remove name \"%s\"", name); @@ -1132,7 +1131,7 @@ process_mkdir(u_int32_t id) if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 || (r = decode_attrib(iqueue, &a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); mode = (a.flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a.perm & 07777 : 0777; @@ -1151,7 +1150,7 @@ process_rmdir(u_int32_t id) int r, status; if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: rmdir", id); logit("rmdir name \"%s\"", name); @@ -1169,7 +1168,7 @@ process_realpath(u_int32_t id) int r; if ((r = sshbuf_get_cstring(iqueue, &path, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (path[0] == '\0') { free(path); @@ -1197,7 +1196,7 @@ process_rename(u_int32_t id) if ((r = sshbuf_get_cstring(iqueue, &oldpath, NULL)) != 0 || (r = sshbuf_get_cstring(iqueue, &newpath, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: rename", id); logit("rename old \"%s\" new \"%s\"", oldpath, newpath); @@ -1256,7 +1255,7 @@ process_readlink(u_int32_t id) char *path; if ((r = sshbuf_get_cstring(iqueue, &path, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: readlink", id); verbose("readlink \"%s\"", path); @@ -1281,7 +1280,7 @@ process_symlink(u_int32_t id) if ((r = sshbuf_get_cstring(iqueue, &oldpath, NULL)) != 0 || (r = sshbuf_get_cstring(iqueue, &newpath, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: symlink", id); logit("symlink old \"%s\" new \"%s\"", oldpath, newpath); @@ -1301,7 +1300,7 @@ process_extended_posix_rename(u_int32_t id) if ((r = sshbuf_get_cstring(iqueue, &oldpath, NULL)) != 0 || (r = sshbuf_get_cstring(iqueue, &newpath, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: posix-rename", id); logit("posix-rename old \"%s\" new \"%s\"", oldpath, newpath); @@ -1320,7 +1319,7 @@ process_extended_statvfs(u_int32_t id) int r; if ((r = sshbuf_get_cstring(iqueue, &path, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: statvfs", id); logit("statvfs \"%s\"", path); @@ -1338,7 +1337,7 @@ process_extended_fstatvfs(u_int32_t id) struct statvfs st; if ((r = get_handle(iqueue, &handle)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("request %u: fstatvfs \"%s\" (handle %u)", id, handle_to_name(handle), handle); if ((fd = handle_to_fd(handle)) < 0) { @@ -1359,7 +1358,7 @@ process_extended_hardlink(u_int32_t id) if ((r = sshbuf_get_cstring(iqueue, &oldpath, NULL)) != 0 || (r = sshbuf_get_cstring(iqueue, &newpath, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: hardlink", id); logit("hardlink old \"%s\" new \"%s\"", oldpath, newpath); @@ -1376,7 +1375,7 @@ process_extended_fsync(u_int32_t id) int handle, fd, r, status = SSH2_FX_OP_UNSUPPORTED; if ((r = get_handle(iqueue, &handle)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug3("request %u: fsync (handle %u)", id, handle); verbose("fsync \"%s\"", handle_to_name(handle)); if ((fd = handle_to_fd(handle)) < 0) @@ -1397,7 +1396,7 @@ process_extended_lsetstat(u_int32_t id) if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 || (r = decode_attrib(iqueue, &a)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("request %u: lsetstat name \"%s\"", id, name); if (a.flags & SSH2_FILEXFER_ATTR_SIZE) { @@ -1444,7 +1443,7 @@ process_extended(u_int32_t id) int i, r; if ((r = sshbuf_get_cstring(iqueue, &request, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); for (i = 0; extended_handlers[i].handler != NULL; i++) { if (strcmp(request, extended_handlers[i].ext_name) == 0) { if (!request_permitted(&extended_handlers[i])) @@ -1487,10 +1486,10 @@ process(void) if (buf_len < msg_len + 4) return; if ((r = sshbuf_consume(iqueue, 4)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "consume"); buf_len -= 4; if ((r = sshbuf_get_u8(iqueue, &type)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); switch (type) { case SSH2_FXP_INIT: @@ -1501,14 +1500,14 @@ process(void) if (!init_done) fatal("Received extended request before init"); if ((r = sshbuf_get_u32(iqueue, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse extended ID"); process_extended(id); break; default: if (!init_done) fatal("Received %u request before init", type); if ((r = sshbuf_get_u32(iqueue, &id)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse ID"); for (i = 0; handlers[i].handler != NULL; i++) { if (type == handlers[i].type) { if (!request_permitted(&handlers[i])) { @@ -1535,7 +1534,7 @@ process(void) } if (msg_len > consumed && (r = sshbuf_consume(iqueue, msg_len - consumed)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "consume"); } /* Cleanup handler that logs active handles upon normal exit */ @@ -1693,9 +1692,9 @@ sftp_server_main(int argc, char **argv, struct passwd *user_pw) max = out; if ((iqueue = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((oqueue = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); rset = xcalloc(howmany(max + 1, NFDBITS), sizeof(fd_mask)); wset = xcalloc(howmany(max + 1, NFDBITS), sizeof(fd_mask)); @@ -1722,8 +1721,7 @@ sftp_server_main(int argc, char **argv, struct passwd *user_pw) SFTP_MAX_MSG_LENGTH)) == 0) FD_SET(in, rset); else if (r != SSH_ERR_NO_BUFFER_SPACE) - fatal("%s: sshbuf_check_reserve failed: %s", - __func__, ssh_err(r)); + fatal_fr(r, "reserve"); olen = sshbuf_len(oqueue); if (olen > 0) @@ -1745,10 +1743,8 @@ sftp_server_main(int argc, char **argv, struct passwd *user_pw) } else if (len == -1) { error("read: %s", strerror(errno)); sftp_server_cleanup_exit(1); - } else if ((r = sshbuf_put(iqueue, buf, len)) != 0) { - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); - } + } else if ((r = sshbuf_put(iqueue, buf, len)) != 0) + fatal_fr(r, "sshbuf_put"); } /* send oqueue to stdout */ if (FD_ISSET(out, wset)) { @@ -1756,10 +1752,8 @@ sftp_server_main(int argc, char **argv, struct passwd *user_pw) if (len == -1) { error("write: %s", strerror(errno)); sftp_server_cleanup_exit(1); - } else if ((r = sshbuf_consume(oqueue, len)) != 0) { - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); - } + } else if ((r = sshbuf_consume(oqueue, len)) != 0) + fatal_fr(r, "consume"); } /* @@ -1771,7 +1765,6 @@ sftp_server_main(int argc, char **argv, struct passwd *user_pw) if (r == 0) process(); else if (r != SSH_ERR_NO_BUFFER_SPACE) - fatal("%s: sshbuf_check_reserve: %s", - __func__, ssh_err(r)); + fatal_fr(r, "reserve"); } } diff --git a/sftp.c b/sftp.c index e09307b1a02e..e522844dea7f 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.202 2020/10/04 03:04:02 dtucker Exp $ */ +/* $OpenBSD: sftp.c,v 1.203 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -2101,7 +2101,7 @@ complete(EditLine *el, int ch) lf = el_line(el); if (el_get(el, EL_CLIENTDATA, (void**)&complete_ctx) != 0) - fatal("%s: el_get failed", __func__); + fatal_f("el_get failed"); /* Figure out which argument the cursor points to */ cursor = lf->cursor - lf->buffer; diff --git a/sk-usbhid.c b/sk-usbhid.c index 460408868a69..198992d56dc0 100644 --- a/sk-usbhid.c +++ b/sk-usbhid.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sk-usbhid.c,v 1.27 2020/10/03 03:40:38 djm Exp $ */ +/* $OpenBSD: sk-usbhid.c,v 1.28 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl * Copyright (c) 2020 Pedro Martelletto @@ -815,7 +815,7 @@ sk_enroll(uint32_t alg, const uint8_t *challenge, size_t challenge_len, } if ((ptr = fido_cred_x5c_ptr(cred)) != NULL) { len = fido_cred_x5c_len(cred); - debug3("%s: attestation cert len=%zu", __func__, len); + skdebug(__func__, "attestation cert len=%zu", len); if ((response->attestation_cert = calloc(1, len)) == NULL) { skdebug(__func__, "calloc attestation cert failed"); goto out; @@ -825,7 +825,7 @@ sk_enroll(uint32_t alg, const uint8_t *challenge, size_t challenge_len, } if ((ptr = fido_cred_authdata_ptr(cred)) != NULL) { len = fido_cred_authdata_len(cred); - debug3("%s: authdata len=%zu", __func__, len); + skdebug(__func__, "authdata len=%zu", len); if ((response->authdata = calloc(1, len)) == NULL) { skdebug(__func__, "calloc authdata failed"); goto out; diff --git a/ssh-add.c b/ssh-add.c index 936dc21287e5..28d5bea38fed 100644 --- a/ssh-add.c +++ b/ssh-add.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-add.c,v 1.157 2020/08/31 04:33:17 djm Exp $ */ +/* $OpenBSD: ssh-add.c,v 1.158 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -146,9 +146,9 @@ delete_stdin(int agent_fd, int qflag) if (*cp == '#' || *cp == '\0') continue; if ((key = sshkey_new(KEY_UNSPEC)) == NULL) - fatal("%s: sshkey_new", __func__); + fatal_f("sshkey_new"); if ((r = sshkey_read(key, &cp)) != 0) { - error("(stdin):%d: invalid key: %s", lnum, ssh_err(r)); + error_r(r, "(stdin):%d: invalid key", lnum); continue; } if (delete_one(agent_fd, key, cp, "(stdin)", qflag) == 0) @@ -185,8 +185,7 @@ delete_file(int agent_fd, const char *filename, int key_only, int qflag) xasprintf(&certpath, "%s-cert.pub", filename); if ((r = sshkey_load_public(certpath, &cert, &comment)) != 0) { if (r != SSH_ERR_SYSTEM_ERROR || errno != ENOENT) - error("Failed to load certificate \"%s\": %s", - certpath, ssh_err(r)); + error_r(r, "Failed to load certificate \"%s\"", certpath); goto out; } @@ -393,8 +392,7 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag, xasprintf(&certpath, "%s-cert.pub", filename); if ((r = sshkey_load_public(certpath, &cert, NULL)) != 0) { if (r != SSH_ERR_SYSTEM_ERROR || errno != ENOENT) - error("Failed to load certificate \"%s\": %s", - certpath, ssh_err(r)); + error_r(r, "Failed to load certificate \"%s\"", certpath); goto out; } @@ -407,12 +405,12 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag, /* Graft with private bits */ if ((r = sshkey_to_certified(private)) != 0) { - error("%s: sshkey_to_certified: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_to_certified"); sshkey_free(cert); goto out; } if ((r = sshkey_cert_copy(cert, private)) != 0) { - error("%s: sshkey_cert_copy: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_cert_copy"); sshkey_free(cert); goto out; } @@ -420,8 +418,8 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag, if ((r = ssh_add_identity_constrained(agent_fd, private, comment, lifetime, confirm, maxsign, skprovider)) != 0) { - error("Certificate %s (%s) add failed: %s", certpath, - private->cert->key_id, ssh_err(r)); + error_r(r, "Certificate %s (%s) add failed", certpath, + private->cert->key_id); goto out; } /* success */ @@ -484,20 +482,18 @@ test_key(int agent_fd, const char *filename) char data[1024]; if ((r = sshkey_load_public(filename, &key, NULL)) != 0) { - error("Couldn't read public key %s: %s", filename, ssh_err(r)); + error_r(r, "Couldn't read public key %s", filename); return -1; } arc4random_buf(data, sizeof(data)); if ((r = ssh_agent_sign(agent_fd, key, &sig, &slen, data, sizeof(data), NULL, 0)) != 0) { - error("Agent signature failed for %s: %s", - filename, ssh_err(r)); + error_r(r, "Agent signature failed for %s", filename); goto done; } if ((r = sshkey_verify(key, sig, slen, data, sizeof(data), NULL, 0, NULL)) != 0) { - error("Signature verification failed for %s: %s", - filename, ssh_err(r)); + error_r(r, "Signature verification failed for %s", filename); goto done; } /* success */ @@ -592,13 +588,13 @@ load_resident_keys(int agent_fd, const char *skprovider, int qflag) pass = read_passphrase("Enter PIN for authenticator: ", RP_ALLOW_STDIN); if ((r = sshsk_load_resident(skprovider, NULL, pass, &keys, &nkeys)) != 0) { - error("Unable to load resident keys: %s", ssh_err(r)); + error_r(r, "Unable to load resident keys"); return r; } for (i = 0; i < nkeys; i++) { if ((fp = sshkey_fingerprint(keys[i], fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint failed", __func__); + fatal_f("sshkey_fingerprint failed"); if ((r = ssh_add_identity_constrained(agent_fd, keys[i], "", lifetime, confirm, maxsign, skprovider)) != 0) { error("Unable to add key %s %s", diff --git a/ssh-agent.c b/ssh-agent.c index 853841b5fa00..179f353a3fe8 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.265 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.266 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -238,7 +238,7 @@ send_status(SocketEntry *e, int success) if ((r = sshbuf_put_u32(e->output, 1)) != 0 || (r = sshbuf_put_u8(e->output, success ? SSH_AGENT_SUCCESS : SSH_AGENT_FAILURE)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); } /* send list of supported public keys to 'client' */ @@ -250,21 +250,20 @@ process_request_identities(SocketEntry *e) int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_AGENT_IDENTITIES_ANSWER)) != 0 || (r = sshbuf_put_u32(msg, idtab->nentries)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); TAILQ_FOREACH(id, &idtab->idlist, next) { if ((r = sshkey_puts_opts(id->key, msg, SSHKEY_SERIALIZE_INFO)) != 0 || (r = sshbuf_put_cstring(msg, id->comment)) != 0) { - error("%s: put key/comment: %s", __func__, - ssh_err(r)); + error_fr(r, "compose key/comment"); continue; } } if ((r = sshbuf_put_stringb(e->output, msg)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue"); sshbuf_free(msg); } @@ -305,7 +304,7 @@ check_websafe_message_contents(struct sshkey *key, struct sshkey *mkey = NULL; if ((b = sshbuf_from(msg, len)) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); /* SSH userauth request */ if ((r = sshbuf_get_string_direct(b, NULL, NULL)) == 0 && /* sess_id */ @@ -317,12 +316,12 @@ check_websafe_message_contents(struct sshkey *key, (r = sshbuf_get_cstring(b, NULL, NULL)) == 0 && /* alg */ (r = sshkey_froms(b, &mkey)) == 0 && /* key */ sshbuf_len(b) == 0) { - debug("%s: parsed userauth", __func__); + debug_f("parsed userauth"); if (m == SSH2_MSG_USERAUTH_REQUEST && n == 1 && strcmp(cp1, "ssh-connection") == 0 && strcmp(cp2, "publickey") == 0 && sshkey_equal(key, mkey)) { - debug("%s: well formed userauth", __func__); + debug_f("well formed userauth"); matched = 1; } } @@ -334,7 +333,7 @@ check_websafe_message_contents(struct sshkey *key, return 1; if ((b = sshbuf_from(msg, len)) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); cp1 = cp2 = NULL; mkey = NULL; @@ -346,7 +345,7 @@ check_websafe_message_contents(struct sshkey *key, (r = sshbuf_get_cstring(b, NULL, NULL)) == 0 && /* hashalg */ (r = sshbuf_get_string_direct(b, NULL, NULL)) == 0 && /* H(msg) */ sshbuf_len(b) == 0) { - debug("%s: parsed sshsig", __func__); + debug_f("parsed sshsig"); matched = 1; } @@ -376,20 +375,20 @@ process_sign_request2(SocketEntry *e) struct notifier_ctx *notifier = NULL; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshkey_froms(e->request, &key)) != 0 || (r = sshbuf_get_string_direct(e->request, &data, &dlen)) != 0 || (r = sshbuf_get_u32(e->request, &flags)) != 0) { - error("%s: couldn't parse request: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto send; } if ((id = lookup_identity(key)) == NULL) { - verbose("%s: %s key not found", __func__, sshkey_type(key)); + verbose_f("%s key not found", sshkey_type(key)); goto send; } if (id->confirm && confirm_key(id) != 0) { - verbose("%s: user refused key", __func__); + verbose_f("user refused key"); goto send; } if (sshkey_is_sk(id->key)) { @@ -401,7 +400,7 @@ process_sign_request2(SocketEntry *e) if ((id->key->sk_flags & SSH_SK_USER_PRESENCE_REQD)) { if ((fp = sshkey_fingerprint(key, SSH_FP_HASH_DEFAULT, SSH_FP_DEFAULT)) == NULL) - fatal("%s: fingerprint failed", __func__); + fatal_f("fingerprint failed"); notifier = notify_start(0, "Confirm user presence for key %s %s", sshkey_type(id->key), fp); @@ -411,7 +410,7 @@ process_sign_request2(SocketEntry *e) if ((r = sshkey_sign(id->key, &signature, &slen, data, dlen, agent_decode_alg(key, flags), id->sk_provider, NULL, compat)) != 0) { - error("%s: sshkey_sign: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_sign"); goto send; } /* Success */ @@ -423,12 +422,12 @@ process_sign_request2(SocketEntry *e) if (ok == 0) { if ((r = sshbuf_put_u8(msg, SSH2_AGENT_SIGN_RESPONSE)) != 0 || (r = sshbuf_put_string(msg, signature, slen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); } else if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose failure"); if ((r = sshbuf_put_stringb(e->output, msg)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue"); sshbuf_free(msg); free(signature); @@ -443,17 +442,16 @@ process_remove_identity(SocketEntry *e) Identity *id; if ((r = sshkey_froms(e->request, &key)) != 0) { - error("%s: get key: %s", __func__, ssh_err(r)); + error_fr(r, "parse key"); goto done; } if ((id = lookup_identity(key)) == NULL) { - debug("%s: key not found", __func__); + debug_f("key not found"); goto done; } /* We have this key, free it. */ if (idtab->nentries < 1) - fatal("%s: internal error: nentries %d", - __func__, idtab->nentries); + fatal_f("internal error: nentries %d", idtab->nentries); TAILQ_REMOVE(&idtab->idlist, id, next); free_identity(id); idtab->nentries--; @@ -524,19 +522,18 @@ process_add_identity(SocketEntry *e) if ((r = sshkey_private_deserialize(e->request, &k)) != 0 || k == NULL || (r = sshbuf_get_cstring(e->request, &comment, NULL)) != 0) { - error("%s: decode private key: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto err; } while (sshbuf_len(e->request)) { if ((r = sshbuf_get_u8(e->request, &ctype)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "parse constraint type"); goto err; } switch (ctype) { case SSH_AGENT_CONSTRAIN_LIFETIME: if ((r = sshbuf_get_u32(e->request, &seconds)) != 0) { - error("%s: bad lifetime constraint: %s", - __func__, ssh_err(r)); + error_fr(r, "parse lifetime constraint"); goto err; } death = monotime() + seconds; @@ -546,24 +543,21 @@ process_add_identity(SocketEntry *e) break; case SSH_AGENT_CONSTRAIN_MAXSIGN: if ((r = sshbuf_get_u32(e->request, &maxsign)) != 0) { - error("%s: bad maxsign constraint: %s", - __func__, ssh_err(r)); + error_fr(r, "parse maxsign constraint"); goto err; } if ((r = sshkey_enable_maxsign(k, maxsign)) != 0) { - error("%s: cannot enable maxsign: %s", - __func__, ssh_err(r)); + error_fr(r, "enable maxsign"); goto err; } break; case SSH_AGENT_CONSTRAIN_EXTENSION: if ((r = sshbuf_get_cstring(e->request, &ext_name, NULL)) != 0) { - error("%s: cannot parse extension: %s", - __func__, ssh_err(r)); + error_fr(r, "parse constraint extension"); goto err; } - debug("%s: constraint ext %s", __func__, ext_name); + debug_f("constraint ext %s", ext_name); if (strcmp(ext_name, "sk-provider@openssh.com") == 0) { if (sk_provider != NULL) { error("%s already set", ext_name); @@ -571,19 +565,18 @@ process_add_identity(SocketEntry *e) } if ((r = sshbuf_get_cstring(e->request, &sk_provider, NULL)) != 0) { - error("%s: cannot parse %s: %s", - __func__, ext_name, ssh_err(r)); + error_fr(r, "parse %s", ext_name); goto err; } } else { - error("%s: unsupported constraint \"%s\"", - __func__, ext_name); + error_f("unsupported constraint \"%s\"", + ext_name); goto err; } free(ext_name); break; default: - error("%s: Unknown constraint %d", __func__, ctype); + error_f("Unknown constraint %d", ctype); err: free(sk_provider); free(ext_name); @@ -601,7 +594,7 @@ process_add_identity(SocketEntry *e) goto send; } if (strcasecmp(sk_provider, "internal") == 0) { - debug("%s: internal provider", __func__); + debug_f("internal provider"); } else { if (realpath(sk_provider, canonical_provider) == NULL) { verbose("failed provider \"%.100s\": " @@ -622,7 +615,7 @@ process_add_identity(SocketEntry *e) } } if ((r = sshkey_shield_private(k)) != 0) { - error("%s: shield private key: %s", __func__, ssh_err(r)); + error_fr(r, "shield private"); goto err; } @@ -648,9 +641,9 @@ process_add_identity(SocketEntry *e) if ((fp = sshkey_fingerprint(k, SSH_FP_HASH_DEFAULT, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint failed", __func__); - debug("%s: add %s %s \"%.100s\" (life: %u) (confirm: %u) " - "(provider: %s)", __func__, sshkey_ssh_name(k), fp, comment, + fatal_f("sshkey_fingerprint failed"); + debug_f("add %s %s \"%.100s\" (life: %u) (confirm: %u) " + "(provider: %s)", sshkey_ssh_name(k), fp, comment, seconds, confirm, sk_provider == NULL ? "none" : sk_provider); free(fp); send: @@ -673,7 +666,7 @@ process_lock_agent(SocketEntry *e, int lock) * do is abort. */ if ((r = sshbuf_get_cstring(e->request, &passwd, &pwlen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (pwlen == 0) { debug("empty password not supported"); } else if (locked && !lock) { @@ -716,11 +709,11 @@ no_identities(SocketEntry *e) int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_AGENT_IDENTITIES_ANSWER)) != 0 || (r = sshbuf_put_u32(msg, 0)) != 0 || (r = sshbuf_put_stringb(e->output, msg)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); sshbuf_free(msg); } @@ -739,20 +732,19 @@ process_add_smartcard_key(SocketEntry *e) if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 || (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto send; } while (sshbuf_len(e->request)) { if ((r = sshbuf_get_u8(e->request, &type)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "parse type"); goto send; } switch (type) { case SSH_AGENT_CONSTRAIN_LIFETIME: if ((r = sshbuf_get_u32(e->request, &seconds)) != 0) { - error("%s: buffer error: %s", - __func__, ssh_err(r)); + error_fr(r, "parse lifetime"); goto send; } death = monotime() + seconds; @@ -761,7 +753,7 @@ process_add_smartcard_key(SocketEntry *e) confirm = 1; break; default: - error("%s: Unknown constraint type %d", __func__, type); + error_f("Unknown constraint type %d", type); goto send; } } @@ -775,7 +767,7 @@ process_add_smartcard_key(SocketEntry *e) "provider not allowed", canonical_provider); goto send; } - debug("%s: add %.100s", __func__, canonical_provider); + debug_f("add %.100s", canonical_provider); if (lifetime && !death) death = monotime() + lifetime; @@ -819,7 +811,7 @@ process_remove_smartcard_key(SocketEntry *e) if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 || (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto send; } free(pin); @@ -830,7 +822,7 @@ process_remove_smartcard_key(SocketEntry *e) goto send; } - debug("%s: remove %.100s", __func__, canonical_provider); + debug_f("remove %.100s", canonical_provider); for (id = TAILQ_FIRST(&idtab->idlist); id; id = nxt) { nxt = TAILQ_NEXT(id, next); /* Skip file--based keys */ @@ -845,7 +837,7 @@ process_remove_smartcard_key(SocketEntry *e) if (pkcs11_del_provider(canonical_provider) == 0) success = 1; else - error("%s: pkcs11_del_provider failed", __func__); + error_f("pkcs11_del_provider failed"); send: free(provider); send_status(e, success); @@ -865,10 +857,8 @@ process_message(u_int socknum) int r; SocketEntry *e; - if (socknum >= sockets_alloc) { - fatal("%s: socket number %u >= allocated %u", - __func__, socknum, sockets_alloc); - } + if (socknum >= sockets_alloc) + fatal_f("sock %u >= allocated %u", socknum, sockets_alloc); e = &sockets[socknum]; if (sshbuf_len(e->input) < 5) @@ -876,8 +866,8 @@ process_message(u_int socknum) cp = sshbuf_ptr(e->input); msg_len = PEEK_U32(cp); if (msg_len > AGENT_MAX_LEN) { - debug("%s: socket %u (fd=%d) message too long %u > %u", - __func__, socknum, e->fd, msg_len, AGENT_MAX_LEN); + debug_f("socket %u (fd=%d) message too long %u > %u", + socknum, e->fd, msg_len, AGENT_MAX_LEN); return -1; } if (sshbuf_len(e->input) < msg_len + 4) @@ -889,13 +879,13 @@ process_message(u_int socknum) (r = sshbuf_get_u8(e->request, &type)) != 0) { if (r == SSH_ERR_MESSAGE_INCOMPLETE || r == SSH_ERR_STRING_TOO_LARGE) { - debug("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); return -1; } - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); } - debug("%s: socket %u (fd=%d) type %d", __func__, socknum, e->fd, type); + debug_f("socket %u (fd=%d) type %d", socknum, e->fd, type); /* check whether agent is locked */ if (locked && type != SSH_AGENTC_UNLOCK) { @@ -969,12 +959,10 @@ new_socket(sock_type type, int fd) for (i = 0; i < sockets_alloc; i++) if (sockets[i].type == AUTH_UNUSED) { sockets[i].fd = fd; - if ((sockets[i].input = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); - if ((sockets[i].output = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); - if ((sockets[i].request = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + if ((sockets[i].input = sshbuf_new()) == NULL || + (sockets[i].output = sshbuf_new()) == NULL || + (sockets[i].request = sshbuf_new()) == NULL) + fatal_f("sshbuf_new failed"); sockets[i].type = type; return; } @@ -985,12 +973,10 @@ new_socket(sock_type type, int fd) sockets[i].type = AUTH_UNUSED; sockets_alloc = new_alloc; sockets[old_alloc].fd = fd; - if ((sockets[old_alloc].input = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); - if ((sockets[old_alloc].output = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); - if ((sockets[old_alloc].request = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + if ((sockets[old_alloc].input = sshbuf_new()) == NULL || + (sockets[old_alloc].output = sshbuf_new()) == NULL || + (sockets[old_alloc].request = sshbuf_new()) == NULL) + fatal_f("sshbuf_new failed"); sockets[old_alloc].type = type; } @@ -1035,14 +1021,13 @@ handle_conn_read(u_int socknum) if (len == -1) { if (errno == EAGAIN || errno == EINTR) return 0; - error("%s: read error on socket %u (fd %d): %s", - __func__, socknum, sockets[socknum].fd, - strerror(errno)); + error_f("read error on socket %u (fd %d): %s", + socknum, sockets[socknum].fd, strerror(errno)); } return -1; } if ((r = sshbuf_put(sockets[socknum].input, buf, len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); explicit_bzero(buf, sizeof(buf)); for (;;) { if ((r = process_message(socknum)) == -1) @@ -1067,14 +1052,13 @@ handle_conn_write(u_int socknum) if (len == -1) { if (errno == EAGAIN || errno == EINTR) return 0; - error("%s: read error on socket %u (fd %d): %s", - __func__, socknum, sockets[socknum].fd, - strerror(errno)); + error_f("read error on socket %u (fd %d): %s", + socknum, sockets[socknum].fd, strerror(errno)); } return -1; } if ((r = sshbuf_consume(sockets[socknum].output, len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "consume"); return 0; } @@ -1096,7 +1080,7 @@ after_poll(struct pollfd *pfd, size_t npfd, u_int maxfds) break; } if (socknum >= sockets_alloc) { - error("%s: no socket for fd %d", __func__, pfd[i].fd); + error_f("no socket for fd %d", pfd[i].fd); continue; } /* Process events */ @@ -1157,7 +1141,7 @@ prepare_poll(struct pollfd **pfdp, size_t *npfdp, int *timeoutp, u_int maxfds) } if (npfd != *npfdp && (pfd = recallocarray(pfd, *npfdp, npfd, sizeof(*pfd))) == NULL) - fatal("%s: recallocarray failed", __func__); + fatal_f("recallocarray failed"); *pfdp = pfd; *npfdp = npfd; @@ -1186,10 +1170,8 @@ prepare_poll(struct pollfd **pfdp, size_t *npfdp, int *timeoutp, u_int maxfds) (r = sshbuf_check_reserve(sockets[i].output, AGENT_MAX_LEN)) == 0) pfd[j].events = POLLIN; - else if (r != SSH_ERR_NO_BUFFER_SPACE) { - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); - } + else if (r != SSH_ERR_NO_BUFFER_SPACE) + fatal_fr(r, "reserve"); if (sshbuf_len(sockets[i].output) > 0) pfd[j].events |= POLLOUT; j++; @@ -1218,7 +1200,7 @@ cleanup_socket(void) { if (cleanup_pid != 0 && getpid() != cleanup_pid) return; - debug("%s: cleanup", __func__); + debug_f("cleanup"); if (socket_name[0]) unlink(socket_name); if (socket_dir[0]) @@ -1494,7 +1476,7 @@ main(int ac, char **av) (void)chdir("/"); if (stdfd_devnull(1, 1, 1) == -1) - error("%s: stdfd_devnull failed", __func__); + error_f("stdfd_devnull failed"); #ifdef HAVE_SETRLIMIT /* deny core dumps, since memory contains unencrypted private keys */ diff --git a/ssh-ed25519-sk.c b/ssh-ed25519-sk.c index f784776d4aab..4393ca669e17 100644 --- a/ssh-ed25519-sk.c +++ b/ssh-ed25519-sk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-ed25519-sk.c,v 1.5 2020/02/26 13:40:09 jsg Exp $ */ +/* $OpenBSD: ssh-ed25519-sk.c,v 1.6 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl. All rights reserved. * @@ -139,8 +139,7 @@ ssh_ed25519_sk_verify(const struct sshkey *key, } if ((ret = crypto_sign_ed25519_open(m, &mlen, sm, smlen, key->ed25519_pk)) != 0) { - debug2("%s: crypto_sign_ed25519_open failed: %d", - __func__, ret); + debug2_f("crypto_sign_ed25519_open failed: %d", ret); } if (ret != 0 || mlen != smlen - len) { r = SSH_ERR_SIGNATURE_INVALID; diff --git a/ssh-ed25519.c b/ssh-ed25519.c index 7dee82707ffb..23419f3c884a 100644 --- a/ssh-ed25519.c +++ b/ssh-ed25519.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-ed25519.c,v 1.8 2020/02/26 13:40:09 jsg Exp $ */ +/* $OpenBSD: ssh-ed25519.c,v 1.9 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2013 Markus Friedl * @@ -140,8 +140,7 @@ ssh_ed25519_verify(const struct sshkey *key, memcpy(sm+len, data, datalen); if ((ret = crypto_sign_ed25519_open(m, &mlen, sm, smlen, key->ed25519_pk)) != 0) { - debug2("%s: crypto_sign_ed25519_open failed: %d", - __func__, ret); + debug2_f("crypto_sign_ed25519_open failed: %d", ret); } if (ret != 0 || mlen != datalen) { r = SSH_ERR_SIGNATURE_INVALID; diff --git a/ssh-keygen.c b/ssh-keygen.c index a12b79a5606d..acac61742cca 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.420 2020/09/09 03:08:01 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.421 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -321,7 +321,7 @@ load_identity(const char *filename, char **commentp) if ((r = sshkey_load_private(filename, "", &prv, commentp)) == 0) return prv; if (r != SSH_ERR_KEY_WRONG_PASSPHRASE) - fatal("Load key \"%s\": %s", filename, ssh_err(r)); + fatal_r(r, "Load key \"%s\"", filename); if (identity_passphrase) pass = xstrdup(identity_passphrase); else @@ -329,7 +329,7 @@ load_identity(const char *filename, char **commentp) r = sshkey_load_private(filename, pass, &prv, commentp); freezero(pass, strlen(pass)); if (r != 0) - fatal("Load key \"%s\": %s", filename, ssh_err(r)); + fatal_r(r, "Load key \"%s\"", filename); return prv; } @@ -347,11 +347,11 @@ do_convert_to_ssh2(struct passwd *pw, struct sshkey *k) int r; if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshkey_putb(k, b)) != 0) - fatal("key_to_blob failed: %s", ssh_err(r)); + fatal_fr(r, "put key"); if ((b64 = sshbuf_dtob64_string(b, 1)) == NULL) - fatal("%s: sshbuf_dtob64_string failed", __func__); + fatal_f("sshbuf_dtob64_string failed"); /* Comment + surrounds must fit into 72 chars (RFC 4716 sec 3.3) */ snprintf(comment, sizeof(comment), @@ -388,7 +388,7 @@ do_convert_to_pkcs8(struct sshkey *k) break; #endif default: - fatal("%s: unsupported key type %s", __func__, sshkey_type(k)); + fatal_f("unsupported key type %s", sshkey_type(k)); } exit(0); } @@ -412,7 +412,7 @@ do_convert_to_pem(struct sshkey *k) break; #endif default: - fatal("%s: unsupported key type %s", __func__, sshkey_type(k)); + fatal_f("unsupported key type %s", sshkey_type(k)); } exit(0); } @@ -441,7 +441,7 @@ do_convert_to(struct passwd *pw) do_convert_to_pem(k); break; default: - fatal("%s: unknown key format %d", __func__, convert_format); + fatal_f("unknown key format %d", convert_format); } exit(0); } @@ -457,15 +457,15 @@ buffer_get_bignum_bits(struct sshbuf *b, BIGNUM *value) int r; if ((r = sshbuf_get_u32(b, &bignum_bits)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); bytes = (bignum_bits + 7) / 8; if (sshbuf_len(b) < bytes) - fatal("%s: input buffer too small: need %d have %zu", - __func__, bytes, sshbuf_len(b)); + fatal_f("input buffer too small: need %d have %zu", + bytes, sshbuf_len(b)); if (BN_bin2bn(sshbuf_ptr(b), bytes, value) == NULL) - fatal("%s: BN_bin2bn failed", __func__); + fatal_f("BN_bin2bn failed"); if ((r = sshbuf_consume(b, bytes)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "consume"); } static struct sshkey * @@ -484,7 +484,7 @@ do_convert_private_ssh2(struct sshbuf *b) BIGNUM *rsa_p = NULL, *rsa_q = NULL, *rsa_iqmp = NULL; if ((r = sshbuf_get_u32(b, &magic)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse magic"); if (magic != SSH_COM_PRIVATE_KEY_MAGIC) { error("bad magic 0x%x != 0x%x", magic, @@ -497,7 +497,7 @@ do_convert_private_ssh2(struct sshbuf *b) (r = sshbuf_get_u32(b, &i2)) != 0 || (r = sshbuf_get_u32(b, &i3)) != 0 || (r = sshbuf_get_u32(b, &i4)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); debug("ignore (%d %d %d %d)", i1, i2, i3, i4); if (strcmp(cipher, "none") != 0) { error("unsupported cipher %s", cipher); @@ -526,24 +526,24 @@ do_convert_private_ssh2(struct sshbuf *b) (dsa_g = BN_new()) == NULL || (dsa_pub_key = BN_new()) == NULL || (dsa_priv_key = BN_new()) == NULL) - fatal("%s: BN_new", __func__); + fatal_f("BN_new"); buffer_get_bignum_bits(b, dsa_p); buffer_get_bignum_bits(b, dsa_g); buffer_get_bignum_bits(b, dsa_q); buffer_get_bignum_bits(b, dsa_pub_key); buffer_get_bignum_bits(b, dsa_priv_key); if (!DSA_set0_pqg(key->dsa, dsa_p, dsa_q, dsa_g)) - fatal("%s: DSA_set0_pqg failed", __func__); + fatal_f("DSA_set0_pqg failed"); dsa_p = dsa_q = dsa_g = NULL; /* transferred */ if (!DSA_set0_key(key->dsa, dsa_pub_key, dsa_priv_key)) - fatal("%s: DSA_set0_key failed", __func__); + fatal_f("DSA_set0_key failed"); dsa_pub_key = dsa_priv_key = NULL; /* transferred */ break; case KEY_RSA: if ((r = sshbuf_get_u8(b, &e1)) != 0 || (e1 < 30 && (r = sshbuf_get_u8(b, &e2)) != 0) || (e1 < 30 && (r = sshbuf_get_u8(b, &e3)) != 0)) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse RSA"); e = e1; debug("e %lx", e); if (e < 30) { @@ -555,7 +555,7 @@ do_convert_private_ssh2(struct sshbuf *b) debug("e %lx", e); } if ((rsa_e = BN_new()) == NULL) - fatal("%s: BN_new", __func__); + fatal_f("BN_new"); if (!BN_set_word(rsa_e, e)) { BN_clear_free(rsa_e); sshkey_free(key); @@ -566,26 +566,26 @@ do_convert_private_ssh2(struct sshbuf *b) (rsa_p = BN_new()) == NULL || (rsa_q = BN_new()) == NULL || (rsa_iqmp = BN_new()) == NULL) - fatal("%s: BN_new", __func__); + fatal_f("BN_new"); buffer_get_bignum_bits(b, rsa_d); buffer_get_bignum_bits(b, rsa_n); buffer_get_bignum_bits(b, rsa_iqmp); buffer_get_bignum_bits(b, rsa_q); buffer_get_bignum_bits(b, rsa_p); if (!RSA_set0_key(key->rsa, rsa_n, rsa_e, rsa_d)) - fatal("%s: RSA_set0_key failed", __func__); + fatal_f("RSA_set0_key failed"); rsa_n = rsa_e = rsa_d = NULL; /* transferred */ if (!RSA_set0_factors(key->rsa, rsa_p, rsa_q)) - fatal("%s: RSA_set0_factors failed", __func__); + fatal_f("RSA_set0_factors failed"); rsa_p = rsa_q = NULL; /* transferred */ if ((r = ssh_rsa_complete_crt_parameters(key, rsa_iqmp)) != 0) - fatal("generate RSA parameters failed: %s", ssh_err(r)); + fatal_fr(r, "generate RSA parameters"); BN_clear_free(rsa_iqmp); break; } rlen = sshbuf_len(b); if (rlen != 0) - error("%s: remaining bytes in key blob %d", __func__, rlen); + error_f("remaining bytes in key blob %d", rlen); /* try the key */ if (sshkey_sign(key, &sig, &slen, data, sizeof(data), @@ -668,12 +668,12 @@ do_convert_from_ssh2(struct passwd *pw, struct sshkey **k, int *private) (encoded[len-3] == '=')) encoded[len-3] = '\0'; if ((r = sshbuf_b64tod(buf, encoded)) != 0) - fatal("%s: base64 decoding failed: %s", __func__, ssh_err(r)); + fatal_fr(r, "base64 decode"); if (*private) { if ((*k = do_convert_private_ssh2(buf)) == NULL) - fatal("%s: private key conversion failed", __func__); + fatal_f("private key conversion failed"); } else if ((r = sshkey_fromb(buf, k)) != 0) - fatal("decode blob failed: %s", ssh_err(r)); + fatal_fr(r, "parse key"); sshbuf_free(buf); fclose(fp); } @@ -687,7 +687,7 @@ do_convert_from_pkcs8(struct sshkey **k, int *private) if ((fp = fopen(identity_file, "r")) == NULL) fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); if ((pubkey = PEM_read_PUBKEY(fp, NULL, NULL, NULL)) == NULL) { - fatal("%s: %s is not a recognised public key format", __func__, + fatal_f("%s is not a recognised public key format", identity_file); } fclose(fp); @@ -714,7 +714,7 @@ do_convert_from_pkcs8(struct sshkey **k, int *private) break; #endif default: - fatal("%s: unsupported pubkey type %d", __func__, + fatal_f("unsupported pubkey type %d", EVP_PKEY_base_id(pubkey)); } EVP_PKEY_free(pubkey); @@ -737,7 +737,7 @@ do_convert_from_pem(struct sshkey **k, int *private) fclose(fp); return; } - fatal("%s: unrecognised raw private key format", __func__); + fatal_f("unrecognised raw private key format"); } static void @@ -763,7 +763,7 @@ do_convert_from(struct passwd *pw) do_convert_from_pem(&k, &private); break; default: - fatal("%s: unknown key format %d", __func__, convert_format); + fatal_f("unknown key format %d", convert_format); } if (!private) { @@ -788,8 +788,7 @@ do_convert_from(struct passwd *pw) NULL, 0, NULL, NULL); break; default: - fatal("%s: unsupported key type %s", __func__, - sshkey_type(k)); + fatal_f("unsupported key type %s", sshkey_type(k)); } } @@ -814,7 +813,7 @@ do_print_public(struct passwd *pw) fatal("%s: %s", identity_file, strerror(errno)); prv = load_identity(identity_file, &comment); if ((r = sshkey_write(prv, stdout)) != 0) - error("sshkey_write failed: %s", ssh_err(r)); + fatal_fr(r, "write key"); if (comment != NULL && *comment != '\0') fprintf(stdout, " %s", comment); fprintf(stdout, "\n"); @@ -850,7 +849,7 @@ do_download(struct passwd *pw) ra = sshkey_fingerprint(keys[i], fingerprint_hash, SSH_FP_RANDOMART); if (fp == NULL || ra == NULL) - fatal("%s: sshkey_fingerprint fail", __func__); + fatal_f("sshkey_fingerprint fail"); printf("%u %s %s (PKCS11 key)\n", sshkey_size(keys[i]), fp, sshkey_type(keys[i])); if (log_level_get() >= SYSLOG_LEVEL_VERBOSE) @@ -901,7 +900,7 @@ fingerprint_one_key(const struct sshkey *public, const char *comment) fp = sshkey_fingerprint(public, fptype, rep); ra = sshkey_fingerprint(public, fingerprint_hash, SSH_FP_RANDOMART); if (fp == NULL || ra == NULL) - fatal("%s: sshkey_fingerprint failed", __func__); + fatal_f("sshkey_fingerprint failed"); mprintf("%u %s %s (%s)\n", sshkey_size(public), fp, comment ? comment : "no comment", sshkey_type(public)); if (log_level_get() >= SYSLOG_LEVEL_VERBOSE) @@ -921,12 +920,12 @@ fingerprint_private(const char *path) if (stat(identity_file, &st) == -1) fatal("%s: %s", path, strerror(errno)); if ((r = sshkey_load_public(path, &pubkey, &comment)) != 0) - debug("load public \"%s\": %s", path, ssh_err(r)); + debug_r(r, "load public \"%s\"", path); if (pubkey == NULL || comment == NULL || *comment == '\0') { free(comment); if ((r = sshkey_load_private(path, NULL, &privkey, &comment)) != 0) - debug("load private \"%s\": %s", path, ssh_err(r)); + debug_r(r, "load private \"%s\"", path); } if (pubkey == NULL && privkey == NULL) fatal("%s is not a key file.", path); @@ -1106,18 +1105,17 @@ do_gen_all_hostkeys(struct passwd *pw) bits = 0; type_bits_valid(type, NULL, &bits); if ((r = sshkey_generate(type, bits, &private)) != 0) { - error("sshkey_generate failed: %s", ssh_err(r)); + error_r(r, "sshkey_generate failed"); goto failnext; } if ((r = sshkey_from_private(private, &public)) != 0) - fatal("sshkey_from_private failed: %s", ssh_err(r)); + fatal_fr(r, "sshkey_from_private"); snprintf(comment, sizeof comment, "%s@%s", pw->pw_name, hostname); if ((r = sshkey_save_private(private, prv_tmp, "", comment, private_key_format, openssh_format_cipher, rounds)) != 0) { - error("Saving key \"%s\" failed: %s", - prv_tmp, ssh_err(r)); + error_r(r, "Saving key \"%s\" failed", prv_tmp); goto failnext; } if ((fd = mkstemp(pub_tmp)) == -1) { @@ -1128,8 +1126,8 @@ do_gen_all_hostkeys(struct passwd *pw) (void)fchmod(fd, 0644); (void)close(fd); if ((r = sshkey_save_public(public, pub_tmp, comment)) != 0) { - fatal("Unable to save public key to %s: %s", - identity_file, ssh_err(r)); + error_r(r, "Unable to save public key to %s", + identity_file); goto failnext; } @@ -1263,8 +1261,7 @@ known_hosts_find_delete(struct hostkey_foreach_line *l, void *_ctx) ra = sshkey_fingerprint(l->key, fingerprint_hash, SSH_FP_RANDOMART); if (fp == NULL || ra == NULL) - fatal("%s: sshkey_fingerprint failed", - __func__); + fatal_f("sshkey_fingerprint failed"); mprintf("%s %s %s%s%s\n", ctx->host, sshkey_type(l->key), fp, l->comment[0] ? " " : "", @@ -1345,7 +1342,7 @@ do_known_hosts(struct passwd *pw, const char *name, int find_host, foreach_options)) != 0) { if (inplace) unlink(tmp); - fatal("%s: hostkeys_foreach failed: %s", __func__, ssh_err(r)); + fatal_fr(r, "hostkeys_foreach"); } if (inplace) @@ -1424,7 +1421,7 @@ do_change_passphrase(struct passwd *pw) goto badkey; } else if (r != 0) { badkey: - fatal("Failed to load key %s: %s", identity_file, ssh_err(r)); + fatal_r(r, "Failed to load key %s", identity_file); } if (comment) mprintf("Key has comment '%s'\n", comment); @@ -1456,8 +1453,7 @@ do_change_passphrase(struct passwd *pw) /* Save the file using the new passphrase. */ if ((r = sshkey_save_private(private, identity_file, passphrase1, comment, private_key_format, openssh_format_cipher, rounds)) != 0) { - error("Saving key \"%s\" failed: %s.", - identity_file, ssh_err(r)); + error_r(r, "Saving key \"%s\" failed", identity_file); freezero(passphrase1, strlen(passphrase1)); sshkey_free(private); free(comment); @@ -1485,15 +1481,14 @@ do_print_resource_record(struct passwd *pw, char *fname, char *hname, int r; if (fname == NULL) - fatal("%s: no filename", __func__); + fatal_f("no filename"); if (stat(fname, &st) == -1) { if (errno == ENOENT) return 0; fatal("%s: %s", fname, strerror(errno)); } if ((r = sshkey_load_public(fname, &public, &comment)) != 0) - fatal("Failed to read v2 public key from \"%s\": %s.", - fname, ssh_err(r)); + fatal_r(r, "Failed to read v2 public key from \"%s\"", fname); export_dns_rr(hname, public, stdout, print_generic); sshkey_free(public); free(comment); @@ -1520,8 +1515,7 @@ do_change_comment(struct passwd *pw, const char *identity_comment) &private, &comment)) == 0) passphrase = xstrdup(""); else if (r != SSH_ERR_KEY_WRONG_PASSPHRASE) - fatal("Cannot load private key \"%s\": %s.", - identity_file, ssh_err(r)); + fatal_r(r, "Cannot load private key \"%s\"", identity_file); else { if (identity_passphrase) passphrase = xstrdup(identity_passphrase); @@ -1534,8 +1528,8 @@ do_change_comment(struct passwd *pw, const char *identity_comment) if ((r = sshkey_load_private(identity_file, passphrase, &private, &comment)) != 0) { freezero(passphrase, strlen(passphrase)); - fatal("Cannot load private key \"%s\": %s.", - identity_file, ssh_err(r)); + fatal_r(r, "Cannot load private key \"%s\"", + identity_file); } } @@ -1576,8 +1570,7 @@ do_change_comment(struct passwd *pw, const char *identity_comment) if ((r = sshkey_save_private(private, identity_file, passphrase, new_comment, private_key_format, openssh_format_cipher, rounds)) != 0) { - error("Saving key \"%s\" failed: %s", - identity_file, ssh_err(r)); + error_r(r, "Saving key \"%s\" failed", identity_file); freezero(passphrase, strlen(passphrase)); sshkey_free(private); free(comment); @@ -1585,14 +1578,12 @@ do_change_comment(struct passwd *pw, const char *identity_comment) } freezero(passphrase, strlen(passphrase)); if ((r = sshkey_from_private(private, &public)) != 0) - fatal("sshkey_from_private failed: %s", ssh_err(r)); + fatal_fr(r, "sshkey_from_private"); sshkey_free(private); strlcat(identity_file, ".pub", sizeof(identity_file)); - if ((r = sshkey_save_public(public, identity_file, new_comment)) != 0) { - fatal("Unable to save public key to %s: %s", - identity_file, ssh_err(r)); - } + if ((r = sshkey_save_public(public, identity_file, new_comment)) != 0) + fatal_r(r, "Unable to save public key to %s", identity_file); sshkey_free(public); free(comment); @@ -1644,7 +1635,7 @@ prepare_options_buf(struct sshbuf *c, int which) const struct cert_ext *ext; if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); sshbuf_reset(c); for (i = 0; i < ncert_ext; i++) { ext = &cert_ext[i]; @@ -1653,18 +1644,18 @@ prepare_options_buf(struct sshbuf *c, int which) continue; if (ext->val == NULL) { /* flag option */ - debug3("%s: %s", __func__, ext->key); + debug3_f("%s", ext->key); if ((r = sshbuf_put_cstring(c, ext->key)) != 0 || (r = sshbuf_put_string(c, NULL, 0)) != 0) - fatal("%s: buffer: %s", __func__, ssh_err(r)); + fatal_fr(r, "prepare flag"); } else { /* key/value option */ - debug3("%s: %s=%s", __func__, ext->key, ext->val); + debug3_f("%s=%s", ext->key, ext->val); sshbuf_reset(b); if ((r = sshbuf_put_cstring(c, ext->key)) != 0 || (r = sshbuf_put_cstring(b, ext->val)) != 0 || (r = sshbuf_put_stringb(c, b)) != 0) - fatal("%s: buffer: %s", __func__, ssh_err(r)); + fatal_fr(r, "prepare k/v"); } } sshbuf_free(b); @@ -1704,12 +1695,11 @@ load_pkcs11_key(char *path) int r, i, nkeys; if ((r = sshkey_load_public(path, &public, NULL)) != 0) - fatal("Couldn't load CA public key \"%s\": %s", - path, ssh_err(r)); + fatal_r(r, "Couldn't load CA public key \"%s\"", path); nkeys = pkcs11_add_provider(pkcs11provider, identity_passphrase, &keys, NULL); - debug3("%s: %d keys", __func__, nkeys); + debug3_f("%d keys", nkeys); if (nkeys <= 0) fatal("cannot read public key from pkcs11"); for (i = 0; i < nkeys; i++) { @@ -1769,13 +1759,11 @@ do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent, * agent. */ if ((r = sshkey_load_public(tmp, &ca, NULL)) != 0) - fatal("Cannot load CA public key %s: %s", - tmp, ssh_err(r)); + fatal_r(r, "Cannot load CA public key %s", tmp); if ((r = ssh_get_authentication_socket(&agent_fd)) != 0) - fatal("Cannot use public key for CA signature: %s", - ssh_err(r)); + fatal_r(r, "Cannot use public key for CA signature"); if ((r = ssh_fetch_identitylist(agent_fd, &agent_ids)) != 0) - fatal("Retrieve agent key list: %s", ssh_err(r)); + fatal_r(r, "Retrieve agent key list"); found = 0; for (j = 0; j < agent_ids->nkeys; j++) { if (sshkey_equal(ca, agent_ids->keys[j])) { @@ -1794,7 +1782,7 @@ do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent, (ca->sk_flags & SSH_SK_USER_VERIFICATION_REQD)) { if ((pin = read_passphrase("Enter PIN for CA key: ", RP_ALLOW_STDIN)) == NULL) - fatal("%s: couldn't read PIN", __func__); + fatal_f("couldn't read PIN"); } } free(tmp); @@ -1829,16 +1817,14 @@ do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent, tmp = tilde_expand_filename(argv[i], pw->pw_uid); if ((r = sshkey_load_public(tmp, &public, &comment)) != 0) - fatal("%s: unable to open \"%s\": %s", - __func__, tmp, ssh_err(r)); + fatal_r(r, "load pubkey \"%s\"", tmp); if (sshkey_is_cert(public)) - fatal("%s: key \"%s\" type %s cannot be certified", - __func__, tmp, sshkey_type(public)); + fatal_f("key \"%s\" type %s cannot be certified", + tmp, sshkey_type(public)); /* Prepare certificate to sign */ if ((r = sshkey_to_certified(public)) != 0) - fatal("Could not upgrade key %s to certificate: %s", - tmp, ssh_err(r)); + fatal_r(r, "Could not upgrade key %s to certificate", tmp); public->cert->type = cert_key_type; public->cert->serial = (u_int64_t)cert_serial; public->cert->key_id = xstrdup(cert_key_id); @@ -1851,14 +1837,13 @@ do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent, OPTIONS_EXTENSIONS); if ((r = sshkey_from_private(ca, &public->cert->signature_key)) != 0) - fatal("sshkey_from_private (ca key): %s", ssh_err(r)); + fatal_r(r, "sshkey_from_private (ca key)"); if (agent_fd != -1 && (ca->flags & SSHKEY_FLAG_EXT) != 0) { if ((r = sshkey_certify_custom(public, ca, key_type_name, sk_provider, NULL, agent_signer, &agent_fd)) != 0) - fatal("Couldn't certify key %s via agent: %s", - tmp, ssh_err(r)); + fatal_r(r, "Couldn't certify %s via agent", tmp); } else { if (sshkey_is_sk(ca) && (ca->sk_flags & SSH_SK_USER_PRESENCE_REQD)) { @@ -1870,8 +1855,7 @@ do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent, sk_provider, pin); notify_complete(notifier); if (r != 0) - fatal("Couldn't certify key %s: %s", - tmp, ssh_err(r)); + fatal_r(r, "Couldn't certify key %s", tmp); } if ((cp = strrchr(tmp, '.')) != NULL && strcmp(cp, ".pub") == 0) @@ -1880,8 +1864,8 @@ do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent, free(tmp); if ((r = sshkey_save_public(public, out, comment)) != 0) { - fatal("Unable to save public key to %s: %s", - identity_file, ssh_err(r)); + fatal_r(r, "Unable to save public key to %s", + identity_file); } if (!quiet) { @@ -2041,13 +2025,13 @@ show_options(struct sshbuf *optbuf, int in_critical) int r; if ((options = sshbuf_fromb(optbuf)) == NULL) - fatal("%s: sshbuf_fromb failed", __func__); + fatal_f("sshbuf_fromb failed"); while (sshbuf_len(options) != 0) { sshbuf_free(option); option = NULL; if ((r = sshbuf_get_cstring(options, &name, NULL)) != 0 || (r = sshbuf_froms(options, &option)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse option"); printf(" %s", name); if (!in_critical && (strcmp(name, "permit-X11-forwarding") == 0 || @@ -2061,8 +2045,7 @@ show_options(struct sshbuf *optbuf, int in_critical) (strcmp(name, "force-command") == 0 || strcmp(name, "source-address") == 0)) { if ((r = sshbuf_get_cstring(option, &arg, NULL)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse critical"); printf(" %s\n", arg); free(arg); } else if (sshbuf_len(option) > 0) { @@ -2091,7 +2074,7 @@ print_cert(struct sshkey *key) ca_fp = sshkey_fingerprint(key->cert->signature_key, fingerprint_hash, SSH_FP_DEFAULT); if (key_fp == NULL || ca_fp == NULL) - fatal("%s: sshkey_fingerprint fail", __func__); + fatal_f("sshkey_fingerprint fail"); sshkey_format_cert_validity(key->cert, valid, sizeof(valid)); printf(" Type: %s %s certificate\n", sshkey_ssh_name(key), @@ -2164,8 +2147,7 @@ do_show_cert(struct passwd *pw) if ((key = sshkey_new(KEY_UNSPEC)) == NULL) fatal("sshkey_new"); if ((r = sshkey_read(key, &cp)) != 0) { - error("%s:%lu: invalid key: %s", path, - lnum, ssh_err(r)); + error_r(r, "%s:%lu: invalid key", path, lnum); continue; } if (!sshkey_is_cert(key)) { @@ -2192,11 +2174,11 @@ load_krl(const char *path, struct ssh_krl **krlp) int r; if ((r = sshbuf_load_file(path, &krlbuf)) != 0) - fatal("Unable to load KRL: %s", ssh_err(r)); + fatal_r(r, "Unable to load KRL %s", path); /* XXX check sigs */ if ((r = ssh_krl_from_blob(krlbuf, krlp, NULL, 0)) != 0 || *krlp == NULL) - fatal("Invalid KRL file: %s", ssh_err(r)); + fatal_r(r, "Invalid KRL file %s", path); sshbuf_free(krlbuf); } @@ -2225,9 +2207,9 @@ hash_to_blob(const char *cp, u_char **blobp, size_t *lenp, tmp[tlen] = '\0'; } if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_b64tod(b, tmp)) != 0) - fatal("%s:%lu: decode hash failed: %s", file, lnum, ssh_err(r)); + fatal_r(r, "%s:%lu: decode hash failed", file, lnum); free(tmp); *lenp = sshbuf_len(b); *blobp = xmalloc(*lenp); @@ -2313,8 +2295,7 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca, } if (ssh_krl_revoke_cert_by_serial_range(krl, ca, serial, serial2) != 0) { - fatal("%s: revoke serial failed", - __func__); + fatal_f("revoke serial failed"); } } else if (strncasecmp(cp, "id:", 3) == 0) { if (ca == NULL && !wild_ca) { @@ -2324,15 +2305,14 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca, cp += 3; cp = cp + strspn(cp, " \t"); if (ssh_krl_revoke_cert_by_key_id(krl, ca, cp) != 0) - fatal("%s: revoke key ID failed", __func__); + fatal_f("revoke key ID failed"); } else if (strncasecmp(cp, "hash:", 5) == 0) { cp += 5; cp = cp + strspn(cp, " \t"); hash_to_blob(cp, &blob, &blen, file, lnum); r = ssh_krl_revoke_key_sha256(krl, blob, blen); if (r != 0) - fatal("%s: revoke key failed: %s", - __func__, ssh_err(r)); + fatal_fr(r, "revoke key failed"); } else { if (strncasecmp(cp, "key:", 4) == 0) { cp += 4; @@ -2354,8 +2334,7 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca, if ((key = sshkey_new(KEY_UNSPEC)) == NULL) fatal("sshkey_new"); if ((r = sshkey_read(key, &cp)) != 0) - fatal("%s:%lu: invalid key: %s", - path, lnum, ssh_err(r)); + fatal_r(r, "%s:%lu: invalid key", path, lnum); if (was_explicit_key) r = ssh_krl_revoke_key_explicit(krl, key); else if (was_sha1) { @@ -2375,8 +2354,7 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca, } else r = ssh_krl_revoke_key(krl, key); if (r != 0) - fatal("%s: revoke key failed: %s", - __func__, ssh_err(r)); + fatal_fr(r, "revoke key failed"); freezero(blob, blen); blob = NULL; blen = 0; @@ -2416,8 +2394,7 @@ do_gen_krl(struct passwd *pw, int updating, const char *ca_key_path, else { tmp = tilde_expand_filename(ca_key_path, pw->pw_uid); if ((r = sshkey_load_public(tmp, &ca, NULL)) != 0) - fatal("Cannot load CA public key %s: %s", - tmp, ssh_err(r)); + fatal_r(r, "Cannot load CA public key %s", tmp); free(tmp); } } @@ -2461,8 +2438,7 @@ do_check_krl(struct passwd *pw, int print_krl, int argc, char **argv) krl_dump(krl, stdout); for (i = 0; i < argc; i++) { if ((r = sshkey_load_public(argv[i], &k, &comment)) != 0) - fatal("Cannot load public key %s: %s", - argv[i], ssh_err(r)); + fatal_r(r, "Cannot load public key %s", argv[i]); r = ssh_krl_check_key(krl, k); printf("%s%s%s%s: %s\n", argv[i], *comment ? " (" : "", comment, *comment ? ")" : "", @@ -2496,8 +2472,8 @@ load_sign_key(const char *keypath, const struct sshkey *pubkey) strcmp(privpath + plen - slen, suffixes[i]) != 0) continue; privpath[plen - slen] = '\0'; - debug("%s: %s looks like a public key, using private key " - "path %s instead", __func__, keypath, privpath); + debug_f("%s looks like a public key, using private key " + "path %s instead", keypath, privpath); } if ((privkey = load_identity(privpath, NULL)) == NULL) { error("Couldn't load identity %s", keypath); @@ -2514,12 +2490,11 @@ load_sign_key(const char *keypath, const struct sshkey *pubkey) * it capable of signing. */ if ((r = sshkey_to_certified(privkey)) != 0) { - error("%s: sshkey_to_certified: %s", __func__, - ssh_err(r)); + error_fr(r, "sshkey_to_certified"); goto done; } if ((r = sshkey_cert_copy(pubkey, privkey)) != 0) { - error("%s: sshkey_cert_copy: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_cert_copy"); goto done; } } @@ -2553,12 +2528,12 @@ sign_one(struct sshkey *signkey, const char *filename, int fd, sshkey_type(signkey)); if ((pin = read_passphrase(prompt, RP_ALLOW_STDIN)) == NULL) - fatal("%s: couldn't read PIN", __func__); + fatal_f("couldn't read PIN"); } if ((signkey->sk_flags & SSH_SK_USER_PRESENCE_REQD)) { if ((fp = sshkey_fingerprint(signkey, fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: fingerprint failed", __func__); + fatal_f("fingerprint failed"); fprintf(stderr, "Confirm user presence for key %s %s\n", sshkey_type(signkey), fp); free(fp); @@ -2566,15 +2541,15 @@ sign_one(struct sshkey *signkey, const char *filename, int fd, } if ((r = sshsig_sign_fd(signkey, NULL, sk_provider, pin, fd, sig_namespace, &sigbuf, signer, signer_ctx)) != 0) { - error("Signing %s failed: %s", filename, ssh_err(r)); + error_r(r, "Signing %s failed", filename); goto out; } if ((r = sshsig_armor(sigbuf, &abuf)) != 0) { - error("%s: sshsig_armor: %s", __func__, ssh_err(r)); + error_fr(r, "sshsig_armor"); goto out; } if ((asig = sshbuf_dup_string(abuf)) == NULL) { - error("%s: buffer error", __func__); + error_f("buffer error"); r = SSH_ERR_ALLOC_FAIL; goto out; } @@ -2641,17 +2616,17 @@ sig_sign(const char *keypath, const char *sig_namespace, int argc, char **argv) } if ((r = sshkey_load_public(keypath, &pubkey, NULL)) != 0) { - error("Couldn't load public key %s: %s", keypath, ssh_err(r)); + error_r(r, "Couldn't load public key %s", keypath); goto done; } if ((r = ssh_get_authentication_socket(&agent_fd)) != 0) - debug("Couldn't get agent socket: %s", ssh_err(r)); + debug_r(r, "Couldn't get agent socket"); else { if ((r = ssh_agent_has_key(agent_fd, pubkey)) == 0) signer = agent_signer; else - debug("Couldn't find key in agent: %s", ssh_err(r)); + debug_r(r, "Couldn't find key in agent"); } if (signer == NULL) { @@ -2707,12 +2682,12 @@ sig_verify(const char *signature, const char *sig_namespace, memset(&sig_details, 0, sizeof(sig_details)); if ((r = sshbuf_load_file(signature, &abuf)) != 0) { - error("Couldn't read signature file: %s", ssh_err(r)); + error_r(r, "Couldn't read signature file"); goto done; } if ((r = sshsig_dearmor(abuf, &sigbuf)) != 0) { - error("%s: sshsig_armor: %s", __func__, ssh_err(r)); + error_fr(r, "sshsig_armor"); goto done; } if ((r = sshsig_verify_fd(sigbuf, STDIN_FILENO, sig_namespace, @@ -2721,26 +2696,25 @@ sig_verify(const char *signature, const char *sig_namespace, if ((fp = sshkey_fingerprint(sign_key, fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint failed", __func__); + fatal_f("sshkey_fingerprint failed"); debug("Valid (unverified) signature from key %s", fp); if (sig_details != NULL) { - debug2("%s: signature details: counter = %u, flags = 0x%02x", - __func__, sig_details->sk_counter, sig_details->sk_flags); + debug2_f("signature details: counter = %u, flags = 0x%02x", + sig_details->sk_counter, sig_details->sk_flags); } free(fp); fp = NULL; if (revoked_keys != NULL) { if ((r = sshkey_check_revoked(sign_key, revoked_keys)) != 0) { - debug3("sshkey_check_revoked failed: %s", ssh_err(r)); + debug3_fr(r, "sshkey_check_revoked"); goto done; } } - if (allowed_keys != NULL && - (r = sshsig_check_allowed_keys(allowed_keys, sign_key, - principal, sig_namespace)) != 0) { - debug3("sshsig_check_allowed_keys failed: %s", ssh_err(r)); + if (allowed_keys != NULL && (r = sshsig_check_allowed_keys(allowed_keys, + sign_key, principal, sig_namespace)) != 0) { + debug3_fr(r, "sshsig_check_allowed_keys"); goto done; } /* success */ @@ -2749,10 +2723,8 @@ sig_verify(const char *signature, const char *sig_namespace, if (!quiet) { if (ret == 0) { if ((fp = sshkey_fingerprint(sign_key, fingerprint_hash, - SSH_FP_DEFAULT)) == NULL) { - fatal("%s: sshkey_fingerprint failed", - __func__); - } + SSH_FP_DEFAULT)) == NULL) + fatal_f("sshkey_fingerprint failed"); if (principal == NULL) { printf("Good \"%s\" signature with %s key %s\n", sig_namespace, sshkey_type(sign_key), fp); @@ -2782,22 +2754,20 @@ sig_find_principals(const char *signature, const char *allowed_keys) { char *principals = NULL, *cp, *tmp; if ((r = sshbuf_load_file(signature, &abuf)) != 0) { - error("Couldn't read signature file: %s", ssh_err(r)); + error_r(r, "Couldn't read signature file"); goto done; } if ((r = sshsig_dearmor(abuf, &sigbuf)) != 0) { - error("%s: sshsig_armor: %s", __func__, ssh_err(r)); + error_fr(r, "sshsig_armor"); goto done; } if ((r = sshsig_get_pubkey(sigbuf, &sign_key)) != 0) { - error("%s: sshsig_get_pubkey: %s", - __func__, ssh_err(r)); + error_fr(r, "sshsig_get_pubkey"); goto done; } if ((r = sshsig_find_principals(allowed_keys, sign_key, &principals)) != 0) { - error("%s: sshsig_get_principal: %s", - __func__, ssh_err(r)); + error_fr(r, "sshsig_get_principal"); goto done; } ret = 0; @@ -2997,7 +2967,7 @@ do_download_sk(const char *skprovider, const char *device) &keys, &nkeys)) != 0) { if (pin != NULL) freezero(pin, strlen(pin)); - error("Unable to load resident keys: %s", ssh_err(r)); + error_r(r, "Unable to load resident keys"); return -1; } if (nkeys == 0) @@ -3014,8 +2984,8 @@ do_download_sk(const char *skprovider, const char *device) } if ((fp = sshkey_fingerprint(keys[i], fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: sshkey_fingerprint failed", __func__); - debug("%s: key %zu: %s %s %s (flags 0x%02x)", __func__, i, + fatal_f("sshkey_fingerprint failed"); + debug_f("key %zu: %s %s %s (flags 0x%02x)", i, sshkey_type(keys[i]), fp, keys[i]->sk_application, keys[i]->sk_flags); ext = skip_ssh_url_preamble(keys[i]->sk_application); @@ -3035,8 +3005,7 @@ do_download_sk(const char *skprovider, const char *device) if ((r = sshkey_save_private(keys[i], path, pass, keys[i]->sk_application, private_key_format, openssh_format_cipher, rounds)) != 0) { - error("Saving key \"%s\" failed: %s", - path, ssh_err(r)); + error_r(r, "Saving key \"%s\" failed", path); free(path); break; } @@ -3053,8 +3022,7 @@ do_download_sk(const char *skprovider, const char *device) free(path); if ((r = sshkey_save_public(keys[i], pubpath, keys[i]->sk_application)) != 0) { - error("Saving public key \"%s\" failed: %s", - pubpath, ssh_err(r)); + error_r(r, "Saving public key \"%s\" failed", pubpath); free(pubpath); break; } @@ -3085,8 +3053,7 @@ save_attestation(struct sshbuf *attest, const char *path) r = sshbuf_write_file(path, attest); umask(omask); if (r != 0) - fatal("Unable to write attestation data \"%s\": %s", path, - ssh_err(r)); + fatal_r(r, "Unable to write attestation data \"%s\"", path); if (!quiet) printf("Your FIDO attestation certificate has been saved in " "%s\n", path); @@ -3608,9 +3575,9 @@ main(int argc, char **argv) } else if (strncasecmp(opts[i], "challenge=", 10) == 0) { if ((r = sshbuf_load_file(opts[i] + 10, &challenge)) != 0) { - fatal("Unable to load FIDO enrollment " - "challenge \"%s\": %s", - opts[i] + 10, ssh_err(r)); + fatal_r(r, "Unable to load FIDO " + "enrollment challenge \"%s\"", + opts[i] + 10); } } else if (strncasecmp(opts[i], "write-attestation=", 18) == 0) { @@ -3649,7 +3616,7 @@ main(int argc, char **argv) if (r == 0) break; if (r != SSH_ERR_KEY_WRONG_PASSPHRASE) - fatal("Key enrollment failed: %s", ssh_err(r)); + fatal_r(r, "Key enrollment failed"); else if (passphrase != NULL) { error("PIN incorrect"); freezero(passphrase, strlen(passphrase)); @@ -3676,7 +3643,7 @@ main(int argc, char **argv) break; } if ((r = sshkey_from_private(private, &public)) != 0) - fatal("sshkey_from_private failed: %s\n", ssh_err(r)); + fatal_r(r, "sshkey_from_private"); if (!have_identity) ask_filename(pw, "Enter file in which to save the key"); @@ -3700,8 +3667,7 @@ main(int argc, char **argv) /* Save the key with the given passphrase and comment. */ if ((r = sshkey_save_private(private, identity_file, passphrase, comment, private_key_format, openssh_format_cipher, rounds)) != 0) { - error("Saving key \"%s\" failed: %s", - identity_file, ssh_err(r)); + error_r(r, "Saving key \"%s\" failed", identity_file); freezero(passphrase, strlen(passphrase)); exit(1); } @@ -3714,10 +3680,8 @@ main(int argc, char **argv) } strlcat(identity_file, ".pub", sizeof(identity_file)); - if ((r = sshkey_save_public(public, identity_file, comment)) != 0) { - fatal("Unable to save public key to %s: %s", - identity_file, ssh_err(r)); - } + if ((r = sshkey_save_public(public, identity_file, comment)) != 0) + fatal_r(r, "Unable to save public key to %s", identity_file); if (!quiet) { fp = sshkey_fingerprint(public, fingerprint_hash, diff --git a/ssh-keyscan.c b/ssh-keyscan.c index 034ed48c778f..3f6bedda8b60 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.135 2020/10/18 11:21:59 djm Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.136 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright 1995, 1996 by David Mazieres . * @@ -367,7 +367,7 @@ tcpconnect(char *host) continue; } if (set_nonblock(s) == -1) - fatal("%s: set_nonblock(%d)", __func__, s); + fatal_f("set_nonblock(%d)", s); if (connect(s, ai->ai_addr, ai->ai_addrlen) == -1 && errno != EINPROGRESS) error("connect (`%s'): %s", host, strerror(errno)); @@ -401,7 +401,7 @@ conalloc(char *iname, char *oname, int keytype) if (fdcon[s].c_status) fatal("conalloc: attempt to reuse fdno %d", s); - debug3("%s: oname %s kt %d", __func__, oname, keytype); + debug3_f("oname %s kt %d", oname, keytype); fdcon[s].c_fd = s; fdcon[s].c_status = CS_CON; fdcon[s].c_namebase = namebase; @@ -787,8 +787,7 @@ main(int argc, char **argv) if (argv[j] == NULL) fp = stdin; else if ((fp = fopen(argv[j], "r")) == NULL) - fatal("%s: %s: %s", __progname, argv[j], - strerror(errno)); + fatal("%s: %s: %s", __progname, argv[j], strerror(errno)); while (getline(&line, &linesize, fp) != -1) { /* Chomp off trailing whitespace and comments */ @@ -810,8 +809,7 @@ main(int argc, char **argv) } if (ferror(fp)) - fatal("%s: %s: %s", __progname, argv[j], - strerror(errno)); + fatal("%s: %s: %s", __progname, argv[j], strerror(errno)); fclose(fp); } diff --git a/ssh-keysign.c b/ssh-keysign.c index 7991e0f01694..0582490419c7 100644 --- a/ssh-keysign.c +++ b/ssh-keysign.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keysign.c,v 1.64 2020/08/27 01:06:18 djm Exp $ */ +/* $OpenBSD: ssh-keysign.c,v 1.65 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2002 Markus Friedl. All rights reserved. * @@ -78,33 +78,33 @@ valid_request(struct passwd *pw, char *host, struct sshkey **ret, fail = 0; if ((b = sshbuf_from(data, datalen)) == NULL) - fatal("%s: sshbuf_from failed", __func__); + fatal_f("sshbuf_from failed"); /* session id, currently limited to SHA1 (20 bytes) or SHA256 (32) */ if ((r = sshbuf_get_string(b, NULL, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse session ID"); if (len != 20 && len != 32) fail++; if ((r = sshbuf_get_u8(b, &type)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); if (type != SSH2_MSG_USERAUTH_REQUEST) fail++; /* server user */ if ((r = sshbuf_skip_string(b)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse user"); /* service */ if ((r = sshbuf_get_cstring(b, &p, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse service"); if (strcmp("ssh-connection", p) != 0) fail++; free(p); /* method */ if ((r = sshbuf_get_cstring(b, &p, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse method"); if (strcmp("hostbased", p) != 0) fail++; free(p); @@ -112,13 +112,13 @@ valid_request(struct passwd *pw, char *host, struct sshkey **ret, /* pubkey */ if ((r = sshbuf_get_cstring(b, &pkalg, NULL)) != 0 || (r = sshbuf_get_string(b, &pkblob, &blen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse pk"); pktype = sshkey_type_from_name(pkalg); if (pktype == KEY_UNSPEC) fail++; else if ((r = sshkey_from_blob(pkblob, blen, &key)) != 0) { - error("%s: bad key blob: %s", __func__, ssh_err(r)); + error_fr(r, "decode key"); fail++; } else if (key->type != pktype) fail++; @@ -127,8 +127,8 @@ valid_request(struct passwd *pw, char *host, struct sshkey **ret, /* client host name, handle trailing dot */ if ((r = sshbuf_get_cstring(b, &p, &len)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); - debug2("%s: check expect chost %s got %s", __func__, host, p); + fatal_fr(r, "parse hostname"); + debug2_f("check expect chost %s got %s", host, p); if (strlen(host) != len - 1) fail++; else if (p[len - 1] != '.') @@ -139,7 +139,7 @@ valid_request(struct passwd *pw, char *host, struct sshkey **ret, /* local user */ if ((r = sshbuf_get_cstring(b, &luser, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse luser"); if (strcmp(pw->pw_name, luser) != 0) fail++; @@ -150,7 +150,7 @@ valid_request(struct passwd *pw, char *host, struct sshkey **ret, fail++; sshbuf_free(b); - debug3("%s: fail %d", __func__, fail); + debug3_f("fail %d", fail); if (fail) sshkey_free(key); @@ -228,7 +228,7 @@ main(int argc, char **argv) NULL, &key, NULL); close(key_fd[i]); if (r != 0) - debug("parse key %d: %s", i, ssh_err(r)); + debug_r(r, "parse key %d", i); else if (key != NULL) { keys[i] = key; found = 1; @@ -243,22 +243,23 @@ main(int argc, char **argv) if ((b = sshbuf_new()) == NULL) fatal("%s: sshbuf_new failed", __progname); if (ssh_msg_recv(STDIN_FILENO, b) < 0) - fatal("ssh_msg_recv failed"); + fatal("%s: ssh_msg_recv failed", __progname); if ((r = sshbuf_get_u8(b, &rver)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: buffer error", __progname); if (rver != version) - fatal("bad version: received %d, expected %d", rver, version); + fatal("%s: bad version: received %d, expected %d", + __progname, rver, version); if ((r = sshbuf_get_u32(b, (u_int *)&fd)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: buffer error", __progname); if (fd < 0 || fd == STDIN_FILENO || fd == STDOUT_FILENO) - fatal("bad fd = %d", fd); + fatal("%s: bad fd = %d", __progname, fd); if ((host = get_local_name(fd)) == NULL) - fatal("cannot get local name for fd"); + fatal("%s: cannot get local name for fd", __progname); if ((r = sshbuf_get_string(b, &data, &dlen)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: buffer error", __progname); if (valid_request(pw, host, &key, data, dlen) < 0) - fatal("not a valid request"); + fatal("%s: not a valid request", __progname); free(host); found = 0; @@ -273,21 +274,21 @@ main(int argc, char **argv) if ((fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) fatal("%s: sshkey_fingerprint failed", __progname); - fatal("no matching hostkey found for key %s %s", + fatal("%s: no matching hostkey found for key %s %s", __progname, sshkey_type(key), fp ? fp : ""); } if ((r = sshkey_sign(keys[i], &signature, &slen, data, dlen, NULL, NULL, NULL, 0)) != 0) - fatal("sshkey_sign failed: %s", ssh_err(r)); + fatal_r(r, "%s: sshkey_sign failed", __progname); free(data); /* send reply */ sshbuf_reset(b); if ((r = sshbuf_put_string(b, signature, slen)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: buffer error", __progname); if (ssh_msg_send(STDOUT_FILENO, version, b) == -1) - fatal("ssh_msg_send failed"); + fatal("%s: ssh_msg_send failed", __progname); return (0); } diff --git a/ssh-pkcs11-client.c b/ssh-pkcs11-client.c index 8a0ffef5dfb8..e724736944f4 100644 --- a/ssh-pkcs11-client.c +++ b/ssh-pkcs11-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-pkcs11-client.c,v 1.16 2020/01/25 00:03:36 djm Exp $ */ +/* $OpenBSD: ssh-pkcs11-client.c,v 1.17 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2010 Markus Friedl. All rights reserved. * Copyright (c) 2014 Pedro Martelletto. All rights reserved. @@ -65,7 +65,7 @@ send_msg(struct sshbuf *m) sshbuf_len(m)) != sshbuf_len(m)) error("write to helper failed"); if ((r = sshbuf_consume(m, mlen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "consume"); } static int @@ -93,11 +93,11 @@ recv_msg(struct sshbuf *m) return (0); /* XXX */ } if ((r = sshbuf_put(m, buf, l)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put"); len -= l; } if ((r = sshbuf_get_u8(m, &c)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type"); return c; } @@ -127,29 +127,29 @@ rsa_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa, int padding) goto fail; key = sshkey_new(KEY_UNSPEC); if (key == NULL) { - error("%s: sshkey_new failed", __func__); + error_f("sshkey_new failed"); goto fail; } key->type = KEY_RSA; RSA_up_ref(rsa); key->rsa = rsa; if ((r = sshkey_to_blob(key, &blob, &blen)) != 0) { - error("%s: sshkey_to_blob: %s", __func__, ssh_err(r)); + error_fr(r, "encode key"); goto fail; } if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_AGENTC_SIGN_REQUEST)) != 0 || (r = sshbuf_put_string(msg, blob, blen)) != 0 || (r = sshbuf_put_string(msg, from, flen)) != 0 || (r = sshbuf_put_u32(msg, 0)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(msg); sshbuf_reset(msg); if (recv_msg(msg) == SSH2_AGENT_SIGN_RESPONSE) { if ((r = sshbuf_get_string(msg, &signature, &slen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (slen <= (size_t)RSA_size(rsa)) { memcpy(to, signature, slen); ret = slen; @@ -178,13 +178,13 @@ ecdsa_do_sign(const unsigned char *dgst, int dgst_len, const BIGNUM *inv, nid = sshkey_ecdsa_key_to_nid(ec); if (nid < 0) { - error("%s: couldn't get curve nid", __func__); + error_f("couldn't get curve nid"); goto fail; } key = sshkey_new(KEY_UNSPEC); if (key == NULL) { - error("%s: sshkey_new failed", __func__); + error_f("sshkey_new failed"); goto fail; } key->ecdsa = ec; @@ -193,22 +193,22 @@ ecdsa_do_sign(const unsigned char *dgst, int dgst_len, const BIGNUM *inv, EC_KEY_up_ref(ec); if ((r = sshkey_to_blob(key, &blob, &blen)) != 0) { - error("%s: sshkey_to_blob: %s", __func__, ssh_err(r)); + error_fr(r, "encode key"); goto fail; } if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_AGENTC_SIGN_REQUEST)) != 0 || (r = sshbuf_put_string(msg, blob, blen)) != 0 || (r = sshbuf_put_string(msg, dgst, dgst_len)) != 0 || (r = sshbuf_put_u32(msg, 0)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(msg); sshbuf_reset(msg); if (recv_msg(msg) == SSH2_AGENT_SIGN_RESPONSE) { if ((r = sshbuf_get_string(msg, &signature, &slen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); cp = signature; ret = d2i_ECDSA_SIG(NULL, &cp, slen); free(signature); @@ -238,7 +238,7 @@ wrap_key(struct sshkey *k) EC_KEY_set_method(k->ecdsa, helper_ecdsa); #endif /* HAVE_EC_KEY_METHOD_NEW */ else - fatal("%s: unknown key type", __func__); + fatal_f("unknown key type"); } static int @@ -260,10 +260,10 @@ pkcs11_start_helper_methods(void) #endif /* HAVE_EC_KEY_METHOD_NEW */ if ((helper_rsa = RSA_meth_dup(RSA_get_default_method())) == NULL) - fatal("%s: RSA_meth_dup failed", __func__); + fatal_f("RSA_meth_dup failed"); if (!RSA_meth_set1_name(helper_rsa, "ssh-pkcs11-helper") || !RSA_meth_set_priv_enc(helper_rsa, rsa_encrypt)) - fatal("%s: failed to prepare method", __func__); + fatal_f("failed to prepare method"); return (0); } @@ -300,7 +300,7 @@ pkcs11_start_helper(void) helper = getenv("SSH_PKCS11_HELPER"); if (helper == NULL || strlen(helper) == 0) helper = _PATH_SSH_PKCS11_HELPER; - debug("%s: starting %s %s", __func__, helper, + debug_f("starting %s %s", helper, verbosity == NULL ? "" : verbosity); execlp(helper, helper, verbosity, (char *)NULL); fprintf(stderr, "exec: %s: %s\n", helper, strerror(errno)); @@ -327,18 +327,18 @@ pkcs11_add_provider(char *name, char *pin, struct sshkey ***keysp, return (-1); if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH_AGENTC_ADD_SMARTCARD_KEY)) != 0 || (r = sshbuf_put_cstring(msg, name)) != 0 || (r = sshbuf_put_cstring(msg, pin)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(msg); sshbuf_reset(msg); type = recv_msg(msg); if (type == SSH2_AGENT_IDENTITIES_ANSWER) { if ((r = sshbuf_get_u32(msg, &nkeys)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse nkeys"); *keysp = xcalloc(nkeys, sizeof(struct sshkey *)); if (labelsp) *labelsp = xcalloc(nkeys, sizeof(char *)); @@ -346,10 +346,9 @@ pkcs11_add_provider(char *name, char *pin, struct sshkey ***keysp, /* XXX clean up properly instead of fatal() */ if ((r = sshbuf_get_string(msg, &blob, &blen)) != 0 || (r = sshbuf_get_cstring(msg, &label, NULL)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse key"); if ((r = sshkey_from_blob(blob, blen, &k)) != 0) - fatal("%s: bad key: %s", __func__, ssh_err(r)); + fatal_fr(r, "decode key"); wrap_key(k); (*keysp)[i] = k; if (labelsp) @@ -375,11 +374,11 @@ pkcs11_del_provider(char *name) struct sshbuf *msg; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH_AGENTC_REMOVE_SMARTCARD_KEY)) != 0 || (r = sshbuf_put_cstring(msg, name)) != 0 || (r = sshbuf_put_cstring(msg, "")) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); send_msg(msg); sshbuf_reset(msg); diff --git a/ssh-pkcs11-helper.c b/ssh-pkcs11-helper.c index d73e835762d1..a9a6fe3815d5 100644 --- a/ssh-pkcs11-helper.c +++ b/ssh-pkcs11-helper.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-pkcs11-helper.c,v 1.23 2020/03/06 18:26:21 markus Exp $ */ +/* $OpenBSD: ssh-pkcs11-helper.c,v 1.24 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2010 Markus Friedl. All rights reserved. * @@ -111,7 +111,7 @@ send_msg(struct sshbuf *m) int r; if ((r = sshbuf_put_stringb(oqueue, m)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue"); } static void @@ -126,35 +126,30 @@ process_add(void) char **labels = NULL; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 || (r = sshbuf_get_cstring(iqueue, &pin, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if ((nkeys = pkcs11_add_provider(name, pin, &keys, &labels)) > 0) { if ((r = sshbuf_put_u8(msg, SSH2_AGENT_IDENTITIES_ANSWER)) != 0 || (r = sshbuf_put_u32(msg, nkeys)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); for (i = 0; i < nkeys; i++) { if ((r = sshkey_to_blob(keys[i], &blob, &blen)) != 0) { - debug("%s: sshkey_to_blob: %s", - __func__, ssh_err(r)); + debug_fr(r, "encode key"); continue; } if ((r = sshbuf_put_string(msg, blob, blen)) != 0 || (r = sshbuf_put_cstring(msg, labels[i])) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "compose key"); free(blob); add_key(keys[i], name, labels[i]); free(labels[i]); } - } else { - if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); - if ((r = sshbuf_put_u32(msg, -nkeys)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); - } + } else if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0 || + (r = sshbuf_put_u32(msg, -nkeys)) != 0) + fatal_fr(r, "compose"); free(labels); free(keys); /* keys themselves are transferred to pkcs11_keylist */ free(pin); @@ -171,14 +166,14 @@ process_del(void) int r; if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 || (r = sshbuf_get_cstring(iqueue, &pin, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); del_keys_by_name(name); if ((r = sshbuf_put_u8(msg, pkcs11_del_provider(name) == 0 ? SSH_AGENT_SUCCESS : SSH_AGENT_FAILURE)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); free(pin); free(name); send_msg(msg); @@ -198,10 +193,10 @@ process_sign(void) if ((r = sshbuf_get_string(iqueue, &blob, &blen)) != 0 || (r = sshbuf_get_string(iqueue, &data, &dlen)) != 0 || (r = sshbuf_get_u32(iqueue, NULL)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if ((r = sshkey_from_blob(blob, blen, &key)) != 0) - error("%s: sshkey_from_blob: %s", __func__, ssh_err(r)); + fatal_fr(r, "decode key"); else { if ((found = lookup_key(key)) != NULL) { #ifdef WITH_OPENSSL @@ -227,26 +222,25 @@ process_sign(void) if (ret != 0) ok = 0; else - error("%s: ECDSA_sign" - " returns %d", __func__, ret); + error_f("ECDSA_sign returned %d", ret); slen = xslen; #endif /* OPENSSL_HAS_ECC */ } else - error("%s: don't know how to sign with key " - "type %d", __func__, (int)key->type); + error_f("don't know how to sign with key " + "type %d", (int)key->type); #endif /* WITH_OPENSSL */ } sshkey_free(key); } if ((msg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if (ok == 0) { if ((r = sshbuf_put_u8(msg, SSH2_AGENT_SIGN_RESPONSE)) != 0 || (r = sshbuf_put_string(msg, signature, slen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose response"); } else { if ((r = sshbuf_put_u8(msg, SSH2_AGENT_FAILURE)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose failure response"); } free(data); free(blob); @@ -278,7 +272,7 @@ process(void) return; if ((r = sshbuf_consume(iqueue, 4)) != 0 || (r = sshbuf_get_u8(iqueue, &type)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse type/len"); buf_len -= 4; switch (type) { case SSH_AGENTC_ADD_SMARTCARD_KEY: @@ -309,7 +303,7 @@ process(void) } if (msg_len > consumed) { if ((r = sshbuf_consume(iqueue, msg_len - consumed)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "consume"); } } @@ -361,9 +355,9 @@ main(int argc, char **argv) out = STDOUT_FILENO; if ((iqueue = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((oqueue = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); while (1) { memset(pfd, 0, sizeof(pfd)); @@ -379,7 +373,7 @@ main(int argc, char **argv) (r = sshbuf_check_reserve(oqueue, MAX_MSG_LENGTH)) == 0) pfd[0].events = POLLIN; else if (r != SSH_ERR_NO_BUFFER_SPACE) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "reserve"); if (sshbuf_len(oqueue) > 0) pfd[1].events = POLLOUT; @@ -399,10 +393,8 @@ main(int argc, char **argv) } else if (len < 0) { error("read: %s", strerror(errno)); cleanup_exit(1); - } else if ((r = sshbuf_put(iqueue, buf, len)) != 0) { - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); - } + } else if ((r = sshbuf_put(iqueue, buf, len)) != 0) + fatal_fr(r, "sshbuf_put"); } /* send oqueue to stdout */ if ((pfd[1].revents & (POLLOUT|POLLHUP)) != 0) { @@ -411,10 +403,8 @@ main(int argc, char **argv) if (len < 0) { error("write: %s", strerror(errno)); cleanup_exit(1); - } else if ((r = sshbuf_consume(oqueue, len)) != 0) { - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); - } + } else if ((r = sshbuf_consume(oqueue, len)) != 0) + fatal_fr(r, "consume"); } /* @@ -425,7 +415,7 @@ main(int argc, char **argv) if ((r = sshbuf_check_reserve(oqueue, MAX_MSG_LENGTH)) == 0) process(); else if (r != SSH_ERR_NO_BUFFER_SPACE) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "reserve"); } } diff --git a/ssh-pkcs11.c b/ssh-pkcs11.c index f495883d1043..5dc63ccc6aa3 100644 --- a/ssh-pkcs11.c +++ b/ssh-pkcs11.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-pkcs11.c,v 1.50 2020/05/29 03:14:02 djm Exp $ */ +/* $OpenBSD: ssh-pkcs11.c,v 1.51 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2010 Markus Friedl. All rights reserved. * Copyright (c) 2014 Pedro Martelletto. All rights reserved. @@ -84,10 +84,9 @@ ossl_error(const char *msg) { unsigned long e; - error("%s: %s", __func__, msg); + error_f("%s", msg); while ((e = ERR_get_error()) != 0) - error("%s: libcrypto error: %.100s", __func__, - ERR_error_string(e, NULL)); + error_f("libcrypto error: %s", ERR_error_string(e, NULL)); } #endif /* HAVE_EC_KEY_METHOD_NEW */ @@ -202,7 +201,7 @@ pkcs11_k11_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, { struct pkcs11_key *k11 = ptr; - debug("%s: parent %p ptr %p idx %d", __func__, parent, ptr, idx); + debug_f("parent %p ptr %p idx %d", parent, ptr, idx); if (k11 == NULL) return; if (k11->provider) @@ -263,7 +262,7 @@ pkcs11_login_slot(struct pkcs11_provider *provider, struct pkcs11_slotinfo *si, snprintf(prompt, sizeof(prompt), "Enter PIN for '%s': ", si->token.label); if ((pin = read_passphrase(prompt, RP_ALLOW_EOF)) == NULL) { - debug("%s: no pin specified", __func__); + debug_f("no pin specified"); return (-1); /* bail out */ } } @@ -337,8 +336,8 @@ pkcs11_check_obj_bool_attrib(struct pkcs11_key *k11, CK_OBJECT_HANDLE obj, return (-1); } *val = flag != 0; - debug("%s: provider %p slot %lu object %lu: attrib %lu = %d", - __func__, k11->provider, k11->slotidx, obj, type, *val); + debug_f("provider %p slot %lu object %lu: attrib %lu = %d", + k11->provider, k11->slotidx, obj, type, *val); return (0); } @@ -407,7 +406,7 @@ pkcs11_get_key(struct pkcs11_key *k11, CK_MECHANISM_TYPE mech_type) pkcs11_check_obj_bool_attrib(k11, obj, CKA_ALWAYS_AUTHENTICATE, &always_auth); /* ignore errors here */ if (always_auth && !did_login) { - debug("%s: always-auth key", __func__); + debug_f("always-auth key"); if (pkcs11_login(k11, CKU_CONTEXT_SPECIFIC) < 0) { error("login failed for always-auth key"); return (-1); @@ -475,7 +474,7 @@ pkcs11_rsa_start_wrapper(void) if (!RSA_meth_set1_name(rsa_method, "pkcs11") || !RSA_meth_set_priv_enc(rsa_method, pkcs11_rsa_private_encrypt) || !RSA_meth_set_priv_dec(rsa_method, pkcs11_rsa_private_decrypt)) { - error("%s: setup pkcs11 method failed", __func__); + error_f("setup pkcs11 method failed"); return (-1); } return (0); @@ -561,7 +560,7 @@ ecdsa_do_sign(const unsigned char *dgst, int dgst_len, const BIGNUM *inv, goto done; } if (!ECDSA_SIG_set0(ret, r, s)) { - error("%s: ECDSA_SIG_set0 failed", __func__); + error_f("ECDSA_SIG_set0 failed"); ECDSA_SIG_free(ret); ret = NULL; goto done; @@ -883,7 +882,7 @@ pkcs11_fetch_rsa_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx, goto fail; } if (!RSA_set0_key(rsa, rsa_n, rsa_e, NULL)) - fatal("%s: set key", __func__); + fatal_f("set key"); rsa_n = rsa_e = NULL; /* transferred */ if (pkcs11_rsa_wrap(p, slotidx, &key_attr[0], rsa)) @@ -1355,7 +1354,7 @@ pkcs11_rsa_generate_private_key(struct pkcs11_provider *p, CK_ULONG slotidx, if ((rv = f->C_GenerateKeyPair(session, &mech, tpub, npub, tpriv, npriv, &pubKey, &privKey)) != CKR_OK) { - error("%s: key generation failed: error 0x%lx", __func__, rv); + error_f("key generation failed: error 0x%lx", rv); *err = rv; return NULL; } @@ -1434,12 +1433,12 @@ pkcs11_ecdsa_generate_private_key(struct pkcs11_provider *p, CK_ULONG slotidx, break; } if (!ec_curve_infos[i].name) { - error("%s: invalid key size %lu", __func__, bits); + error_f("invalid key size %lu", bits); return NULL; } if (pkcs11_decode_hex(ec_curve_infos[i].oid_encoded, &ecparams, &ecparams_size) == -1) { - error("%s: invalid oid", __func__); + error_f("invalid oid"); return NULL; } @@ -1472,7 +1471,7 @@ pkcs11_ecdsa_generate_private_key(struct pkcs11_provider *p, CK_ULONG slotidx, if ((rv = f->C_GenerateKeyPair(session, &mech, tpub, npub, tpriv, npriv, &pubKey, &privKey)) != CKR_OK) { - error("%s: key generation failed: error 0x%lx", __func__, rv); + error_f("key generation failed: error 0x%lx", rv); *err = rv; return NULL; } @@ -1510,8 +1509,7 @@ pkcs11_register_provider(char *provider_id, char *pin, *labelsp = NULL; if (pkcs11_provider_lookup(provider_id) != NULL) { - debug("%s: provider already registered: %s", - __func__, provider_id); + debug_f("provider already registered: %s", provider_id); goto fail; } /* open shared pkcs11-library */ @@ -1560,8 +1558,7 @@ pkcs11_register_provider(char *provider_id, char *pin, goto fail; } if (p->nslots == 0) { - debug("%s: provider %s returned no slots", __func__, - provider_id); + debug_f("provider %s returned no slots", provider_id); ret = -SSH_PKCS11_ERR_NO_SLOTS; goto fail; } @@ -1580,13 +1577,12 @@ pkcs11_register_provider(char *provider_id, char *pin, if ((rv = f->C_GetTokenInfo(p->slotlist[i], token)) != CKR_OK) { error("C_GetTokenInfo for provider %s slot %lu " - "failed: %lu", provider_id, (unsigned long)i, rv); + "failed: %lu", provider_id, (u_long)i, rv); continue; } if ((token->flags & CKF_TOKEN_INITIALIZED) == 0) { - debug2("%s: ignoring uninitialised token in " - "provider %s slot %lu", __func__, - provider_id, (unsigned long)i); + debug2_f("ignoring uninitialised token in " + "provider %s slot %lu", provider_id, (u_long)i); continue; } rmspace(token->label, sizeof(token->label)); @@ -1668,8 +1664,7 @@ pkcs11_add_provider(char *provider_id, char *pin, struct sshkey ***keyp, pkcs11_provider_unref(p); } if (nkeys == 0) - debug("%s: provider %s returned no keys", __func__, - provider_id); + debug_f("provider %s returned no keys", provider_id); return (nkeys); } @@ -1690,11 +1685,10 @@ pkcs11_gakp(char *provider_id, char *pin, unsigned int slotidx, char *label, *err = 0; if ((p = pkcs11_provider_lookup(provider_id)) != NULL) - debug("%s: provider \"%s\" available", __func__, provider_id); + debug_f("provider \"%s\" available", provider_id); else if ((ret = pkcs11_register_provider(provider_id, pin, NULL, NULL, &p, CKU_SO)) < 0) { - debug("%s: could not register provider %s", __func__, - provider_id); + debug_f("could not register provider %s", provider_id); goto out; } else reset_provider = 1; @@ -1705,7 +1699,7 @@ pkcs11_gakp(char *provider_id, char *pin, unsigned int slotidx, char *label, if ((rv = f->C_SetOperationState(session , pin, strlen(pin), CK_INVALID_HANDLE, CK_INVALID_HANDLE)) != CKR_OK) { - debug("%s: could not supply SO pin: %lu", __func__, rv); + debug_f("could not supply SO pin: %lu", rv); reset_pin = 0; } else reset_pin = 1; @@ -1714,20 +1708,20 @@ pkcs11_gakp(char *provider_id, char *pin, unsigned int slotidx, char *label, case KEY_RSA: if ((k = pkcs11_rsa_generate_private_key(p, slotidx, label, bits, keyid, err)) == NULL) { - debug("%s: failed to generate RSA key", __func__); + debug_f("failed to generate RSA key"); goto out; } break; case KEY_ECDSA: if ((k = pkcs11_ecdsa_generate_private_key(p, slotidx, label, bits, keyid, err)) == NULL) { - debug("%s: failed to generate ECDSA key", __func__); + debug_f("failed to generate ECDSA key"); goto out; } break; default: *err = SSH_PKCS11_ERR_GENERIC; - debug("%s: unknown type %d", __func__, type); + debug_f("unknown type %d", type); goto out; } @@ -1762,10 +1756,10 @@ pkcs11_destroy_keypair(char *provider_id, char *pin, unsigned long slotidx, *err = 0; if ((p = pkcs11_provider_lookup(provider_id)) != NULL) { - debug("%s: using provider \"%s\"", __func__, provider_id); + debug_f("using provider \"%s\"", provider_id); } else if (pkcs11_register_provider(provider_id, pin, NULL, NULL, &p, CKU_SO) < 0) { - debug("%s: could not register provider %s", __func__, + debug_f("could not register provider %s", provider_id); goto out; } else @@ -1777,7 +1771,7 @@ pkcs11_destroy_keypair(char *provider_id, char *pin, unsigned long slotidx, if ((rv = f->C_SetOperationState(session , pin, strlen(pin), CK_INVALID_HANDLE, CK_INVALID_HANDLE)) != CKR_OK) { - debug("%s: could not supply SO pin: %lu", __func__, rv); + debug_f("could not supply SO pin: %lu", rv); reset_pin = 0; } else reset_pin = 1; @@ -1791,8 +1785,8 @@ pkcs11_destroy_keypair(char *provider_id, char *pin, unsigned long slotidx, if (pkcs11_find(p, slotidx, attrs, nattrs, &obj) == 0 && obj != CK_INVALID_HANDLE) { if ((rv = f->C_DestroyObject(session, obj)) != CKR_OK) { - debug("%s: could not destroy private key 0x%hhx", - __func__, keyid); + debug_f("could not destroy private key 0x%hhx", + keyid); *err = rv; goto out; } @@ -1813,8 +1807,8 @@ pkcs11_destroy_keypair(char *provider_id, char *pin, unsigned long slotidx, sizeof(key_type)); rv = f->C_GetAttributeValue(session, obj, attrs, nattrs); if (rv != CKR_OK) { - debug("%s: could not get key type of public key 0x%hhx", - __func__, keyid); + debug_f("could not get key type of public key 0x%hhx", + keyid); *err = rv; key_type = -1; } @@ -1824,8 +1818,7 @@ pkcs11_destroy_keypair(char *provider_id, char *pin, unsigned long slotidx, k = pkcs11_fetch_ecdsa_pubkey(p, slotidx, &obj); if ((rv = f->C_DestroyObject(session, obj)) != CKR_OK) { - debug("%s: could not destroy public key 0x%hhx", - __func__, keyid); + debug_f("could not destroy public key 0x%hhx", keyid); *err = rv; goto out; } diff --git a/ssh-sk-client.c b/ssh-sk-client.c index 8d7e6c305133..3102a2c99934 100644 --- a/ssh-sk-client.c +++ b/ssh-sk-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-sk-client.c,v 1.7 2020/01/23 07:10:22 dtucker Exp $ */ +/* $OpenBSD: ssh-sk-client.c,v 1.8 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -47,7 +47,7 @@ static int start_helper(int *fdp, pid_t *pidp, void (**osigchldp)(int)) { void (*osigchld)(int); - int oerrno, pair[2], r = SSH_ERR_INTERNAL_ERROR; + int oerrno, pair[2]; pid_t pid; char *helper, *verbosity = NULL; @@ -60,8 +60,7 @@ start_helper(int *fdp, pid_t *pidp, void (**osigchldp)(int)) helper = _PATH_SSH_SK_HELPER; if (access(helper, X_OK) != 0) { oerrno = errno; - error("%s: helper \"%s\" unusable: %s", __func__, helper, - strerror(errno)); + error_f("helper \"%s\" unusable: %s", helper, strerror(errno)); errno = oerrno; return SSH_ERR_SYSTEM_ERROR; } @@ -87,22 +86,22 @@ start_helper(int *fdp, pid_t *pidp, void (**osigchldp)(int)) if (pid == 0) { if ((dup2(pair[1], STDIN_FILENO) == -1) || (dup2(pair[1], STDOUT_FILENO) == -1)) { - error("%s: dup2: %s", __func__, ssh_err(r)); + error_f("dup2: %s", strerror(errno)); _exit(1); } close(pair[0]); close(pair[1]); closefrom(STDERR_FILENO + 1); - debug("%s: starting %s %s", __func__, helper, + debug_f("starting %s %s", helper, verbosity == NULL ? "" : verbosity); execlp(helper, helper, verbosity, (char *)NULL); - error("%s: execlp: %s", __func__, strerror(errno)); + error_f("execlp: %s", strerror(errno)); _exit(1); } close(pair[1]); /* success */ - debug3("%s: started pid=%ld", __func__, (long)pid); + debug3_f("started pid=%ld", (long)pid); *fdp = pair[0]; *pidp = pid; *osigchldp = osigchld; @@ -114,7 +113,7 @@ reap_helper(pid_t pid) { int status, oerrno; - debug3("%s: pid=%ld", __func__, (long)pid); + debug3_f("pid=%ld", (long)pid); errno = 0; while (waitpid(pid, &status, 0) == -1) { @@ -123,15 +122,15 @@ reap_helper(pid_t pid) continue; } oerrno = errno; - error("%s: waitpid: %s", __func__, strerror(errno)); + error_f("waitpid: %s", strerror(errno)); errno = oerrno; return SSH_ERR_SYSTEM_ERROR; } if (!WIFEXITED(status)) { - error("%s: helper exited abnormally", __func__); + error_f("helper exited abnormally"); return SSH_ERR_AGENT_FAILURE; } else if (WEXITSTATUS(status) != 0) { - error("%s: helper exited with non-zero exit status", __func__); + error_f("helper exited with non-zero exit status"); return SSH_ERR_AGENT_FAILURE; } return 0; @@ -161,37 +160,37 @@ client_converse(struct sshbuf *msg, struct sshbuf **respp, u_int type) (r = sshbuf_put_u8(req, log_is_on_stderr() != 0)) != 0 || (r = sshbuf_put_u32(req, ll < 0 ? 0 : ll)) != 0 || (r = sshbuf_putb(req, msg)) != 0) { - error("%s: build: %s", __func__, ssh_err(r)); + error_fr(r, "compose"); goto out; } if ((r = ssh_msg_send(fd, SSH_SK_HELPER_VERSION, req)) != 0) { - error("%s: send: %s", __func__, ssh_err(r)); + error_fr(r, "send"); goto out; } if ((r = ssh_msg_recv(fd, resp)) != 0) { - error("%s: receive: %s", __func__, ssh_err(r)); + error_fr(r, "receive"); goto out; } if ((r = sshbuf_get_u8(resp, &version)) != 0) { - error("%s: parse version: %s", __func__, ssh_err(r)); + error_fr(r, "parse version"); goto out; } if (version != SSH_SK_HELPER_VERSION) { - error("%s: unsupported version: got %u, expected %u", - __func__, version, SSH_SK_HELPER_VERSION); + error_f("unsupported version: got %u, expected %u", + version, SSH_SK_HELPER_VERSION); r = SSH_ERR_INVALID_FORMAT; goto out; } if ((r = sshbuf_get_u32(resp, &rtype)) != 0) { - error("%s: parse message type: %s", __func__, ssh_err(r)); + error_fr(r, "parse message type"); goto out; } if (rtype == SSH_SK_HELPER_ERROR) { if ((r = sshbuf_get_u32(resp, &rerr)) != 0) { - error("%s: parse error: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); goto out; } - debug("%s: helper returned error -%u", __func__, rerr); + debug_f("helper returned error -%u", rerr); /* OpenSSH error values are negative; encoded as -err on wire */ if (rerr == 0 || rerr >= INT_MAX) r = SSH_ERR_INTERNAL_ERROR; @@ -199,8 +198,8 @@ client_converse(struct sshbuf *msg, struct sshbuf **respp, u_int type) r = -(int)rerr; goto out; } else if (rtype != type) { - error("%s: helper returned incorrect message type %u, " - "expecting %u", __func__, rtype, type); + error_f("helper returned incorrect message type %u, " + "expecting %u", rtype, type); r = SSH_ERR_INTERNAL_ERROR; goto out; } @@ -250,7 +249,7 @@ sshsk_sign(const char *provider, struct sshkey *key, } if ((r = sshkey_private_serialize(key, kbuf)) != 0) { - error("%s: serialize private key: %s", __func__, ssh_err(r)); + error_fr(r, "encode key"); goto out; } if ((r = sshbuf_put_stringb(req, kbuf)) != 0 || @@ -259,13 +258,13 @@ sshsk_sign(const char *provider, struct sshkey *key, (r = sshbuf_put_cstring(req, NULL)) != 0 || /* alg */ (r = sshbuf_put_u32(req, compat)) != 0 || (r = sshbuf_put_cstring(req, pin)) != 0) { - error("%s: compose: %s", __func__, ssh_err(r)); + error_fr(r, "compose"); goto out; } if ((fp = sshkey_fingerprint(key, SSH_FP_HASH_DEFAULT, SSH_FP_DEFAULT)) == NULL) { - error("%s: sshkey_fingerprint failed", __func__); + error_f("sshkey_fingerprint failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } @@ -273,12 +272,12 @@ sshsk_sign(const char *provider, struct sshkey *key, goto out; if ((r = sshbuf_get_string(resp, sigp, lenp)) != 0) { - error("%s: parse signature: %s", __func__, ssh_err(r)); + error_fr(r, "parse signature"); r = SSH_ERR_INVALID_FORMAT; goto out; } if (sshbuf_len(resp) != 0) { - error("%s: trailing data in response", __func__); + error_f("trailing data in response"); r = SSH_ERR_INVALID_FORMAT; goto out; } @@ -334,7 +333,7 @@ sshsk_enroll(int type, const char *provider_path, const char *device, (r = sshbuf_put_u8(req, flags)) != 0 || (r = sshbuf_put_cstring(req, pin)) != 0 || (r = sshbuf_put_stringb(req, challenge_buf)) != 0) { - error("%s: compose: %s", __func__, ssh_err(r)); + error_fr(r, "compose"); goto out; } @@ -343,21 +342,21 @@ sshsk_enroll(int type, const char *provider_path, const char *device, if ((r = sshbuf_get_stringb(resp, kbuf)) != 0 || (r = sshbuf_get_stringb(resp, abuf)) != 0) { - error("%s: parse signature: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); r = SSH_ERR_INVALID_FORMAT; goto out; } if (sshbuf_len(resp) != 0) { - error("%s: trailing data in response", __func__); + error_f("trailing data in response"); r = SSH_ERR_INVALID_FORMAT; goto out; } if ((r = sshkey_private_deserialize(kbuf, &key)) != 0) { - error("Unable to parse private key: %s", ssh_err(r)); + error_fr(r, "encode"); goto out; } if (attest != NULL && (r = sshbuf_putb(attest, abuf)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "encode attestation information"); goto out; } @@ -398,7 +397,7 @@ sshsk_load_resident(const char *provider_path, const char *device, if ((r = sshbuf_put_cstring(req, provider_path)) != 0 || (r = sshbuf_put_cstring(req, device)) != 0 || (r = sshbuf_put_cstring(req, pin)) != 0) { - error("%s: compose: %s", __func__, ssh_err(r)); + error_fr(r, "compose"); goto out; } @@ -409,21 +408,21 @@ sshsk_load_resident(const char *provider_path, const char *device, /* key, comment */ if ((r = sshbuf_get_stringb(resp, kbuf)) != 0 || (r = sshbuf_get_cstring(resp, NULL, NULL)) != 0) { - error("%s: parse signature: %s", __func__, ssh_err(r)); + error_fr(r, "parse signature"); r = SSH_ERR_INVALID_FORMAT; goto out; } if ((r = sshkey_private_deserialize(kbuf, &key)) != 0) { - error("Unable to parse private key: %s", ssh_err(r)); + error_fr(r, "decode key"); goto out; } if ((tmp = recallocarray(keys, nkeys, nkeys + 1, sizeof(*keys))) == NULL) { - error("%s: recallocarray keys failed", __func__); + error_f("recallocarray keys failed"); goto out; } - debug("%s: keys[%zu]: %s %s", __func__, - nkeys, sshkey_type(key), key->sk_application); + debug_f("keys[%zu]: %s %s", nkeys, sshkey_type(key), + key->sk_application); keys = tmp; keys[nkeys++] = key; key = NULL; diff --git a/ssh-sk-helper.c b/ssh-sk-helper.c index 8f92f4e23c7a..21a08919d340 100644 --- a/ssh-sk-helper.c +++ b/ssh-sk-helper.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-sk-helper.c,v 1.10 2020/05/26 01:59:46 djm Exp $ */ +/* $OpenBSD: ssh-sk-helper.c,v 1.11 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -67,7 +67,7 @@ reply_error(int r, char *fmt, ...) free(msg); if (r >= 0) - fatal("%s: invalid error code %d", __func__, r); + fatal_f("invalid error code %d", r); if ((resp = sshbuf_new()) == NULL) fatal("%s: sshbuf_new failed", __progname); @@ -106,17 +106,19 @@ process_sign(struct sshbuf *req) (r = sshbuf_get_cstring(req, NULL, NULL)) != 0 || /* alg */ (r = sshbuf_get_u32(req, &compat)) != 0 || (r = sshbuf_get_cstring(req, &pin, NULL)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: parse", __progname); if (sshbuf_len(req) != 0) fatal("%s: trailing data in request", __progname); if ((r = sshkey_private_deserialize(kbuf, &key)) != 0) - fatal("Unable to parse private key: %s", ssh_err(r)); - if (!sshkey_is_sk(key)) - fatal("Unsupported key type %s", sshkey_ssh_name(key)); + fatal_r(r, "%s: Unable to parse private key", __progname); + if (!sshkey_is_sk(key)) { + fatal("%s: Unsupported key type %s", + __progname, sshkey_ssh_name(key)); + } - debug("%s: ready to sign with key %s, provider %s: " - "msg len %zu, compat 0x%lx", __progname, sshkey_type(key), + debug_f("ready to sign with key %s, provider %s: " + "msg len %zu, compat 0x%lx", sshkey_type(key), provider, msglen, (u_long)compat); null_empty(&pin); @@ -132,7 +134,7 @@ process_sign(struct sshbuf *req) if ((r = sshbuf_put_u32(resp, SSH_SK_HELPER_SIGN)) != 0 || (r = sshbuf_put_string(resp, sig, siglen)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: compose", __progname); out: sshkey_free(key); sshbuf_free(kbuf); @@ -166,7 +168,7 @@ process_enroll(struct sshbuf *req) (r = sshbuf_get_u8(req, &flags)) != 0 || (r = sshbuf_get_cstring(req, &pin, NULL)) != 0 || (r = sshbuf_froms(req, &challenge)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: parse", __progname); if (sshbuf_len(req) != 0) fatal("%s: trailing data in request", __progname); @@ -189,11 +191,11 @@ process_enroll(struct sshbuf *req) if ((resp = sshbuf_new()) == NULL) fatal("%s: sshbuf_new failed", __progname); if ((r = sshkey_private_serialize(key, kbuf)) != 0) - fatal("%s: serialize private key: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: encode key", __progname); if ((r = sshbuf_put_u32(resp, SSH_SK_HELPER_ENROLL)) != 0 || (r = sshbuf_put_stringb(resp, kbuf)) != 0 || (r = sshbuf_put_stringb(resp, attest)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: compose", __progname); out: sshkey_free(key); @@ -223,7 +225,7 @@ process_load_resident(struct sshbuf *req) if ((r = sshbuf_get_cstring(req, &provider, NULL)) != 0 || (r = sshbuf_get_cstring(req, &device, NULL)) != 0 || (r = sshbuf_get_cstring(req, &pin, NULL)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: parse", __progname); if (sshbuf_len(req) != 0) fatal("%s: trailing data in request", __progname); @@ -241,18 +243,17 @@ process_load_resident(struct sshbuf *req) fatal("%s: sshbuf_new failed", __progname); if ((r = sshbuf_put_u32(resp, SSH_SK_HELPER_LOAD_RESIDENT)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: compose", __progname); for (i = 0; i < nkeys; i++) { - debug("%s: key %zu %s %s", __func__, i, - sshkey_type(keys[i]), keys[i]->sk_application); + debug_f("key %zu %s %s", i, sshkey_type(keys[i]), + keys[i]->sk_application); sshbuf_reset(kbuf); if ((r = sshkey_private_serialize(keys[i], kbuf)) != 0) - fatal("%s: serialize private key: %s", - __progname, ssh_err(r)); + fatal_r(r, "%s: encode key", __progname); if ((r = sshbuf_put_stringb(resp, kbuf)) != 0 || (r = sshbuf_put_cstring(resp, "")) != 0) /* comment */ - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: compose key", __progname); } out: @@ -311,10 +312,10 @@ main(int argc, char **argv) if (ssh_msg_recv(in, req) < 0) fatal("ssh_msg_recv failed"); close(in); - debug("%s: received message len %zu", __progname, sshbuf_len(req)); + debug_f("received message len %zu", sshbuf_len(req)); if ((r = sshbuf_get_u8(req, &version)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: parse version", __progname); if (version != SSH_SK_HELPER_VERSION) { fatal("unsupported version: received %d, expected %d", version, SSH_SK_HELPER_VERSION); @@ -323,7 +324,7 @@ main(int argc, char **argv) if ((r = sshbuf_get_u32(req, &rtype)) != 0 || (r = sshbuf_get_u8(req, &log_stderr)) != 0 || (r = sshbuf_get_u32(req, &ll)) != 0) - fatal("%s: buffer error: %s", __progname, ssh_err(r)); + fatal_r(r, "%s: parse", __progname); if (!vflag && log_level_name((LogLevel)ll) != NULL) log_init(__progname, (LogLevel)ll, log_facility, log_stderr); @@ -342,7 +343,7 @@ main(int argc, char **argv) fatal("%s: unsupported request type %u", __progname, rtype); } sshbuf_free(req); - debug("%s: reply len %zu", __progname, sshbuf_len(resp)); + debug_f("reply len %zu", sshbuf_len(resp)); if (ssh_msg_send(out, SSH_SK_HELPER_VERSION, resp) == -1) fatal("ssh_msg_send failed"); diff --git a/ssh-sk.c b/ssh-sk.c index 1455df635ff8..e87b3f3b9ae3 100644 --- a/ssh-sk.c +++ b/ssh-sk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-sk.c,v 1.32 2020/09/09 03:08:02 djm Exp $ */ +/* $OpenBSD: ssh-sk.c,v 1.33 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -105,11 +105,11 @@ sshsk_open(const char *path) return NULL; } if ((ret = calloc(1, sizeof(*ret))) == NULL) { - error("%s: calloc failed", __func__); + error_f("calloc failed"); return NULL; } if ((ret->path = strdup(path)) == NULL) { - error("%s: strdup failed", __func__); + error_f("strdup failed"); goto fail; } /* Skip the rest if we're using the linked in middleware */ @@ -134,8 +134,8 @@ sshsk_open(const char *path) goto fail; } version = ret->sk_api_version(); - debug("%s: provider %s implements version 0x%08lx", __func__, - ret->path, (u_long)version); + debug_f("provider %s implements version 0x%08lx", ret->path, + (u_long)version); if ((version & SSH_SK_VERSION_MAJOR_MASK) != SSH_SK_VERSION_MAJOR) { error("Provider \"%s\" implements unsupported " "version 0x%08lx (supported: 0x%08lx)", @@ -200,7 +200,7 @@ sshsk_ecdsa_assemble(struct sk_enroll_response *resp, struct sshkey **keyp) *keyp = NULL; if ((key = sshkey_new(KEY_ECDSA_SK)) == NULL) { - error("%s: sshkey_new failed", __func__); + error_f("sshkey_new failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } @@ -208,17 +208,17 @@ sshsk_ecdsa_assemble(struct sk_enroll_response *resp, struct sshkey **keyp) if ((key->ecdsa = EC_KEY_new_by_curve_name(key->ecdsa_nid)) == NULL || (q = EC_POINT_new(EC_KEY_get0_group(key->ecdsa))) == NULL || (b = sshbuf_new()) == NULL) { - error("%s: allocation failed", __func__); + error_f("allocation failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } if ((r = sshbuf_put_string(b, resp->public_key, resp->public_key_len)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "sshbuf_put_string"); goto out; } if ((r = sshbuf_get_ec(b, q, EC_KEY_get0_group(key->ecdsa))) != 0) { - error("%s: parse key: %s", __func__, ssh_err(r)); + error_fr(r, "parse"); r = SSH_ERR_INVALID_FORMAT; goto out; } @@ -229,7 +229,7 @@ sshsk_ecdsa_assemble(struct sk_enroll_response *resp, struct sshkey **keyp) } if (EC_KEY_set_public_key(key->ecdsa, q) != 1) { /* XXX assume it is a allocation error */ - error("%s: allocation failed", __func__); + error_f("allocation failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } @@ -253,17 +253,17 @@ sshsk_ed25519_assemble(struct sk_enroll_response *resp, struct sshkey **keyp) *keyp = NULL; if (resp->public_key_len != ED25519_PK_SZ) { - error("%s: invalid size: %zu", __func__, resp->public_key_len); + error_f("invalid size: %zu", resp->public_key_len); r = SSH_ERR_INVALID_FORMAT; goto out; } if ((key = sshkey_new(KEY_ED25519_SK)) == NULL) { - error("%s: sshkey_new failed", __func__); + error_f("sshkey_new failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } if ((key->ed25519_pk = malloc(ED25519_PK_SZ)) == NULL) { - error("%s: malloc failed", __func__); + error_f("malloc failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } @@ -288,7 +288,7 @@ sshsk_key_from_response(int alg, const char *application, uint8_t flags, /* Check response validity */ if (resp->public_key == NULL || resp->key_handle == NULL) { - error("%s: sk_enroll response invalid", __func__); + error_f("sk_enroll response invalid"); r = SSH_ERR_INVALID_FORMAT; goto out; } @@ -304,25 +304,25 @@ sshsk_key_from_response(int alg, const char *application, uint8_t flags, goto out; break; default: - error("%s: unsupported algorithm %d", __func__, alg); + error_f("unsupported algorithm %d", alg); r = SSH_ERR_INVALID_ARGUMENT; goto out; } key->sk_flags = flags; if ((key->sk_key_handle = sshbuf_new()) == NULL || (key->sk_reserved = sshbuf_new()) == NULL) { - error("%s: allocation failed", __func__); + error_f("allocation failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } if ((key->sk_application = strdup(application)) == NULL) { - error("%s: strdup application failed", __func__); + error_f("strdup application failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } if ((r = sshbuf_put(key->sk_key_handle, resp->key_handle, resp->key_handle_len)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "put key handle"); goto out; } /* success */ @@ -374,18 +374,18 @@ sshsk_add_option(struct sk_option ***optsp, size_t *noptsp, if ((opts = recallocarray(opts, nopts, nopts + 2, /* extra for NULL */ sizeof(*opts))) == NULL) { - error("%s: array alloc failed", __func__); + error_f("array alloc failed"); return SSH_ERR_ALLOC_FAIL; } *optsp = opts; *noptsp = nopts + 1; if ((opts[nopts] = calloc(1, sizeof(**opts))) == NULL) { - error("%s: alloc failed", __func__); + error_f("alloc failed"); return SSH_ERR_ALLOC_FAIL; } if ((opts[nopts]->name = strdup(name)) == NULL || (opts[nopts]->value = strdup(value)) == NULL) { - error("%s: alloc failed", __func__); + error_f("alloc failed"); return SSH_ERR_ALLOC_FAIL; } opts[nopts]->required = required; @@ -438,7 +438,7 @@ fill_attestation_blob(const struct sk_enroll_response *resp, resp->authdata, resp->authdata_len)) != 0 || (r = sshbuf_put_u32(attest, 0)) != 0 || /* resvd flags */ (r = sshbuf_put_string(attest, NULL, 0)) != 0 /* resvd */) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "compose"); return r; } /* success */ @@ -461,8 +461,8 @@ sshsk_enroll(int type, const char *provider_path, const char *device, int r = SSH_ERR_INTERNAL_ERROR; int alg; - debug("%s: provider \"%s\", device \"%s\", application \"%s\", " - "userid \"%s\", flags 0x%02x, challenge len %zu%s", __func__, + debug_f("provider \"%s\", device \"%s\", application \"%s\", " + "userid \"%s\", flags 0x%02x, challenge len %zu%s", provider_path, device, application, userid, flags, challenge_buf == NULL ? 0 : sshbuf_len(challenge_buf), (pin != NULL && *pin != '\0') ? " with-pin" : ""); @@ -484,22 +484,22 @@ sshsk_enroll(int type, const char *provider_path, const char *device, alg = SSH_SK_ED25519; break; default: - error("%s: unsupported key type", __func__); + error_f("unsupported key type"); r = SSH_ERR_INVALID_ARGUMENT; goto out; } if (provider_path == NULL) { - error("%s: missing provider", __func__); + error_f("missing provider"); r = SSH_ERR_INVALID_ARGUMENT; goto out; } if (application == NULL || *application == '\0') { - error("%s: missing application", __func__); + error_f("missing application"); r = SSH_ERR_INVALID_ARGUMENT; goto out; } if (challenge_buf == NULL) { - debug("%s: using random challenge", __func__); + debug_f("using random challenge"); arc4random_buf(randchall, sizeof(randchall)); challenge = randchall; challenge_len = sizeof(randchall); @@ -510,8 +510,7 @@ sshsk_enroll(int type, const char *provider_path, const char *device, } else { challenge = sshbuf_ptr(challenge_buf); challenge_len = sshbuf_len(challenge_buf); - debug3("%s: using explicit challenge len=%zd", - __func__, challenge_len); + debug3_f("using explicit challenge len=%zd", challenge_len); } if ((skp = sshsk_open(provider_path)) == NULL) { r = SSH_ERR_INVALID_FORMAT; /* XXX sshsk_open return code? */ @@ -521,8 +520,7 @@ sshsk_enroll(int type, const char *provider_path, const char *device, /* enroll key */ if ((r = skp->sk_enroll(alg, challenge, challenge_len, application, flags, pin, opts, &resp)) != 0) { - debug("%s: provider \"%s\" returned failure %d", __func__, - provider_path, r); + debug_f("provider \"%s\" failure %d", provider_path, r); r = skerr_to_ssherr(r); goto out; } @@ -557,7 +555,7 @@ sshsk_ecdsa_sig(struct sk_sign_response *resp, struct sshbuf *sig) /* Check response validity */ if (resp->sig_r == NULL || resp->sig_s == NULL) { - error("%s: sk_sign response invalid", __func__); + error_f("sk_sign response invalid"); r = SSH_ERR_INVALID_FORMAT; goto out; } @@ -570,13 +568,13 @@ sshsk_ecdsa_sig(struct sk_sign_response *resp, struct sshbuf *sig) resp->sig_r, resp->sig_r_len)) != 0 || (r = sshbuf_put_bignum2_bytes(inner_sig, resp->sig_s, resp->sig_s_len)) != 0) { - debug("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "compose inner"); goto out; } if ((r = sshbuf_put_stringb(sig, inner_sig)) != 0 || (r = sshbuf_put_u8(sig, resp->flags)) != 0 || (r = sshbuf_put_u32(sig, resp->counter)) != 0) { - debug("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "compose"); goto out; } #ifdef DEBUG_SK @@ -601,7 +599,7 @@ sshsk_ed25519_sig(struct sk_sign_response *resp, struct sshbuf *sig) /* Check response validity */ if (resp->sig_r == NULL) { - error("%s: sk_sign response invalid", __func__); + error_f("sk_sign response invalid"); r = SSH_ERR_INVALID_FORMAT; goto out; } @@ -609,7 +607,7 @@ sshsk_ed25519_sig(struct sk_sign_response *resp, struct sshbuf *sig) resp->sig_r, resp->sig_r_len)) != 0 || (r = sshbuf_put_u8(sig, resp->flags)) != 0 || (r = sshbuf_put_u32(sig, resp->counter)) != 0) { - debug("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "compose"); goto out; } #ifdef DEBUG_SK @@ -633,7 +631,7 @@ sshsk_sign(const char *provider_path, struct sshkey *key, struct sshbuf *inner_sig = NULL, *sig = NULL; struct sk_option **opts = NULL; - debug("%s: provider \"%s\", key %s, flags 0x%02x%s", __func__, + debug_f("provider \"%s\", key %s, flags 0x%02x%s", provider_path, sshkey_type(key), key->sk_flags, (pin != NULL && *pin != '\0') ? " with-pin" : ""); @@ -668,7 +666,7 @@ sshsk_sign(const char *provider_path, struct sshkey *key, if ((r = skp->sk_sign(alg, data, datalen, key->sk_application, sshbuf_ptr(key->sk_key_handle), sshbuf_len(key->sk_key_handle), key->sk_flags, pin, opts, &resp)) != 0) { - debug("%s: sk_sign failed with code %d", __func__, r); + debug_f("sk_sign failed with code %d", r); r = skerr_to_ssherr(r); goto out; } @@ -678,7 +676,7 @@ sshsk_sign(const char *provider_path, struct sshkey *key, goto out; } if ((r = sshbuf_put_cstring(sig, sshkey_ssh_name_plain(key))) != 0) { - debug("%s: buffer error (outer): %s", __func__, ssh_err(r)); + error_fr(r, "compose outer"); goto out; } switch (type) { @@ -752,7 +750,7 @@ sshsk_load_resident(const char *provider_path, const char *device, uint8_t flags; struct sk_option **opts = NULL; - debug("%s: provider \"%s\"%s", __func__, provider_path, + debug_f("provider \"%s\"%s", provider_path, (pin != NULL && *pin != '\0') ? ", have-pin": ""); if (keysp == NULL || nkeysp == NULL) @@ -772,9 +770,8 @@ sshsk_load_resident(const char *provider_path, const char *device, goto out; } for (i = 0; i < nrks; i++) { - debug3("%s: rk %zu: slot = %zu, alg = %d, application = \"%s\"", - __func__, i, rks[i]->slot, rks[i]->alg, - rks[i]->application); + debug3_f("rk %zu: slot = %zu, alg = %d, application = \"%s\"", + i, rks[i]->slot, rks[i]->alg, rks[i]->application); /* XXX need better filter here */ if (strncmp(rks[i]->application, "ssh:", 4) != 0) continue; @@ -793,7 +790,7 @@ sshsk_load_resident(const char *provider_path, const char *device, goto out; if ((tmp = recallocarray(keys, nkeys, nkeys + 1, sizeof(*tmp))) == NULL) { - error("%s: recallocarray failed", __func__); + error_f("recallocarray failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } diff --git a/ssh-xmss.c b/ssh-xmss.c index ccd4c7600aba..07351034f074 100644 --- a/ssh-xmss.c +++ b/ssh-xmss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-xmss.c,v 1.2 2020/02/26 13:40:09 jsg Exp $*/ +/* $OpenBSD: ssh-xmss.c,v 1.3 2020/10/18 11:32:02 djm Exp $*/ /* * Copyright (c) 2017 Stefan-Lukas Gazdag. * Copyright (c) 2017 Markus Friedl. @@ -164,8 +164,7 @@ ssh_xmss_verify(const struct sshkey *key, memcpy(sm+len, data, datalen); if ((ret = xmss_sign_open(m, &mlen, sm, smlen, key->xmss_pk, sshkey_xmss_params(key))) != 0) { - debug2("%s: crypto_sign_xmss_open failed: %d", - __func__, ret); + debug2_f("xmss_sign_open failed: %d", ret); } if (ret != 0 || mlen != datalen) { r = SSH_ERR_SIGNATURE_INVALID; diff --git a/ssh.c b/ssh.c index 3d5ca9b03511..7a10813727ca 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.539 2020/10/16 13:26:13 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.540 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -321,8 +321,8 @@ resolve_host(const char *name, int port, int logerr, char *cname, size_t clen) } if (cname != NULL && res->ai_canonname != NULL) { if (strlcpy(cname, res->ai_canonname, clen) >= clen) { - error("%s: host \"%s\" cname \"%s\" too long (max %lu)", - __func__, name, res->ai_canonname, (u_long)clen); + error_f("host \"%s\" cname \"%s\" too long (max %lu)", + name, res->ai_canonname, (u_long)clen); if (clen > 0) *cname = '\0'; } @@ -386,29 +386,27 @@ resolve_addr(const char *name, int port, char *caddr, size_t clen) hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_NUMERICHOST|AI_NUMERICSERV; if ((gaierr = getaddrinfo(name, strport, &hints, &res)) != 0) { - debug2("%s: could not resolve name %.100s as address: %s", - __func__, name, ssh_gai_strerror(gaierr)); + debug2_f("could not resolve name %.100s as address: %s", + name, ssh_gai_strerror(gaierr)); return NULL; } if (res == NULL) { - debug("%s: getaddrinfo %.100s returned no addresses", - __func__, name); + debug_f("getaddrinfo %.100s returned no addresses", name); return NULL; } if (res->ai_next != NULL) { - debug("%s: getaddrinfo %.100s returned multiple addresses", - __func__, name); + debug_f("getaddrinfo %.100s returned multiple addresses", name); goto fail; } if ((gaierr = getnameinfo(res->ai_addr, res->ai_addrlen, addr, sizeof(addr), NULL, 0, NI_NUMERICHOST)) != 0) { - debug("%s: Could not format address for name %.100s: %s", - __func__, name, ssh_gai_strerror(gaierr)); + debug_f("Could not format address for name %.100s: %s", + name, ssh_gai_strerror(gaierr)); goto fail; } if (strlcpy(caddr, addr, clen) >= clen) { - error("%s: host \"%s\" addr \"%s\" too long (max %lu)", - __func__, name, addr, (u_long)clen); + error_f("host \"%s\" addr \"%s\" too long (max %lu)", + name, addr, (u_long)clen); if (clen > 0) *caddr = '\0'; fail: @@ -441,7 +439,7 @@ check_follow_cname(int direct, char **namep, const char *cname) if (!direct && options.canonicalize_hostname != SSH_CANONICALISE_ALWAYS) return 0; - debug3("%s: check \"%s\" CNAME \"%s\"", __func__, *namep, cname); + debug3_f("check \"%s\" CNAME \"%s\"", *namep, cname); for (i = 0; i < options.num_permitted_cnames; i++) { rule = options.permitted_cnames + i; if (match_pattern_list(*namep, rule->source_list, 1) != 1 || @@ -475,10 +473,10 @@ resolve_canonicalize(char **hostp, int port) */ if ((addrs = resolve_addr(*hostp, port, newname, sizeof(newname))) != NULL) { - debug2("%s: hostname %.100s is address", __func__, *hostp); + debug2_f("hostname %.100s is address", *hostp); if (strcasecmp(*hostp, newname) != 0) { - debug2("%s: canonicalised address \"%s\" => \"%s\"", - __func__, *hostp, newname); + debug2_f("canonicalised address \"%s\" => \"%s\"", + *hostp, newname); free(*hostp); *hostp = xstrdup(newname); } @@ -491,8 +489,7 @@ resolve_canonicalize(char **hostp, int port) * attempts at canonicalisation. */ if (is_addr_fast(*hostp)) { - debug("%s: hostname %.100s is an unrecognised address", - __func__, *hostp); + debug_f("hostname %.100s is an unrecognised address", *hostp); return NULL; } @@ -511,7 +508,7 @@ resolve_canonicalize(char **hostp, int port) /* If domain name is anchored, then resolve it now */ if ((*hostp)[strlen(*hostp) - 1] == '.') { - debug3("%s: name is fully qualified", __func__); + debug3_f("name is fully qualified"); fullhost = xstrdup(*hostp); if ((addrs = resolve_host(fullhost, port, 0, newname, sizeof(newname))) != NULL) @@ -527,16 +524,15 @@ resolve_canonicalize(char **hostp, int port) ndots++; } if (ndots > options.canonicalize_max_dots) { - debug3("%s: not canonicalizing hostname \"%s\" (max dots %d)", - __func__, *hostp, options.canonicalize_max_dots); + debug3_f("not canonicalizing hostname \"%s\" (max dots %d)", + *hostp, options.canonicalize_max_dots); return NULL; } /* Attempt each supplied suffix */ for (i = 0; i < options.num_canonical_domains; i++) { xasprintf(&fullhost, "%s.%s.", *hostp, options.canonical_domains[i]); - debug3("%s: attempting \"%s\" => \"%s\"", __func__, - *hostp, fullhost); + debug3_f("attempting \"%s\" => \"%s\"", *hostp, fullhost); if ((addrs = resolve_host(fullhost, port, 0, newname, sizeof(newname))) == NULL) { free(fullhost); @@ -557,7 +553,7 @@ resolve_canonicalize(char **hostp, int port) notfound: if (!options.canonicalize_fallback_local) fatal("%s: Could not resolve host \"%s\"", __progname, *hostp); - debug2("%s: host %s not found in any suffix", __func__, *hostp); + debug2_f("host %s not found in any suffix", *hostp); return NULL; } @@ -573,14 +569,14 @@ check_load(int r, const char *path, const char *message) break; case SSH_ERR_INTERNAL_ERROR: case SSH_ERR_ALLOC_FAIL: - fatal("load %s \"%s\": %s", message, path, ssh_err(r)); + fatal_r(r, "load %s \"%s\"", message, path); case SSH_ERR_SYSTEM_ERROR: /* Ignore missing files */ if (errno == ENOENT) break; /* FALLTHROUGH */ default: - error("load %s \"%s\": %s", message, path, ssh_err(r)); + error_r(r, "load %s \"%s\"", message, path); break; } } @@ -1144,8 +1140,7 @@ main(int ac, char **av) for (i = 0; i < ac; i++) { if ((r = sshbuf_putf(command, "%s%s", i ? " " : "", av[i])) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "buffer error"); } } @@ -1406,7 +1401,7 @@ main(int ac, char **av) free(cp); if ((r = sshbuf_put(command, options.remote_command, strlen(options.remote_command))) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "buffer error"); } if (options.control_path != NULL) { @@ -1572,13 +1567,13 @@ main(int ac, char **av) /* XXX check errors? */ #define L_PUBKEY(p,o) do { \ if ((o) >= sensitive_data.nkeys) \ - fatal("%s pubkey out of array bounds", __func__); \ + fatal_f("pubkey out of array bounds"); \ check_load(sshkey_load_public(p, &(sensitive_data.keys[o]), NULL), \ p, "pubkey"); \ } while (0) #define L_CERT(p,o) do { \ if ((o) >= sensitive_data.nkeys) \ - fatal("%s cert out of array bounds", __func__); \ + fatal_f("cert out of array bounds"); \ check_load(sshkey_load_cert(p, &(sensitive_data.keys[o])), p, "cert"); \ } while (0) @@ -1701,7 +1696,7 @@ control_persist_detach(void) { pid_t pid; - debug("%s: backgrounding master process", __func__); + debug_f("backgrounding master process"); /* * master (current process) into the background, and make the @@ -1709,13 +1704,13 @@ control_persist_detach(void) */ switch ((pid = fork())) { case -1: - fatal("%s: fork: %s", __func__, strerror(errno)); + fatal_f("fork: %s", strerror(errno)); case 0: /* Child: master process continues mainloop */ break; default: /* Parent: set up mux client to connect to backgrounded master */ - debug2("%s: background process is %ld", __func__, (long)pid); + debug2_f("background process is %ld", (long)pid); stdin_null_flag = ostdin_null_flag; options.request_tty = orequest_tty; tty_flag = otty_flag; @@ -1727,7 +1722,7 @@ control_persist_detach(void) fatal("Failed to connect to new control master"); } if (stdfd_devnull(1, 1, !(log_is_on_stderr() && debug_flag)) == -1) - error("%s: stdfd_devnull failed", __func__); + error_f("stdfd_devnull failed"); daemon(1, 1); setproctitle("%s [mux]", options.control_path); } @@ -1743,7 +1738,7 @@ fork_postauth(void) if (daemon(1, 1) == -1) fatal("daemon() failed: %.200s", strerror(errno)); if (stdfd_devnull(1, 1, !(log_is_on_stderr() && debug_flag)) == -1) - error("%s: stdfd_devnull failed", __func__); + error_f("stdfd_devnull failed"); } static void @@ -1752,12 +1747,12 @@ forwarding_success(void) if (forward_confirms_pending == -1) return; if (--forward_confirms_pending == 0) { - debug("%s: all expected forwarding replies received", __func__); + debug_f("all expected forwarding replies received"); if (fork_after_authentication_flag) fork_postauth(); } else { - debug2("%s: %d expected forwarding replies remaining", - __func__, forward_confirms_pending); + debug2_f("%d expected forwarding replies remaining", + forward_confirms_pending); } } @@ -1780,7 +1775,7 @@ ssh_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) if (rfwd->listen_path == NULL && rfwd->listen_port == 0) { if (type == SSH2_MSG_REQUEST_SUCCESS) { if ((r = sshpkt_get_u32(ssh, &port)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse packet"); if (port > 65535) { error("Invalid allocated port %u for remote " "forward to %s:%d", port, @@ -1846,7 +1841,7 @@ ssh_tun_confirm(struct ssh *ssh, int id, int success, void *arg) cleanup_exit(255); } - debug("%s: tunnel forward established, id=%d", __func__, id); + debug_f("tunnel forward established, id=%d", id); forwarding_success(); } @@ -1859,7 +1854,7 @@ ssh_init_stdio_forwarding(struct ssh *ssh) if (options.stdio_forward_host == NULL) return; - debug3("%s: %s:%d", __func__, options.stdio_forward_host, + debug3_f("%s:%d", options.stdio_forward_host, options.stdio_forward_port); if ((in = dup(STDIN_FILENO)) == -1 || @@ -1867,7 +1862,7 @@ ssh_init_stdio_forwarding(struct ssh *ssh) fatal("channel_connect_stdio_fwd: dup() in/out failed"); if ((c = channel_connect_stdio_fwd(ssh, options.stdio_forward_host, options.stdio_forward_port, in, out)) == NULL) - fatal("%s: channel_connect_stdio_fwd failed", __func__); + fatal_f("channel_connect_stdio_fwd failed"); channel_register_cleanup(ssh, c->self, client_cleanup_stdio_fwd, 0); channel_register_open_confirm(ssh, c->self, ssh_stdio_confirm, NULL); } @@ -1940,7 +1935,7 @@ ssh_init_forwarding(struct ssh *ssh, char **ifname) error("Could not request tunnel forwarding."); } if (forward_confirms_pending > 0) { - debug("%s: expecting replies for %d forwards", __func__, + debug_f("expecting replies for %d forwards", forward_confirms_pending); } } @@ -1955,8 +1950,7 @@ check_agent_present(void) if ((r = ssh_get_authentication_socket(NULL)) != 0) { options.forward_agent = 0; if (r != SSH_ERR_AGENT_NOT_PRESENT) - debug("ssh_get_authentication_socket: %s", - ssh_err(r)); + debug_r(r, "ssh_get_authentication_socket"); } } } @@ -1993,7 +1987,7 @@ ssh_session2_setup(struct ssh *ssh, int id, int success, void *arg) debug("Requesting authentication agent forwarding."); channel_request_start(ssh, id, "auth-agent-req@openssh.com", 0); if ((r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); } /* Tell the packet module whether this is an interactive session. */ @@ -2041,7 +2035,7 @@ ssh_session2_open(struct ssh *ssh) window, packetmax, CHAN_EXTENDED_WRITE, "client-session", /*nonblock*/0); - debug3("%s: channel_new: %d", __func__, c->self); + debug3_f("channel_new: %d", c->self); channel_send_open(ssh, c->self); if (!no_shell_flag) @@ -2127,7 +2121,7 @@ ssh_session2(struct ssh *ssh, struct passwd *pw) "no-more-sessions@openssh.com")) != 0 || (r = sshpkt_put_u8(ssh, 0)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); } /* Execute a local command */ @@ -2142,7 +2136,7 @@ ssh_session2(struct ssh *ssh, struct passwd *pw) * as it may want to write to stdout. */ if (!need_controlpersist_detach && stdfd_devnull(0, 1, 0) == -1) - error("%s: stdfd_devnull failed", __func__); + error_f("stdfd_devnull failed"); /* * If requested and we are not interested in replies to remote @@ -2250,8 +2244,8 @@ load_public_identity_files(struct passwd *pw) continue; } if (!sshkey_is_cert(public)) { - debug("%s: key %s type %s is not a certificate", - __func__, cp, sshkey_type(public)); + debug_f("key %s type %s is not a certificate", + cp, sshkey_type(public)); sshkey_free(public); free(cp); continue; @@ -2265,7 +2259,7 @@ load_public_identity_files(struct passwd *pw) } if (options.num_certificate_files > SSH_MAX_CERTIFICATE_FILES) - fatal("%s: too many certificates", __func__); + fatal_f("too many certificates"); for (i = 0; i < options.num_certificate_files; i++) { cp = tilde_expand_filename(options.certificate_files[i], getuid()); @@ -2284,8 +2278,8 @@ load_public_identity_files(struct passwd *pw) continue; } if (!sshkey_is_cert(public)) { - debug("%s: key %s type %s is not a certificate", - __func__, filename, sshkey_type(public)); + debug_f("key %s type %s is not a certificate", + filename, sshkey_type(public)); sshkey_free(public); free(filename); continue; diff --git a/ssh_api.c b/ssh_api.c index 129404b207b8..9479eb61b424 100644 --- a/ssh_api.c +++ b/ssh_api.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh_api.c,v 1.21 2020/08/27 01:06:18 djm Exp $ */ +/* $OpenBSD: ssh_api.c,v 1.22 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2012 Markus Friedl. All rights reserved. * @@ -356,7 +356,7 @@ _ssh_read_banner(struct ssh *ssh, struct sshbuf *banner) if (sshbuf_len(banner) >= 4 && memcmp(sshbuf_ptr(banner), "SSH-", 4) == 0) break; - debug("%s: %.*s", __func__, (int)sshbuf_len(banner), + debug_f("%.*s", (int)sshbuf_len(banner), sshbuf_ptr(banner)); /* Accept lines before banner only on client */ if (ssh->kex->server || ++n > SSH_MAX_PRE_BANNER_LINES) { @@ -469,9 +469,9 @@ _ssh_host_public_key(int type, int nid, struct ssh *ssh) { struct key_entry *k; - debug3("%s: need %d", __func__, type); + debug3_f("need %d", type); TAILQ_FOREACH(k, &ssh->public_keys, next) { - debug3("%s: check %s", __func__, sshkey_type(k->key)); + debug3_f("check %s", sshkey_type(k->key)); if (k->key->type == type && (type != KEY_ECDSA || k->key->ecdsa_nid == nid)) return (k->key); @@ -484,9 +484,9 @@ _ssh_host_private_key(int type, int nid, struct ssh *ssh) { struct key_entry *k; - debug3("%s: need %d", __func__, type); + debug3_f("need %d", type); TAILQ_FOREACH(k, &ssh->private_keys, next) { - debug3("%s: check %s", __func__, sshkey_type(k->key)); + debug3_f("check %s", sshkey_type(k->key)); if (k->key->type == type && (type != KEY_ECDSA || k->key->ecdsa_nid == nid)) return (k->key); @@ -499,9 +499,9 @@ _ssh_verify_host_key(struct sshkey *hostkey, struct ssh *ssh) { struct key_entry *k; - debug3("%s: need %s", __func__, sshkey_type(hostkey)); + debug3_f("need %s", sshkey_type(hostkey)); TAILQ_FOREACH(k, &ssh->public_keys, next) { - debug3("%s: check %s", __func__, sshkey_type(k->key)); + debug3_f("check %s", sshkey_type(k->key)); if (sshkey_equal_public(hostkey, k->key)) return (0); /* ok */ } @@ -547,8 +547,8 @@ _ssh_order_hostkeyalgs(struct ssh *ssh) } } if (*replace != '\0') { - debug2("%s: orig/%d %s", __func__, ssh->kex->server, orig); - debug2("%s: replace/%d %s", __func__, ssh->kex->server, replace); + debug2_f("orig/%d %s", ssh->kex->server, orig); + debug2_f("replace/%d %s", ssh->kex->server, replace); free(orig); proposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = replace; replace = NULL; /* owned by proposal */ diff --git a/sshconnect.c b/sshconnect.c index 7426ca99576b..70b2dee047b0 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.340 2020/10/12 08:36:37 kn Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.341 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -152,7 +152,7 @@ ssh_proxy_fdpass_connect(struct ssh *ssh, const char *host, */ if (!debug_flag && options.control_path != NULL && options.control_persist && stdfd_devnull(0, 0, 1) == -1) - error("%s: stdfd_devnull failed", __func__); + error_f("stdfd_devnull failed"); argv[0] = shell; argv[1] = "-c"; @@ -235,7 +235,7 @@ ssh_proxy_connect(struct ssh *ssh, const char *host, const char *host_arg, */ if (!debug_flag && options.control_path != NULL && options.control_persist && stdfd_devnull(0, 0, 1) == -1) - error("%s: stdfd_devnull failed", __func__); + error_f("stdfd_devnull failed"); argv[0] = shell; argv[1] = "-c"; @@ -314,8 +314,7 @@ check_ifaddrs(const char *ifname, int af, const struct ifaddrs *ifaddrs, htonl(INADDR_LOOPBACK)) continue; if (*rlenp < sizeof(struct sockaddr_in)) { - error("%s: v4 addr doesn't fit", - __func__); + error_f("v4 addr doesn't fit"); return -1; } *rlenp = sizeof(struct sockaddr_in); @@ -329,8 +328,7 @@ check_ifaddrs(const char *ifname, int af, const struct ifaddrs *ifaddrs, IN6_IS_ADDR_LOOPBACK(v6addr))) continue; if (*rlenp < sizeof(struct sockaddr_in6)) { - error("%s: v6 addr doesn't fit", - __func__); + error_f("v6 addr doesn't fit"); return -1; } *rlenp = sizeof(struct sockaddr_in6); @@ -407,15 +405,14 @@ ssh_create_socket(struct addrinfo *ai) } if ((r = getnameinfo((struct sockaddr *)&bindaddr, bindaddrlen, ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST)) != 0) { - error("%s: getnameinfo failed: %s", __func__, - ssh_gai_strerror(r)); + error_f("getnameinfo failed: %s", ssh_gai_strerror(r)); goto fail; } if (bind(sock, (struct sockaddr *)&bindaddr, bindaddrlen) != 0) { error("bind %s: %s", ntop, strerror(errno)); goto fail; } - debug("%s: bound to %s", __func__, ntop); + debug_f("bound to %s", ntop); /* success */ goto out; fail: @@ -450,7 +447,7 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop, char ntop[NI_MAXHOST], strport[NI_MAXSERV]; struct addrinfo *ai; - debug2("%s", __func__); + debug3_f("entering"); memset(ntop, 0, sizeof(ntop)); memset(strport, 0, sizeof(strport)); @@ -474,7 +471,7 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop, ntop, sizeof(ntop), strport, sizeof(strport), NI_NUMERICHOST|NI_NUMERICSERV) != 0) { oerrno = errno; - error("%s: getnameinfo failed", __func__); + error_f("getnameinfo failed"); errno = oerrno; continue; } @@ -545,7 +542,7 @@ ssh_connect(struct ssh *ssh, const char *host, const char *host_arg, (out = dup(STDOUT_FILENO)) == -1) { if (in >= 0) close(in); - error("%s: dup() in/out failed", __func__); + error_f("dup() in/out failed"); return -1; /* ssh_packet_set_connection logs error */ } if ((ssh_packet_set_connection(ssh, in, out)) == NULL) @@ -604,16 +601,15 @@ check_host_cert(const char *host, const struct sshkey *key) } if ((r = sshkey_check_cert_sigtype(key, options.ca_sign_algorithms)) != 0) { - logit("%s: certificate signature algorithm %s: %s", __func__, + logit_fr(r, "certificate signature algorithm %s", (key->cert == NULL || key->cert->signature_type == NULL) ? - "(null)" : key->cert->signature_type, ssh_err(r)); + "(null)" : key->cert->signature_type); return 0; } /* Do not attempt hostkey update if a certificate was successful */ if (options.update_hostkeys != 0) { options.update_hostkeys = 0; - debug3("%s: certificate host key in use; disabling " - "UpdateHostkeys", __func__); + debug3_f("certificate host key in use; disabling UpdateHostkeys"); } return 1; } @@ -667,7 +663,7 @@ get_hostfile_hostname_ipaddr(char *hostname, struct sockaddr *hostaddr, if (options.proxy_command == NULL) { if (getnameinfo(hostaddr, addrlen, ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST) != 0) - fatal("%s: getnameinfo failed", __func__); + fatal_f("getnameinfo failed"); *hostfile_ipaddr = put_host_port(ntop, port); } else { *hostfile_ipaddr = xstrdup("file, system_hostfiles, num_system_hostfiles)))) { options.update_hostkeys = 0; - debug3("%s: host key found in GlobalKnownHostsFile; " - "disabling UpdateHostkeys", __func__); + debug3_f("host key found in GlobalKnownHostsFile; " + "disabling UpdateHostkeys"); } if (options.check_host_ip && ip_status == HOST_NEW) { if (readonly || want_cert) @@ -847,7 +843,7 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, ra = sshkey_fingerprint(host_key, options.fingerprint_hash, SSH_FP_RANDOMART); if (fp == NULL || ra == NULL) - fatal("%s: sshkey_fingerprint fail", __func__); + fatal_f("sshkey_fingerprint failed"); logit("Host key fingerprint is %s\n%s", fp, ra); free(ra); free(fp); @@ -894,7 +890,7 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, ra = sshkey_fingerprint(host_key, options.fingerprint_hash, SSH_FP_RANDOMART); if (fp == NULL || ra == NULL) - fatal("%s: sshkey_fingerprint fail", __func__); + fatal_f("sshkey_fingerprint failed"); msg2[0] = '\0'; if (options.verify_host_key_dns) { if (matching_host_key_dns) @@ -1131,8 +1127,8 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, } if (!hostkey_trusted && options.update_hostkeys) { - debug("%s: hostkey not known or explicitly trusted: " - "disabling UpdateHostkeys", __func__); + debug_f("hostkey not known or explicitly trusted: " + "disabling UpdateHostkeys"); options.update_hostkeys = 0; } @@ -1152,10 +1148,9 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, */ debug("No matching CA found. Retry with plain key"); if ((r = sshkey_from_private(host_key, &raw_key)) != 0) - fatal("%s: sshkey_from_private: %s", - __func__, ssh_err(r)); + fatal_fr(r, "decode key"); if ((r = sshkey_drop_cert(raw_key)) != 0) - fatal("Couldn't drop certificate: %s", ssh_err(r)); + fatal_r(r, "Couldn't drop certificate"); host_key = raw_key; goto retry; } @@ -1180,7 +1175,7 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) if ((fp = sshkey_fingerprint(host_key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { - error("%s: fingerprint host key: %s", __func__, ssh_err(r)); + error_fr(r, "fingerprint host key"); r = -1; goto out; } @@ -1188,8 +1183,7 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) if (sshkey_is_cert(host_key)) { if ((cafp = sshkey_fingerprint(host_key->cert->signature_key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { - error("%s: fingerprint CA key: %s", - __func__, ssh_err(r)); + error_fr(r, "fingerprint CA key"); r = -1; goto out; } @@ -1211,8 +1205,8 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) } if (sshkey_equal(previous_host_key, host_key)) { - debug2("%s: server host key %s %s matches cached key", - __func__, sshkey_type(host_key), fp); + debug2_f("server host key %s %s matches cached key", + sshkey_type(host_key), fp); r = 0; goto out; } @@ -1230,9 +1224,9 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) r = -1; goto out; default: - error("Error checking host key %s %s in " - "revoked keys file %s: %s", sshkey_type(host_key), - fp, options.revoked_host_keys, ssh_err(r)); + error_r(r, "Error checking host key %s %s in " + "revoked keys file %s", sshkey_type(host_key), + fp, options.revoked_host_keys); r = -1; goto out; } @@ -1347,7 +1341,7 @@ show_other_keys(struct hostkeys *hostkeys, struct sshkey *key) ra = sshkey_fingerprint(found->key, options.fingerprint_hash, SSH_FP_RANDOMART); if (fp == NULL || ra == NULL) - fatal("%s: sshkey_fingerprint fail", __func__); + fatal_f("sshkey_fingerprint fail"); logit("WARNING: %s key found for host %s\n" "in %s:%lu\n" "%s key fingerprint %s.", @@ -1371,7 +1365,7 @@ warn_changed_key(struct sshkey *host_key) fp = sshkey_fingerprint(host_key, options.fingerprint_hash, SSH_FP_DEFAULT); if (fp == NULL) - fatal("%s: sshkey_fingerprint fail", __func__); + fatal_f("sshkey_fingerprint fail"); error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); error("@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @"); diff --git a/sshconnect2.c b/sshconnect2.c index 9e3bd05c9242..ad81e18a4139 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.330 2020/10/16 02:37:12 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.331 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -143,8 +143,8 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) if (lookup_key_in_hostkeys_by_type(hostkeys, sshkey_type_plain(sshkey_type_from_name(best)), sshkey_ecdsa_nid_from_name(best), NULL)) { - debug3("%s: have matching best-preference key type %s, " - "using HostkeyAlgorithms verbatim", __func__, best); + debug3_f("have matching best-preference key type %s, " + "using HostkeyAlgorithms verbatim", best); ret = xstrdup(options.hostkeyalgorithms); goto out; } @@ -168,7 +168,7 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) while ((alg = strsep(&avail, ",")) && *alg != '\0') { if ((ktype = sshkey_type_from_name(alg)) == KEY_UNSPEC) - fatal("%s: unknown alg %s", __func__, alg); + fatal_f("unknown alg %s", alg); /* * If we have a @cert-authority marker in known_hosts then * prefer all certificate algorithms. @@ -192,7 +192,7 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) xasprintf(&ret, "%s%s%s", first, (*first == '\0' || *last == '\0') ? "" : ",", last); if (*first != '\0') - debug3("%s: prefer hostkeyalgs: %s", __func__, first); + debug3_f("prefer hostkeyalgs: %s", first); out: free(best); @@ -229,11 +229,11 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port) all_key = sshkey_alg_list(0, 0, 1, ','); if (kex_assemble_names(&options.hostkeyalgorithms, kex_default_pk_alg(), all_key) != 0) - fatal("%s: kex_assemble_namelist", __func__); + fatal_f("kex_assemble_namelist"); free(all_key); if ((s = kex_names_cat(options.kex_algorithms, "ext-info-c")) == NULL) - fatal("%s: kex_names_cat", __func__); + fatal_f("kex_names_cat"); myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal(s); myproposal[PROPOSAL_ENC_ALGS_CTOS] = compat_cipher_proposal(options.ciphers); @@ -261,7 +261,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port) /* start key exchange */ if ((r = kex_setup(ssh, myproposal)) != 0) - fatal("kex_setup: %s", ssh_err(r)); + fatal_r(r, "kex_setup"); #ifdef WITH_OPENSSL ssh->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_client; ssh->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_client; @@ -284,7 +284,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port) myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal(options.kex_algorithms); if ((r = kex_prop2buf(ssh->kex->my, myproposal)) != 0) - fatal("kex_prop2buf: %s", ssh_err(r)); + fatal_r(r, "kex_prop2buf"); session_id2 = ssh->kex->session_id; session_id2_len = ssh->kex->session_id_len; @@ -295,7 +295,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port) (r = sshpkt_put_cstring(ssh, "markus")) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); #endif } @@ -463,14 +463,13 @@ ssh_userauth2(struct ssh *ssh, const char *local_user, authctxt.agent_fd = -1; pubkey_prepare(&authctxt); if (authctxt.method == NULL) { - fatal("%s: internal error: cannot send userauth none request", - __func__); + fatal_f("internal error: cannot send userauth none request"); } if ((r = sshpkt_start(ssh, SSH2_MSG_SERVICE_REQUEST)) != 0 || (r = sshpkt_put_cstring(ssh, "ssh-userauth")) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); ssh->authctxt = &authctxt; ssh_dispatch_init(ssh, &input_userauth_error); @@ -568,7 +567,7 @@ userauth(struct ssh *ssh, char *authlist) static int input_userauth_error(int type, u_int32_t seq, struct ssh *ssh) { - fatal("%s: bad message during authentication: type %d", __func__, type); + fatal_f("bad message during authentication: type %d", type); return 0; } @@ -580,7 +579,7 @@ input_userauth_banner(int type, u_int32_t seq, struct ssh *ssh) size_t len; int r; - debug3("%s", __func__); + debug3_f("entering"); if ((r = sshpkt_get_cstring(ssh, &msg, &len)) != 0 || (r = sshpkt_get_cstring(ssh, NULL, NULL)) != 0) goto out; @@ -599,7 +598,7 @@ input_userauth_success(int type, u_int32_t seq, struct ssh *ssh) Authctxt *authctxt = ssh->authctxt; if (authctxt == NULL) - fatal("%s: no authentication context", __func__); + fatal_f("no authentication context"); free(authctxt->authlist); authctxt->authlist = NULL; if (authctxt->method != NULL && authctxt->method->cleanup != NULL) @@ -617,7 +616,7 @@ input_userauth_success_unexpected(int type, u_int32_t seq, struct ssh *ssh) Authctxt *authctxt = ssh->authctxt; if (authctxt == NULL) - fatal("%s: no authentication context", __func__); + fatal_f("no authentication context"); fatal("Unexpected authentication success during %s.", authctxt->method->name); @@ -707,11 +706,11 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh) goto done; if ((pktype = sshkey_type_from_name(pkalg)) == KEY_UNSPEC) { - debug("%s: server sent unknown pkalg %s", __func__, pkalg); + debug_f("server sent unknown pkalg %s", pkalg); goto done; } if ((r = sshkey_from_blob(pkblob, blen, &key)) != 0) { - debug("no key from blob. pkalg %s: %s", pkalg, ssh_err(r)); + debug_r(r, "no key from blob. pkalg %s", pkalg); goto done; } if (key->type != pktype) { @@ -735,7 +734,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh) if (!found || id == NULL) { fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT); - error("%s: server replied with unknown key: %s %s", __func__, + error_f("server replied with unknown key: %s %s", sshkey_type(key), fp == NULL ? "" : fp); goto done; } @@ -801,7 +800,7 @@ userauth_gssapi(struct ssh *ssh) (r = sshpkt_put_u8(ssh, mech->length)) != 0 || (r = sshpkt_put(ssh, mech->elements, mech->length)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_GSSAPI_RESPONSE, &input_gssapi_response); ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_GSSAPI_TOKEN, &input_gssapi_token); @@ -849,7 +848,7 @@ process_gssapi_token(struct ssh *ssh, gss_buffer_t recv_tok) (r = sshpkt_put_string(ssh, send_tok.value, send_tok.length)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send %u packet", type); gss_release_buffer(&ms, &send_tok); } @@ -860,17 +859,17 @@ process_gssapi_token(struct ssh *ssh, gss_buffer_t recv_tok) if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send completion"); } else { struct sshbuf *b; if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); ssh_gssapi_buildmic(b, authctxt->server_user, authctxt->service, "gssapi-with-mic"); if ((gssbuf.value = sshbuf_mutable_ptr(b)) == NULL) - fatal("%s: sshbuf_mutable_ptr failed", __func__); + fatal_f("sshbuf_mutable_ptr failed"); gssbuf.length = sshbuf_len(b); status = ssh_gssapi_sign(gssctxt, &gssbuf, &mic); @@ -881,7 +880,7 @@ process_gssapi_token(struct ssh *ssh, gss_buffer_t recv_tok) (r = sshpkt_put_string(ssh, mic.value, mic.length)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send MIC"); } sshbuf_free(b); @@ -1039,7 +1038,7 @@ userauth_none(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, authctxt->service)) != 0 || (r = sshpkt_put_cstring(ssh, authctxt->method->name)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); return 1; } @@ -1068,7 +1067,7 @@ userauth_passwd(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, password)) != 0 || (r = sshpkt_add_padding(ssh, 64)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); free(prompt); if (password != NULL) @@ -1235,8 +1234,8 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, if ((prv = load_identity_file(id)) == NULL) return SSH_ERR_KEY_NOT_FOUND; if (id->key != NULL && !sshkey_equal_public(prv, id->key)) { - error("%s: private key %s contents do not match public", - __func__, id->filename); + error_f("private key %s contents do not match public", + id->filename); r = SSH_ERR_KEY_NOT_FOUND; goto out; } @@ -1253,7 +1252,7 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, if ((fp = sshkey_fingerprint(sign_key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) - fatal("%s: fingerprint", __func__); + fatal_f("fingerprint failed"); notifier = notify_start(options.batch_mode, "Confirm user presence for key %s %s", sshkey_type(sign_key), fp); @@ -1263,7 +1262,7 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, } if ((r = sshkey_sign(sign_key, sigp, lenp, data, datalen, alg, options.sk_provider, pin, compat)) != 0) { - debug("%s: sshkey_sign: %s", __func__, ssh_err(r)); + debug_fr(r, "sshkey_sign"); goto out; } /* @@ -1271,7 +1270,7 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, * so check what we get back. */ if ((r = sshkey_check_sigtype(*sigp, *lenp, alg)) != 0) { - debug("%s: sshkey_check_sigtype: %s", __func__, ssh_err(r)); + debug_fr(r, "sshkey_check_sigtype"); goto out; } /* success */ @@ -1320,7 +1319,7 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) SSH_FP_DEFAULT)) == NULL) return 0; - debug3("%s: %s %s", __func__, sshkey_type(id->key), fp); + debug3_f("%s %s", sshkey_type(id->key), fp); /* * If the key is an certificate, try to find a matching private key @@ -1357,12 +1356,12 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) } } if (sign_id != NULL) { - debug2("%s: using private key \"%s\"%s for " - "certificate", __func__, id->filename, + debug2_f("using private key \"%s\"%s for " + "certificate", id->filename, id->agent_fd != -1 ? " from agent" : ""); } else { - debug("%s: no separate private key for certificate " - "\"%s\"", __func__, id->filename); + debug_f("no separate private key for certificate " + "\"%s\"", id->filename); } } @@ -1380,26 +1379,22 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) signature = NULL; if ((alg = key_sig_algorithm(fallback_sigtype ? NULL : ssh, id->key)) == NULL) { - error("%s: no mutual signature supported", __func__); + error_f("no mutual signature supported"); goto out; } - debug3("%s: signing using %s %s", __func__, alg, fp); + debug3_f("signing using %s %s", alg, fp); sshbuf_free(b); if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if (datafellows & SSH_OLD_SESSIONID) { if ((r = sshbuf_put(b, session_id2, - session_id2_len)) != 0) { - fatal("%s: sshbuf_put: %s", - __func__, ssh_err(r)); - } + session_id2_len)) != 0) + fatal_fr(r, "sshbuf_put"); } else { if ((r = sshbuf_put_string(b, session_id2, - session_id2_len)) != 0) { - fatal("%s: sshbuf_put_string: %s", - __func__, ssh_err(r)); - } + session_id2_len)) != 0) + fatal_fr(r, "sshbuf_put_string"); } skip = sshbuf_len(b); if ((r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || @@ -1409,8 +1404,7 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) (r = sshbuf_put_u8(b, 1)) != 0 || (r = sshbuf_put_cstring(b, alg)) != 0 || (r = sshkey_puts(id->key, b)) != 0) { - fatal("%s: assemble signed data: %s", - __func__, ssh_err(r)); + fatal_fr(r, "assemble signed data"); } /* generate signature */ @@ -1430,30 +1424,30 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) loc, sshkey_type(id->key), fp); continue; } - error("%s: signing failed for %s \"%s\"%s: %s", __func__, + error_fr(r, "signing failed for %s \"%s\"%s", sshkey_type(sign_id->key), sign_id->filename, - id->agent_fd != -1 ? " from agent" : "", ssh_err(r)); + id->agent_fd != -1 ? " from agent" : ""); goto out; } if (slen == 0 || signature == NULL) /* shouldn't happen */ - fatal("%s: no signature", __func__); + fatal_f("no signature"); /* append signature */ if ((r = sshbuf_put_string(b, signature, slen)) != 0) - fatal("%s: append signature: %s", __func__, ssh_err(r)); + fatal_fr(r, "append signature"); #ifdef DEBUG_PK sshbuf_dump(b, stderr); #endif /* skip session id and packet type */ if ((r = sshbuf_consume(b, skip + 1)) != 0) - fatal("%s: consume: %s", __func__, ssh_err(r)); + fatal_fr(r, "consume"); /* put remaining data from buffer into packet */ if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_REQUEST)) != 0 || (r = sshpkt_putb(ssh, b)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: enqueue request: %s", __func__, ssh_err(r)); + fatal_fr(r, "enqueue request"); /* success */ sent = 1; @@ -1477,13 +1471,13 @@ send_pubkey_test(struct ssh *ssh, Identity *id) int sent = 0, r; if ((alg = key_sig_algorithm(ssh, id->key)) == NULL) { - debug("%s: no mutual signature algorithm", __func__); + debug_f("no mutual signature algorithm"); goto out; } if ((r = sshkey_to_blob(id->key, &blob, &bloblen)) != 0) { /* we cannot handle this key */ - debug3("%s: cannot handle key", __func__); + debug3_f("cannot handle key"); goto out; } /* register callback for USERAUTH_PK_OK message */ @@ -1497,7 +1491,7 @@ send_pubkey_test(struct ssh *ssh, Identity *id) (r = sshpkt_put_cstring(ssh, alg)) != 0 || (r = sshpkt_put_string(ssh, blob, bloblen)) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); sent = 1; out: @@ -1547,14 +1541,13 @@ load_identity_file(Identity *id) break; case SSH_ERR_SYSTEM_ERROR: if (errno == ENOENT) { - debug2("Load key \"%s\": %s", - id->filename, ssh_err(r)); + debug2_r(r, "Load key \"%s\"", id->filename); quit = 1; break; } /* FALLTHROUGH */ default: - error("Load key \"%s\": %s", id->filename, ssh_err(r)); + error_r(r, "Load key \"%s\"", id->filename); quit = 1; break; } @@ -1638,15 +1631,14 @@ pubkey_prepare(Authctxt *authctxt) key = options.identity_keys[i]; if (key && key->cert && key->cert->type != SSH2_CERT_TYPE_USER) { - debug("%s: ignoring certificate %s: not a user " - "certificate", __func__, - options.identity_files[i]); + debug_f("ignoring certificate %s: not a user " + "certificate", options.identity_files[i]); continue; } if (key && sshkey_is_sk(key) && options.sk_provider == NULL) { - debug("%s: ignoring authenticator-hosted key %s as no " + debug_f("ignoring authenticator-hosted key %s as no " "SecurityKeyProvider has been specified", - __func__, options.identity_files[i]); + options.identity_files[i]); continue; } options.identity_keys[i] = NULL; @@ -1662,16 +1654,15 @@ pubkey_prepare(Authctxt *authctxt) key = options.certificates[i]; if (!sshkey_is_cert(key) || key->cert == NULL || key->cert->type != SSH2_CERT_TYPE_USER) { - debug("%s: ignoring certificate %s: not a user " - "certificate", __func__, - options.identity_files[i]); + debug_f("ignoring certificate %s: not a user " + "certificate", options.identity_files[i]); continue; } if (key && sshkey_is_sk(key) && options.sk_provider == NULL) { - debug("%s: ignoring authenticator-hosted key " + debug_f("ignoring authenticator-hosted key " "certificate %s as no " "SecurityKeyProvider has been specified", - __func__, options.identity_files[i]); + options.identity_files[i]); continue; } id = xcalloc(1, sizeof(*id)); @@ -1684,12 +1675,10 @@ pubkey_prepare(Authctxt *authctxt) /* list of keys supported by the agent */ if ((r = ssh_get_authentication_socket(&agent_fd)) != 0) { if (r != SSH_ERR_AGENT_NOT_PRESENT) - debug("%s: ssh_get_authentication_socket: %s", - __func__, ssh_err(r)); + debug_fr(r, "ssh_get_authentication_socket"); } else if ((r = ssh_fetch_identitylist(agent_fd, &idlist)) != 0) { if (r != SSH_ERR_AGENT_NO_IDENTITIES) - debug("%s: ssh_fetch_identitylist: %s", - __func__, ssh_err(r)); + debug_fr(r, "ssh_fetch_identitylist"); close(agent_fd); } else { for (j = 0; j < idlist->nkeys; j++) { @@ -1766,7 +1755,7 @@ pubkey_prepare(Authctxt *authctxt) debug("Will attempt key: %s", ident); free(ident); } - debug2("%s: done", __func__); + debug2_f("done"); } static void @@ -1883,7 +1872,7 @@ userauth_kbdint(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, options.kbd_interactive_devices ? options.kbd_interactive_devices : "")) != 0 || (r = sshpkt_send(ssh)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + fatal_fr(r, "send packet"); ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_INFO_REQUEST, &input_userauth_info_req); return 1; @@ -1973,46 +1962,46 @@ ssh_keysign(struct ssh *ssh, struct sshkey *key, u_char **sigp, size_t *lenp, *lenp = 0; if (stat(_PATH_SSH_KEY_SIGN, &st) == -1) { - error("%s: not installed: %s", __func__, strerror(errno)); + error_f("not installed: %s", strerror(errno)); return -1; } if (fflush(stdout) != 0) { - error("%s: fflush: %s", __func__, strerror(errno)); + error_f("fflush: %s", strerror(errno)); return -1; } if (pipe(to) == -1) { - error("%s: pipe: %s", __func__, strerror(errno)); + error_f("pipe: %s", strerror(errno)); return -1; } if (pipe(from) == -1) { - error("%s: pipe: %s", __func__, strerror(errno)); + error_f("pipe: %s", strerror(errno)); return -1; } if ((pid = fork()) == -1) { - error("%s: fork: %s", __func__, strerror(errno)); + error_f("fork: %s", strerror(errno)); return -1; } osigchld = ssh_signal(SIGCHLD, SIG_DFL); if (pid == 0) { close(from[0]); if (dup2(from[1], STDOUT_FILENO) == -1) - fatal("%s: dup2: %s", __func__, strerror(errno)); + fatal_f("dup2: %s", strerror(errno)); close(to[1]); if (dup2(to[0], STDIN_FILENO) == -1) - fatal("%s: dup2: %s", __func__, strerror(errno)); + fatal_f("dup2: %s", strerror(errno)); close(from[1]); close(to[0]); if (dup2(sock, STDERR_FILENO + 1) == -1) - fatal("%s: dup2: %s", __func__, strerror(errno)); + fatal_f("dup2: %s", strerror(errno)); sock = STDERR_FILENO + 1; fcntl(sock, F_SETFD, 0); /* keep the socket on exec */ closefrom(sock + 1); - debug3("%s: [child] pid=%ld, exec %s", - __func__, (long)getpid(), _PATH_SSH_KEY_SIGN); + debug3_f("[child] pid=%ld, exec %s", + (long)getpid(), _PATH_SSH_KEY_SIGN); execl(_PATH_SSH_KEY_SIGN, _PATH_SSH_KEY_SIGN, (char *)NULL); - fatal("%s: exec(%s): %s", __func__, _PATH_SSH_KEY_SIGN, + fatal_f("exec(%s): %s", _PATH_SSH_KEY_SIGN, strerror(errno)); } close(from[1]); @@ -2020,49 +2009,47 @@ ssh_keysign(struct ssh *ssh, struct sshkey *key, u_char **sigp, size_t *lenp, sock = STDERR_FILENO + 1; if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); /* send # of sock, data to be signed */ if ((r = sshbuf_put_u32(b, sock)) != 0 || (r = sshbuf_put_string(b, data, datalen)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "buffer error"); if (ssh_msg_send(to[1], version, b) == -1) - fatal("%s: couldn't send request", __func__); + fatal_f("couldn't send request"); sshbuf_reset(b); r = ssh_msg_recv(from[0], b); close(from[0]); close(to[1]); if (r < 0) { - error("%s: no reply", __func__); + error_f("no reply"); goto fail; } errno = 0; while (waitpid(pid, &status, 0) == -1) { if (errno != EINTR) { - error("%s: waitpid %ld: %s", - __func__, (long)pid, strerror(errno)); + error_f("waitpid %ld: %s", (long)pid, strerror(errno)); goto fail; } } if (!WIFEXITED(status)) { - error("%s: exited abnormally", __func__); + error_f("exited abnormally"); goto fail; } if (WEXITSTATUS(status) != 0) { - error("%s: exited with status %d", - __func__, WEXITSTATUS(status)); + error_f("exited with status %d", WEXITSTATUS(status)); goto fail; } if ((r = sshbuf_get_u8(b, &rversion)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "buffer error"); goto fail; } if (rversion != version) { - error("%s: bad version", __func__); + error_f("bad version"); goto fail; } if ((r = sshbuf_get_string(b, sigp, lenp)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "buffer error"); fail: ssh_signal(SIGCHLD, osigchld); sshbuf_free(b); @@ -2100,8 +2087,7 @@ userauth_hostbased(struct ssh *ssh) if (authctxt->active_ktype == NULL || *authctxt->active_ktype == '\0') break; - debug3("%s: trying key type %s", __func__, - authctxt->active_ktype); + debug3_f("trying key type %s", authctxt->active_ktype); /* check for a useful key */ private = NULL; @@ -2134,30 +2120,29 @@ userauth_hostbased(struct ssh *ssh) if ((fp = sshkey_fingerprint(private, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) { - error("%s: sshkey_fingerprint failed", __func__); + error_f("sshkey_fingerprint failed"); goto out; } - debug("%s: trying hostkey %s %s", - __func__, sshkey_ssh_name(private), fp); + debug_f("trying hostkey %s %s", sshkey_ssh_name(private), fp); /* figure out a name for the client host */ lname = get_local_name(ssh_packet_get_connection_in(ssh)); if (lname == NULL) { - error("%s: cannot get local ipaddr/name", __func__); + error_f("cannot get local ipaddr/name"); goto out; } /* XXX sshbuf_put_stringf? */ xasprintf(&chost, "%s.", lname); - debug2("%s: chost %s", __func__, chost); + debug2_f("chost %s", chost); /* construct data */ if ((b = sshbuf_new()) == NULL) { - error("%s: sshbuf_new failed", __func__); + error_f("sshbuf_new failed"); goto out; } if ((r = sshkey_to_blob(private, &keyblob, &keylen)) != 0) { - error("%s: sshkey_to_blob: %s", __func__, ssh_err(r)); + error_fr(r, "sshkey_to_blob"); goto out; } if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || @@ -2169,7 +2154,7 @@ userauth_hostbased(struct ssh *ssh) (r = sshbuf_put_string(b, keyblob, keylen)) != 0 || (r = sshbuf_put_cstring(b, chost)) != 0 || (r = sshbuf_put_cstring(b, authctxt->local_user)) != 0) { - error("%s: buffer error: %s", __func__, ssh_err(r)); + error_fr(r, "buffer error"); goto out; } @@ -2192,7 +2177,7 @@ userauth_hostbased(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, authctxt->local_user)) != 0 || (r = sshpkt_put_string(ssh, sig, siglen)) != 0 || (r = sshpkt_send(ssh)) != 0) { - error("%s: packet error: %s", __func__, ssh_err(r)); + error_fr(r, "packet error"); goto out; } success = 1; @@ -2301,17 +2286,16 @@ authmethods_get(void) int r; if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); for (method = authmethods; method->name != NULL; method++) { if (authmethod_is_enabled(method)) { if ((r = sshbuf_putf(b, "%s%s", sshbuf_len(b) ? "," : "", method->name)) != 0) - fatal("%s: buffer error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "buffer error"); } } if ((list = sshbuf_dup_string(b)) == NULL) - fatal("%s: sshbuf_dup_string failed", __func__); + fatal_f("sshbuf_dup_string failed"); sshbuf_free(b); return list; } diff --git a/sshd.c b/sshd.c index a196441092af..bdb9c957baa8 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.563 2020/10/16 13:26:13 djm Exp $ */ +/* $OpenBSD: sshd.c,v 1.564 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -410,9 +410,8 @@ demote_sensitive_data(void) if (sensitive_data.host_keys[i]) { if ((r = sshkey_from_private( sensitive_data.host_keys[i], &tmp)) != 0) - fatal("could not demote host %s key: %s", - sshkey_type(sensitive_data.host_keys[i]), - ssh_err(r)); + fatal_r(r, "could not demote host %s key", + sshkey_type(sensitive_data.host_keys[i])); sshkey_free(sensitive_data.host_keys[i]); sensitive_data.host_keys[i] = tmp; } @@ -502,8 +501,7 @@ privsep_preauth(struct ssh *ssh) if (have_agent) { r = ssh_get_authentication_socket(&auth_sock); if (r != 0) { - error("Could not get agent socket: %s", - ssh_err(r)); + error_r(r, "Could not get agent socket"); have_agent = 0; } } @@ -516,17 +514,17 @@ privsep_preauth(struct ssh *ssh) if (errno == EINTR) continue; pmonitor->m_pid = -1; - fatal("%s: waitpid: %s", __func__, strerror(errno)); + fatal_f("waitpid: %s", strerror(errno)); } privsep_is_preauth = 0; pmonitor->m_pid = -1; if (WIFEXITED(status)) { if (WEXITSTATUS(status) != 0) - fatal("%s: preauth child exited with status %d", - __func__, WEXITSTATUS(status)); + fatal_f("preauth child exited with status %d", + WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) - fatal("%s: preauth child terminated by signal %d", - __func__, WTERMSIG(status)); + fatal_f("preauth child terminated by signal %d", + WTERMSIG(status)); if (box != NULL) ssh_sandbox_parent_finish(box); return 1; @@ -606,12 +604,11 @@ append_hostkey_type(struct sshbuf *b, const char *s) int r; if (match_pattern_list(s, options.hostkeyalgorithms, 0) != 1) { - debug3("%s: %s key not permitted by HostkeyAlgorithms", - __func__, s); + debug3_f("%s key not permitted by HostkeyAlgorithms", s); return; } if ((r = sshbuf_putf(b, "%s%s", sshbuf_len(b) > 0 ? "," : "", s)) != 0) - fatal("%s: sshbuf_putf: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); } static char * @@ -623,7 +620,7 @@ list_hostkey_types(void) u_int i; if ((b = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); for (i = 0; i < options.num_host_key_files; i++) { key = sensitive_data.host_keys[i]; if (key == NULL) @@ -668,9 +665,9 @@ list_hostkey_types(void) } } if ((ret = sshbuf_dup_string(b)) == NULL) - fatal("%s: sshbuf_dup_string failed", __func__); + fatal_f("sshbuf_dup_string failed"); sshbuf_free(b); - debug("%s: %s", __func__, ret); + debug_f("%s", ret); return ret; } @@ -784,7 +781,7 @@ notify_hostkeys(struct ssh *ssh) return; if ((buf = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new", __func__); + fatal_f("sshbuf_new"); for (i = nkeys = 0; i < options.num_host_key_files; i++) { key = get_hostkey_public_by_index(i, ssh); if (key == NULL || key->type == KEY_UNSPEC || @@ -792,8 +789,7 @@ notify_hostkeys(struct ssh *ssh) continue; fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT); - debug3("%s: key %d: %s %s", __func__, i, - sshkey_ssh_name(key), fp); + debug3_f("key %d: %s %s", i, sshkey_ssh_name(key), fp); free(fp); if (nkeys == 0) { /* @@ -808,15 +804,14 @@ notify_hostkeys(struct ssh *ssh) /* Append the key to the request */ sshbuf_reset(buf); if ((r = sshkey_putb(key, buf)) != 0) - fatal("%s: couldn't put hostkey %d: %s", - __func__, i, ssh_err(r)); + fatal_fr(r, "couldn't put hostkey %d", i); if ((r = sshpkt_put_stringb(ssh, buf)) != 0) sshpkt_fatal(ssh, r, "%s: append key", __func__); nkeys++; } - debug3("%s: sent %u hostkeys", __func__, nkeys); + debug3_f("sent %u hostkeys", nkeys); if (nkeys == 0) - fatal("%s: no hostkeys", __func__); + fatal_f("no hostkeys"); if ((r = sshpkt_send(ssh)) != 0) sshpkt_fatal(ssh, r, "%s: send", __func__); sshbuf_free(buf); @@ -846,7 +841,7 @@ should_drop_connection(int startups) p += options.max_startups_rate; r = arc4random_uniform(100); - debug("%s: p %d, r %d", __func__, p, r); + debug_f("p %d, r %d", p, r); return (r < p) ? 1 : 0; } @@ -934,18 +929,18 @@ send_rexec_state(int fd, struct sshbuf *conf) struct include_item *item = NULL; int r; - debug3("%s: entering fd = %d config len %zu", __func__, fd, + debug3_f("entering fd = %d config len %zu", fd, sshbuf_len(conf)); if ((m = sshbuf_new()) == NULL || (inc = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); /* pack includes into a string */ TAILQ_FOREACH(item, &includes, entry) { if ((r = sshbuf_put_cstring(inc, item->selector)) != 0 || (r = sshbuf_put_cstring(inc, item->filename)) != 0 || (r = sshbuf_put_stringb(inc, item->contents)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose includes"); } /* @@ -960,17 +955,17 @@ send_rexec_state(int fd, struct sshbuf *conf) */ if ((r = sshbuf_put_stringb(m, conf)) != 0 || (r = sshbuf_put_stringb(m, inc)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose config"); #if defined(WITH_OPENSSL) && !defined(OPENSSL_PRNG_ONLY) rexec_send_rng_seed(m); #endif if (ssh_msg_send(fd, 0, m) == -1) - error("%s: ssh_msg_send failed", __func__); + error_f("ssh_msg_send failed"); sshbuf_free(m); sshbuf_free(inc); - debug3("%s: done", __func__); + debug3_f("done"); } static void @@ -982,42 +977,42 @@ recv_rexec_state(int fd, struct sshbuf *conf) int r; struct include_item *item; - debug3("%s: entering fd = %d", __func__, fd); + debug3_f("entering fd = %d", fd); if ((m = sshbuf_new()) == NULL || (inc = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if (ssh_msg_recv(fd, m) == -1) - fatal("%s: ssh_msg_recv failed", __func__); + fatal_f("ssh_msg_recv failed"); if ((r = sshbuf_get_u8(m, &ver)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse version"); if (ver != 0) - fatal("%s: rexec version mismatch", __func__); + fatal_f("rexec version mismatch"); if ((r = sshbuf_get_string(m, &cp, &len)) != 0 || (r = sshbuf_get_stringb(m, inc)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse config"); #if defined(WITH_OPENSSL) && !defined(OPENSSL_PRNG_ONLY) rexec_recv_rng_seed(m); #endif if (conf != NULL && (r = sshbuf_put(conf, cp, len))) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_put"); while (sshbuf_len(inc) != 0) { item = xcalloc(1, sizeof(*item)); if ((item->contents = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if ((r = sshbuf_get_cstring(inc, &item->selector, NULL)) != 0 || (r = sshbuf_get_cstring(inc, &item->filename, NULL)) != 0 || (r = sshbuf_get_stringb(inc, item->contents)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse includes"); TAILQ_INSERT_TAIL(&includes, item, entry); } free(cp); sshbuf_free(m); - debug3("%s: done", __func__); + debug3_f("done"); } /* Accept a connection from inetd */ @@ -1037,7 +1032,7 @@ server_accept_inetd(int *sock_in, int *sock_out) * ttyfd happens to be one of those. */ if (stdfd_devnull(1, 1, !log_stderr) == -1) - error("%s: stdfd_devnull failed", __func__); + error_f("stdfd_devnull failed"); debug("inetd sockets after dupping: %d, %d", *sock_in, *sock_out); } @@ -1219,9 +1214,9 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s) if (errno == EINTR || errno == EAGAIN) continue; if (errno != EPIPE) { - error("%s: startup pipe %d (fd=%d): " - "read %s", __func__, i, - startup_pipes[i], strerror(errno)); + error_f("startup pipe %d (fd=%d): " + "read %s", i, startup_pipes[i], + strerror(errno)); } /* FALLTHROUGH */ case 0: @@ -1458,7 +1453,7 @@ set_process_rdomain(struct ssh *ssh, const char *name) if (rtable != ortable && setrtable(rtable) != 0) fatal("Unable to set routing domain %d: %s", rtable, strerror(errno)); - debug("%s: set routing domain %d (was %d)", __func__, rtable, ortable); + debug_f("set routing domain %d (was %d)", rtable, ortable); #else /* defined(__OpenBSD__) */ fatal("Unable to set routing domain: not supported in this platform"); #endif @@ -1475,16 +1470,16 @@ accumulate_host_timing_secret(struct sshbuf *server_cfg, int r; if (ctx == NULL && (ctx = ssh_digest_start(SSH_DIGEST_SHA512)) == NULL) - fatal("%s: ssh_digest_start", __func__); + fatal_f("ssh_digest_start"); if (key == NULL) { /* finalize */ /* add server config in case we are using agent for host keys */ if (ssh_digest_update(ctx, sshbuf_ptr(server_cfg), sshbuf_len(server_cfg)) != 0) - fatal("%s: ssh_digest_update", __func__); + fatal_f("ssh_digest_update"); len = ssh_digest_bytes(SSH_DIGEST_SHA512); hash = xmalloc(len); if (ssh_digest_final(ctx, hash, len) != 0) - fatal("%s: ssh_digest_final", __func__); + fatal_f("ssh_digest_final"); options.timing_secret = PEEK_U64(hash); freezero(hash, len); ssh_digest_free(ctx); @@ -1492,11 +1487,11 @@ accumulate_host_timing_secret(struct sshbuf *server_cfg, return; } if ((buf = sshbuf_new()) == NULL) - fatal("%s could not allocate buffer", __func__); + fatal_f("could not allocate buffer"); if ((r = sshkey_private_serialize(key, buf)) != 0) - fatal("sshkey_private_serialize: %s", ssh_err(r)); + fatal_fr(r, "decode key"); if (ssh_digest_update(ctx, sshbuf_ptr(buf), sshbuf_len(buf)) != 0) - fatal("%s: ssh_digest_update", __func__); + fatal_f("ssh_digest_update"); sshbuf_reset(buf); sshbuf_free(buf); } @@ -1716,7 +1711,7 @@ main(int ac, char **av) /* Fetch our configuration */ if ((cfg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if (rexeced_flag) { setproctitle("%s", "[rexeced]"); recv_rexec_state(REEXEC_CONFIG_PASS_FD, cfg); @@ -1811,8 +1806,8 @@ main(int ac, char **av) if ((r = ssh_get_authentication_socket(NULL)) == 0) have_agent = 1; else - error("Could not connect to agent \"%s\": %s", - options.host_key_agent, ssh_err(r)); + error_r(r, "Could not connect to agent \"%s\"", + options.host_key_agent); } for (i = 0; i < options.num_host_key_files; i++) { @@ -1823,8 +1818,8 @@ main(int ac, char **av) continue; if ((r = sshkey_load_private(options.host_key_files[i], "", &key, NULL)) != 0 && r != SSH_ERR_SYSTEM_ERROR) - do_log2(ll, "Unable to load host key \"%s\": %s", - options.host_key_files[i], ssh_err(r)); + do_log2_r(r, ll, "Unable to load host key \"%s\"", + options.host_key_files[i]); if (sshkey_is_sk(key) && key->sk_flags & SSH_SK_USER_PRESENCE_REQD) { debug("host key %s requires user presence, ignoring", @@ -1833,15 +1828,15 @@ main(int ac, char **av) } if (r == 0 && key != NULL && (r = sshkey_shield_private(key)) != 0) { - do_log2(ll, "Unable to shield host key \"%s\": %s", - options.host_key_files[i], ssh_err(r)); + do_log2_r(r, ll, "Unable to shield host key \"%s\"", + options.host_key_files[i]); sshkey_free(key); key = NULL; } if ((r = sshkey_load_public(options.host_key_files[i], &pubkey, NULL)) != 0 && r != SSH_ERR_SYSTEM_ERROR) - do_log2(ll, "Unable to load host key \"%s\": %s", - options.host_key_files[i], ssh_err(r)); + do_log2_r(r, ll, "Unable to load host key \"%s\"", + options.host_key_files[i]); if (pubkey != NULL && key != NULL) { if (!sshkey_equal(pubkey, key)) { error("Public key for %s does not match " @@ -1852,8 +1847,8 @@ main(int ac, char **av) } if (pubkey == NULL && key != NULL) { if ((r = sshkey_from_private(key, &pubkey)) != 0) - fatal("Could not demote key: \"%s\": %s", - options.host_key_files[i], ssh_err(r)); + fatal_r(r, "Could not demote key: \"%s\"", + options.host_key_files[i]); } sensitive_data.host_keys[i] = key; sensitive_data.host_pubkeys[i] = pubkey; @@ -1912,8 +1907,8 @@ main(int ac, char **av) continue; if ((r = sshkey_load_public(options.host_cert_files[i], &key, NULL)) != 0) { - error("Could not load host certificate \"%s\": %s", - options.host_cert_files[i], ssh_err(r)); + error_r(r, "Could not load host certificate \"%s\"", + options.host_cert_files[i]); continue; } if (!sshkey_is_cert(key)) { @@ -2115,7 +2110,7 @@ main(int ac, char **av) close(REEXEC_CONFIG_PASS_FD); newsock = sock_out = sock_in = dup(STDIN_FILENO); if (stdfd_devnull(1, 1, 0) == -1) - error("%s: stdfd_devnull failed", __func__); + error_f("stdfd_devnull failed"); debug("rexec cleanup in %d out %d newsock %d pipe %d sock %d", sock_in, sock_out, newsock, startup_pipe, config_s[0]); } @@ -2216,7 +2211,7 @@ main(int ac, char **av) /* prepare buffer to collect messages to display to user after login */ if ((loginmsg = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); auth_debug_reset(); if (use_privsep) { @@ -2224,7 +2219,7 @@ main(int ac, char **av) goto authenticated; } else if (have_agent) { if ((r = ssh_get_authentication_socket(&auth_sock)) != 0) { - error("Unable to get agent socket: %s", ssh_err(r)); + error_r(r, "Unable to get agent socket"); have_agent = 0; } } @@ -2329,24 +2324,23 @@ sshd_hostkey_sign(struct ssh *ssh, struct sshkey *privkey, if (mm_sshkey_sign(ssh, privkey, signature, slenp, data, dlen, alg, options.sk_provider, NULL, ssh->compat) < 0) - fatal("%s: privkey sign failed", __func__); + fatal_f("privkey sign failed"); } else { if (mm_sshkey_sign(ssh, pubkey, signature, slenp, data, dlen, alg, options.sk_provider, NULL, ssh->compat) < 0) - fatal("%s: pubkey sign failed", __func__); + fatal_f("pubkey sign failed"); } } else { if (privkey) { if (sshkey_sign(privkey, signature, slenp, data, dlen, alg, options.sk_provider, NULL, ssh->compat) < 0) - fatal("%s: privkey sign failed", __func__); + fatal_f("privkey sign failed"); } else { if ((r = ssh_agent_sign(auth_sock, pubkey, signature, slenp, data, dlen, alg, ssh->compat)) != 0) { - fatal("%s: agent sign failed: %s", - __func__, ssh_err(r)); + fatal_fr(r, "agent sign failed"); } } } @@ -2384,7 +2378,7 @@ do_ssh2_kex(struct ssh *ssh) /* start key exchange */ if ((r = kex_setup(ssh, myproposal)) != 0) - fatal("kex_setup: %s", ssh_err(r)); + fatal_r(r, "kex_setup"); kex = ssh->kex; #ifdef WITH_OPENSSL kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server; @@ -2416,7 +2410,7 @@ do_ssh2_kex(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, "markus")) != 0 || (r = sshpkt_send(ssh)) != 0 || (r = ssh_packet_write_wait(ssh)) != 0) - fatal("%s: send test: %s", __func__, ssh_err(r)); + fatal_fr(r, "send test"); #endif debug("KEX done"); } @@ -2431,9 +2425,10 @@ cleanup_exit(int i) pmonitor != NULL && pmonitor->m_pid > 1) { debug("Killing privsep child %d", pmonitor->m_pid); if (kill(pmonitor->m_pid, SIGKILL) != 0 && - errno != ESRCH) - error("%s: kill(%d): %s", __func__, - pmonitor->m_pid, strerror(errno)); + errno != ESRCH) { + error_f("kill(%d): %s", pmonitor->m_pid, + strerror(errno)); + } } } #ifdef SSH_AUDIT_EVENTS diff --git a/sshlogin.c b/sshlogin.c index 08d2600b2df2..82dd848191b1 100644 --- a/sshlogin.c +++ b/sshlogin.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshlogin.c,v 1.34 2019/06/28 13:35:04 deraadt Exp $ */ +/* $OpenBSD: sshlogin.c,v 1.35 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -122,7 +122,7 @@ store_lastlog_message(const char *user, uid_t uid) r = sshbuf_putf(loginmsg, "Last login: %s from %s\r\n", time_string, hostname); if (r != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "sshbuf_putf"); } # endif /* CUSTOM_SYS_AUTH_GET_LASTLOGIN_MSG */ #endif /* NO_SSH_LASTLOG */ diff --git a/sshsig.c b/sshsig.c index 0bd7e5cb79d6..e52d83121d46 100644 --- a/sshsig.c +++ b/sshsig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshsig.c,v 1.17 2020/08/31 00:17:41 djm Exp $ */ +/* $OpenBSD: sshsig.c,v 1.18 2020/10/18 11:32:02 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -54,27 +54,26 @@ sshsig_armor(const struct sshbuf *blob, struct sshbuf **out) *out = NULL; if ((buf = sshbuf_new()) == NULL) { - error("%s: sshbuf_new failed", __func__); + error_f("sshbuf_new failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } if ((r = sshbuf_put(buf, BEGIN_SIGNATURE, sizeof(BEGIN_SIGNATURE)-1)) != 0) { - error("%s: sshbuf_putf failed: %s", __func__, ssh_err(r)); + error_fr(r, "sshbuf_putf"); goto out; } if ((r = sshbuf_dtob64(blob, buf, 1)) != 0) { - error("%s: Couldn't base64 encode signature blob: %s", - __func__, ssh_err(r)); + error_fr(r, "base64 encode signature"); goto out; } if ((r = sshbuf_put(buf, END_SIGNATURE, sizeof(END_SIGNATURE)-1)) != 0 || (r = sshbuf_put_u8(buf, '\n')) != 0) { - error("%s: sshbuf_put failed: %s", __func__, ssh_err(r)); + error_fr(r, "sshbuf_put"); goto out; } /* success */ @@ -96,7 +95,7 @@ sshsig_dearmor(struct sshbuf *sig, struct sshbuf **out) char *b64 = NULL; if ((sbuf = sshbuf_fromb(sig)) == NULL) { - error("%s: sshbuf_fromb failed", __func__); + error_f("sshbuf_fromb failed"); return SSH_ERR_ALLOC_FAIL; } @@ -107,7 +106,7 @@ sshsig_dearmor(struct sshbuf *sig, struct sshbuf **out) } if ((r = sshbuf_consume(sbuf, sizeof(BEGIN_SIGNATURE)-1)) != 0) { - error("%s: sshbuf_consume failed: %s", __func__, ssh_err(r)); + error_fr(r, "consume"); goto done; } @@ -118,24 +117,24 @@ sshsig_dearmor(struct sshbuf *sig, struct sshbuf **out) } if ((r = sshbuf_consume_end(sbuf, sshbuf_len(sbuf)-eoffset)) != 0) { - error("%s: sshbuf_consume failed: %s", __func__, ssh_err(r)); + error_fr(r, "consume"); goto done; } if ((b64 = sshbuf_dup_string(sbuf)) == NULL) { - error("%s: sshbuf_dup_string failed", __func__); + error_f("sshbuf_dup_string failed"); r = SSH_ERR_ALLOC_FAIL; goto done; } if ((buf = sshbuf_new()) == NULL) { - error("%s: sshbuf_new() failed", __func__); + error_f("sshbuf_new() failed"); r = SSH_ERR_ALLOC_FAIL; goto done; } if ((r = sshbuf_b64tod(buf, b64)) != 0) { - error("Couldn't decode signature: %s", ssh_err(r)); + error_fr(r, "decode base64"); goto done; } @@ -165,7 +164,7 @@ sshsig_wrap_sign(struct sshkey *key, const char *hashalg, if ((tosign = sshbuf_new()) == NULL || (blob = sshbuf_new()) == NULL) { - error("%s: sshbuf_new failed", __func__); + error_f("sshbuf_new failed"); r = SSH_ERR_ALLOC_FAIL; goto done; } @@ -175,7 +174,7 @@ sshsig_wrap_sign(struct sshkey *key, const char *hashalg, (r = sshbuf_put_string(tosign, NULL, 0)) != 0 || /* reserved */ (r = sshbuf_put_cstring(tosign, hashalg)) != 0 || (r = sshbuf_put_stringb(tosign, h_message)) != 0) { - error("Couldn't construct message to sign: %s", ssh_err(r)); + error_fr(r, "assemble message to sign"); goto done; } @@ -187,14 +186,14 @@ sshsig_wrap_sign(struct sshkey *key, const char *hashalg, if ((r = signer(key, &sig, &slen, sshbuf_ptr(tosign), sshbuf_len(tosign), sign_alg, sk_provider, sk_pin, 0, signer_ctx)) != 0) { - error("Couldn't sign message: %s", ssh_err(r)); + error_r(r, "Couldn't sign message (signer)"); goto done; } } else { if ((r = sshkey_sign(key, &sig, &slen, sshbuf_ptr(tosign), sshbuf_len(tosign), sign_alg, sk_provider, sk_pin, 0)) != 0) { - error("Couldn't sign message: %s", ssh_err(r)); + error_r(r, "Couldn't sign message"); goto done; } } @@ -206,7 +205,7 @@ sshsig_wrap_sign(struct sshkey *key, const char *hashalg, (r = sshbuf_put_string(blob, NULL, 0)) != 0 || /* reserved */ (r = sshbuf_put_cstring(blob, hashalg)) != 0 || (r = sshbuf_put_string(blob, sig, slen)) != 0) { - error("Couldn't populate blob: %s", ssh_err(r)); + error_fr(r, "assemble signature object"); goto done; } @@ -250,7 +249,7 @@ sshsig_check_hashalg(const char *hashalg) if (hashalg == NULL || match_pattern_list(hashalg, HASHALG_ALLOWED, 0) == 1) return 0; - error("%s: unsupported hash algorithm \"%.100s\"", __func__, hashalg); + error_f("unsupported hash algorithm \"%.100s\"", hashalg); return SSH_ERR_SIGN_ALG_UNSUPPORTED; } @@ -272,7 +271,7 @@ sshsig_peek_hashalg(struct sshbuf *signature, char **hashalgp) (r = sshbuf_get_string(buf, NULL, NULL)) != 0 || (r = sshbuf_get_cstring(buf, &hashalg, NULL)) != 0 || (r = sshbuf_get_string_direct(buf, NULL, NULL)) != 0) { - error("Couldn't parse signature blob: %s", ssh_err(r)); + error_fr(r, "parse signature object"); goto done; } @@ -298,14 +297,14 @@ sshsig_wrap_verify(struct sshbuf *signature, const char *hashalg, char *got_namespace = NULL, *sigtype = NULL, *sig_hashalg = NULL; size_t siglen; - debug("%s: verify message length %zu", __func__, sshbuf_len(h_message)); + debug_f("verify message length %zu", sshbuf_len(h_message)); if (sig_details != NULL) *sig_details = NULL; if (sign_keyp != NULL) *sign_keyp = NULL; if ((toverify = sshbuf_new()) == NULL) { - error("%s: sshbuf_new failed", __func__); + error_f("sshbuf_new failed"); r = SSH_ERR_ALLOC_FAIL; goto done; } @@ -315,7 +314,7 @@ sshsig_wrap_verify(struct sshbuf *signature, const char *hashalg, (r = sshbuf_put_string(toverify, NULL, 0)) != 0 || /* reserved */ (r = sshbuf_put_cstring(toverify, hashalg)) != 0 || (r = sshbuf_put_stringb(toverify, h_message)) != 0) { - error("Couldn't construct message to verify: %s", ssh_err(r)); + error_fr(r, "assemble message to verify"); goto done; } @@ -327,7 +326,7 @@ sshsig_wrap_verify(struct sshbuf *signature, const char *hashalg, (r = sshbuf_get_string(signature, NULL, NULL)) != 0 || (r = sshbuf_get_cstring(signature, &sig_hashalg, NULL)) != 0 || (r = sshbuf_get_string_direct(signature, &sig, &siglen)) != 0) { - error("Couldn't parse signature blob: %s", ssh_err(r)); + error_fr(r, "parse signature object"); goto done; } @@ -339,23 +338,23 @@ sshsig_wrap_verify(struct sshbuf *signature, const char *hashalg, if (strcmp(expect_namespace, got_namespace) != 0) { error("Couldn't verify signature: namespace does not match"); - debug("%s: expected namespace \"%s\" received \"%s\"", - __func__, expect_namespace, got_namespace); + debug_f("expected namespace \"%s\" received \"%s\"", + expect_namespace, got_namespace); r = SSH_ERR_SIGNATURE_INVALID; goto done; } if (strcmp(hashalg, sig_hashalg) != 0) { error("Couldn't verify signature: hash algorithm mismatch"); - debug("%s: expected algorithm \"%s\" received \"%s\"", - __func__, hashalg, sig_hashalg); + debug_f("expected algorithm \"%s\" received \"%s\"", + hashalg, sig_hashalg); r = SSH_ERR_SIGNATURE_INVALID; goto done; } /* Ensure that RSA keys use an acceptable signature algorithm */ if (sshkey_type_plain(key->type) == KEY_RSA) { if ((r = sshkey_get_sigtype(sig, siglen, &sigtype)) != 0) { - error("Couldn't verify signature: unable to get " - "signature type: %s", ssh_err(r)); + error_r(r, "Couldn't verify signature: unable to get " + "signature type"); goto done; } if (match_pattern_list(sigtype, RSA_SIGN_ALLOWED, 0) != 1) { @@ -367,7 +366,7 @@ sshsig_wrap_verify(struct sshbuf *signature, const char *hashalg, } if ((r = sshkey_verify(key, sig, siglen, sshbuf_ptr(toverify), sshbuf_len(toverify), NULL, 0, sig_details)) != 0) { - error("Signature verification failed: %s", ssh_err(r)); + error_r(r, "Signature verification failed"); goto done; } @@ -400,16 +399,15 @@ hash_buffer(const struct sshbuf *m, const char *hashalg, struct sshbuf **bp) if ((r = sshsig_check_hashalg(hashalg)) != 0) return r; if ((alg = ssh_digest_alg_by_name(hashalg)) == -1) { - error("%s: can't look up hash algorithm %s", - __func__, hashalg); + error_f("can't look up hash algorithm %s", hashalg); return SSH_ERR_INTERNAL_ERROR; } if ((r = ssh_digest_buffer(alg, m, hash, sizeof(hash))) != 0) { - error("%s: ssh_digest_buffer failed: %s", __func__, ssh_err(r)); + error_fr(r, "ssh_digest_buffer"); return r; } if ((hex = tohex(hash, ssh_digest_bytes(alg))) != NULL) { - debug3("%s: final hash: %s", __func__, hex); + debug3_f("final hash: %s", hex); freezero(hex, strlen(hex)); } if ((b = sshbuf_new()) == NULL) { @@ -417,7 +415,7 @@ hash_buffer(const struct sshbuf *m, const char *hashalg, struct sshbuf **bp) goto out; } if ((r = sshbuf_put(b, hash, ssh_digest_bytes(alg))) != 0) { - error("%s: sshbuf_put: %s", __func__, ssh_err(r)); + error_fr(r, "sshbuf_put"); goto out; } *bp = b; @@ -444,7 +442,7 @@ sshsig_signb(struct sshkey *key, const char *hashalg, if (out != NULL) *out = NULL; if ((r = hash_buffer(message, hashalg, &b)) != 0) { - error("%s: hash_buffer failed: %s", __func__, ssh_err(r)); + error_fr(r, "hash buffer"); goto out; } if ((r = sshsig_wrap_sign(key, hashalg, sk_provider, sk_pin, b, @@ -472,9 +470,9 @@ sshsig_verifyb(struct sshbuf *signature, const struct sshbuf *message, *sign_keyp = NULL; if ((r = sshsig_peek_hashalg(signature, &hashalg)) != 0) return r; - debug("%s: signature made with hash \"%s\"", __func__, hashalg); + debug_f("signature made with hash \"%s\"", hashalg); if ((r = hash_buffer(message, hashalg, &b)) != 0) { - error("%s: hash_buffer failed: %s", __func__, ssh_err(r)); + error_fr(r, "hash buffer"); goto out; } if ((r = sshsig_wrap_verify(signature, hashalg, b, expect_namespace, @@ -503,12 +501,11 @@ hash_file(int fd, const char *hashalg, struct sshbuf **bp) if ((r = sshsig_check_hashalg(hashalg)) != 0) return r; if ((alg = ssh_digest_alg_by_name(hashalg)) == -1) { - error("%s: can't look up hash algorithm %s", - __func__, hashalg); + error_f("can't look up hash algorithm %s", hashalg); return SSH_ERR_INTERNAL_ERROR; } if ((ctx = ssh_digest_start(alg)) == NULL) { - error("%s: ssh_digest_start failed", __func__); + error_f("ssh_digest_start failed"); return SSH_ERR_INTERNAL_ERROR; } for (;;) { @@ -516,28 +513,27 @@ hash_file(int fd, const char *hashalg, struct sshbuf **bp) if (errno == EINTR || errno == EAGAIN) continue; oerrno = errno; - error("%s: read: %s", __func__, strerror(errno)); + error_f("read: %s", strerror(errno)); ssh_digest_free(ctx); errno = oerrno; r = SSH_ERR_SYSTEM_ERROR; goto out; } else if (n == 0) { - debug2("%s: hashed %zu bytes", __func__, total); + debug2_f("hashed %zu bytes", total); break; /* EOF */ } total += (size_t)n; if ((r = ssh_digest_update(ctx, rbuf, (size_t)n)) != 0) { - error("%s: ssh_digest_update: %s", - __func__, ssh_err(r)); + error_fr(r, "ssh_digest_update"); goto out; } } if ((r = ssh_digest_final(ctx, hash, sizeof(hash))) != 0) { - error("%s: ssh_digest_final: %s", __func__, ssh_err(r)); + error_fr(r, "ssh_digest_final"); goto out; } if ((hex = tohex(hash, ssh_digest_bytes(alg))) != NULL) { - debug3("%s: final hash: %s", __func__, hex); + debug3_f("final hash: %s", hex); freezero(hex, strlen(hex)); } if ((b = sshbuf_new()) == NULL) { @@ -545,7 +541,7 @@ hash_file(int fd, const char *hashalg, struct sshbuf **bp) goto out; } if ((r = sshbuf_put(b, hash, ssh_digest_bytes(alg))) != 0) { - error("%s: sshbuf_put: %s", __func__, ssh_err(r)); + error_fr(r, "sshbuf_put"); goto out; } *bp = b; @@ -573,7 +569,7 @@ sshsig_sign_fd(struct sshkey *key, const char *hashalg, if (out != NULL) *out = NULL; if ((r = hash_file(fd, hashalg, &b)) != 0) { - error("%s: hash_file failed: %s", __func__, ssh_err(r)); + error_fr(r, "hash_file"); return r; } if ((r = sshsig_wrap_sign(key, hashalg, sk_provider, sk_pin, b, @@ -601,9 +597,9 @@ sshsig_verify_fd(struct sshbuf *signature, int fd, *sign_keyp = NULL; if ((r = sshsig_peek_hashalg(signature, &hashalg)) != 0) return r; - debug("%s: signature made with hash \"%s\"", __func__, hashalg); + debug_f("signature made with hash \"%s\"", hashalg); if ((r = hash_file(fd, hashalg, &b)) != 0) { - error("%s: hash_file failed: %s", __func__, ssh_err(r)); + error_fr(r, "hash_file"); goto out; } if ((r = sshsig_wrap_verify(signature, hashalg, b, expect_namespace, @@ -713,7 +709,7 @@ parse_principals_key_and_options(const char *path, u_long linenum, char *line, goto out; } if ((principals = strdup(tmp)) == NULL) { - error("%s: strdup failed", __func__); + error_f("strdup failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } @@ -728,12 +724,12 @@ parse_principals_key_and_options(const char *path, u_long linenum, char *line, r = SSH_ERR_KEY_NOT_FOUND; goto out; } - debug("%s: %s:%lu: matched principal \"%s\"", - __func__, path, linenum, required_principal); + debug_f("%s:%lu: matched principal \"%s\"", + path, linenum, required_principal); } if ((key = sshkey_new(KEY_UNSPEC)) == NULL) { - error("%s: sshkey_new failed", __func__); + error_f("sshkey_new failed"); r = SSH_ERR_ALLOC_FAIL; goto out; } @@ -904,7 +900,7 @@ cert_filter_principals(const char *path, u_long linenum, } if ((r = sshbuf_putf(nprincipals, "%s%s", sshbuf_len(nprincipals) != 0 ? "," : "", cp)) != 0) { - error("%s: buffer error", __func__); + error_f("buffer error"); goto out; } } @@ -914,7 +910,7 @@ cert_filter_principals(const char *path, u_long linenum, goto out; } if ((principals = sshbuf_dup_string(nprincipals)) == NULL) { - error("%s: buffer error", __func__); + error_f("buffer error"); goto out; } /* success */ @@ -956,8 +952,8 @@ get_matching_principals_from_line(const char *path, u_long linenum, char *line, if ((r = cert_filter_principals(path, linenum, &principals, sign_key)) != 0) { /* error already displayed */ - debug("%s:%lu: cert_filter_principals: %s", - path, linenum, ssh_err(r)); + debug_r(r, "%s:%lu: cert_filter_principals", + path, linenum); goto done; } debug("%s:%lu: matched certificate CA key", path, linenum); diff --git a/ttymodes.c b/ttymodes.c index f0c2a5d37d37..172ab99f47d4 100644 --- a/ttymodes.c +++ b/ttymodes.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ttymodes.c,v 1.34 2018/07/09 21:20:26 markus Exp $ */ +/* $OpenBSD: ttymodes.c,v 1.35 2020/10/18 11:32:02 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -283,11 +283,11 @@ ssh_tty_make_modes(struct ssh *ssh, int fd, struct termios *tiop) int r, ibaud, obaud; if ((buf = sshbuf_new()) == NULL) - fatal("%s: sshbuf_new failed", __func__); + fatal_f("sshbuf_new failed"); if (tiop == NULL) { if (fd == -1) { - debug("%s: no fd or tio", __func__); + debug_f("no fd or tio"); goto end; } if (tcgetattr(fd, &tio) == -1) { @@ -304,23 +304,23 @@ ssh_tty_make_modes(struct ssh *ssh, int fd, struct termios *tiop) (r = sshbuf_put_u32(buf, obaud)) != 0 || (r = sshbuf_put_u8(buf, TTY_OP_ISPEED)) != 0 || (r = sshbuf_put_u32(buf, ibaud)) != 0) - fatal("%s: buffer error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose"); /* Store values of mode flags. */ #define TTYCHAR(NAME, OP) \ if ((r = sshbuf_put_u8(buf, OP)) != 0 || \ (r = sshbuf_put_u32(buf, \ special_char_encode(tio.c_cc[NAME]))) != 0) \ - fatal("%s: buffer error: %s", __func__, ssh_err(r)); \ + fatal_fr(r, "compose %s", #NAME); #define SSH_TTYMODE_IUTF8 42 /* for SSH_BUG_UTF8TTYMODE */ #define TTYMODE(NAME, FIELD, OP) \ if (OP == SSH_TTYMODE_IUTF8 && (datafellows & SSH_BUG_UTF8TTYMODE)) { \ - debug3("%s: SSH_BUG_UTF8TTYMODE", __func__); \ + debug3_f("SSH_BUG_UTF8TTYMODE"); \ } else if ((r = sshbuf_put_u8(buf, OP)) != 0 || \ (r = sshbuf_put_u32(buf, ((tio.FIELD & NAME) != 0))) != 0) \ - fatal("%s: buffer error: %s", __func__, ssh_err(r)); \ + fatal_fr(r, "compose %s", #NAME); #include "ttymodes.h" @@ -331,7 +331,7 @@ ssh_tty_make_modes(struct ssh *ssh, int fd, struct termios *tiop) /* Mark end of mode data. */ if ((r = sshbuf_put_u8(buf, TTY_OP_END)) != 0 || (r = sshpkt_put_stringb(ssh, buf)) != 0) - fatal("%s: packet error: %s", __func__, ssh_err(r)); + fatal_fr(r, "compose end"); sshbuf_free(buf); } @@ -351,11 +351,11 @@ ssh_tty_parse_modes(struct ssh *ssh, int fd) size_t len; if ((r = sshpkt_get_string_direct(ssh, &data, &len)) != 0) - fatal("%s: packet error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse"); if (len == 0) return; if ((buf = sshbuf_from(data, len)) == NULL) { - error("%s: sshbuf_from failed", __func__); + error_f("sshbuf_from failed"); return; } @@ -371,15 +371,14 @@ ssh_tty_parse_modes(struct ssh *ssh, int fd) while (sshbuf_len(buf) > 0) { if ((r = sshbuf_get_u8(buf, &opcode)) != 0) - fatal("%s: packet error: %s", __func__, ssh_err(r)); + fatal_fr(r, "parse opcode"); switch (opcode) { case TTY_OP_END: goto set; case TTY_OP_ISPEED: if ((r = sshbuf_get_u32(buf, &baud)) != 0) - fatal("%s: packet error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse ispeed"); if (failure != -1 && cfsetispeed(&tio, baud_to_speed(baud)) == -1) error("cfsetispeed failed for %d", baud); @@ -387,8 +386,7 @@ ssh_tty_parse_modes(struct ssh *ssh, int fd) case TTY_OP_OSPEED: if ((r = sshbuf_get_u32(buf, &baud)) != 0) - fatal("%s: packet error: %s", - __func__, ssh_err(r)); + fatal_fr(r, "parse ospeed"); if (failure != -1 && cfsetospeed(&tio, baud_to_speed(baud)) == -1) error("cfsetospeed failed for %d", baud); @@ -397,15 +395,13 @@ ssh_tty_parse_modes(struct ssh *ssh, int fd) #define TTYCHAR(NAME, OP) \ case OP: \ if ((r = sshbuf_get_u32(buf, &u)) != 0) \ - fatal("%s: packet error: %s", __func__, \ - ssh_err(r)); \ + fatal_fr(r, "parse %s", #NAME); \ tio.c_cc[NAME] = special_char_decode(u); \ break; #define TTYMODE(NAME, FIELD, OP) \ case OP: \ if ((r = sshbuf_get_u32(buf, &u)) != 0) \ - fatal("%s: packet error: %s", __func__, \ - ssh_err(r)); \ + fatal_fr(r, "parse %s", #NAME); \ if (u) \ tio.FIELD |= NAME; \ else \ @@ -429,12 +425,10 @@ ssh_tty_parse_modes(struct ssh *ssh, int fd) */ if (opcode > 0 && opcode < 160) { if ((r = sshbuf_get_u32(buf, NULL)) != 0) - fatal("%s: packet error: %s", __func__, - ssh_err(r)); + fatal_fr(r, "parse arg"); break; } else { - logit("%s: unknown opcode %d", __func__, - opcode); + logit_f("unknown opcode %d", opcode); goto set; } } @@ -444,7 +438,7 @@ ssh_tty_parse_modes(struct ssh *ssh, int fd) len = sshbuf_len(buf); sshbuf_free(buf); if (len > 0) { - logit("%s: %zu bytes left", __func__, len); + logit_f("%zu bytes left", len); return; /* Don't process bytes passed */ } if (failure == -1) From 7715a3b171049afa1feffb1d5a1245dfac36ce99 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 19 Oct 2020 10:54:41 +1100 Subject: [PATCH 0053/1788] Use fatal_fr not fatal_r when passing r. Caught by the PAM -Werror tinderbox build. --- monitor_wrap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monitor_wrap.c b/monitor_wrap.c index 8cfd4b413cab..5f40cc82efe6 100644 --- a/monitor_wrap.c +++ b/monitor_wrap.c @@ -415,7 +415,7 @@ mm_auth_password(struct ssh *ssh, char *password) if ((r = sshbuf_get_u32(m, &maxtries)) != 0) fatal_fr(r, "parse PAM"); if (maxtries > INT_MAX) - fatal_f(r, "bad maxtries"); + fatal_fr(r, "bad maxtries"); sshpam_set_maxtries_reached(maxtries); #endif From f7bd11e4941620991f3e727cd0131b01f0311a58 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Mon, 19 Oct 2020 08:07:08 +0000 Subject: [PATCH 0054/1788] upstream: fix SEGV on fatal() errors spotted by dtucker@ OpenBSD-Commit-ID: 75f155a1ac61e364ed00dc379e2c42df81067ce2 --- fatal.c | 4 ++-- ssh-keyscan.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fatal.c b/fatal.c index da5bf906986a..16fbd320467a 100644 --- a/fatal.c +++ b/fatal.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fatal.c,v 1.10 2020/10/18 11:21:59 djm Exp $ */ +/* $OpenBSD: fatal.c,v 1.11 2020/10/19 08:07:08 djm Exp $ */ /* * Copyright (c) 2002 Markus Friedl. All rights reserved. * @@ -40,7 +40,7 @@ sshfatal(const char *file, const char *func, int line, int showfunc, va_list args; va_start(args, fmt); - sshlog(file, func, line, showfunc, level, suffix, fmt, args); + sshlogv(file, func, line, showfunc, level, suffix, fmt, args); va_end(args); cleanup_exit(255); } diff --git a/ssh-keyscan.c b/ssh-keyscan.c index 3f6bedda8b60..e01b6dd4d113 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.136 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.137 2020/10/19 08:07:08 djm Exp $ */ /* * Copyright 1995, 1996 by David Mazieres . * @@ -641,7 +641,7 @@ sshfatal(const char *file, const char *func, int line, int showfunc, va_list args; va_start(args, fmt); - sshlog(file, func, line, showfunc, level, suffix, fmt, args); + sshlogv(file, func, line, showfunc, level, suffix, fmt, args); va_end(args); cleanup_exit(255); } From eab2888cfc6cc4e2ef24bd017da9835a0f365f3f Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 19 Oct 2020 22:49:23 +0000 Subject: [PATCH 0055/1788] upstream: Adapt XMSS to new logging infrastructure. With markus@, ok djm@. OpenBSD-Commit-ID: 9c35ec3aa0f710e4e3325187ceff4fa3791686de --- authfd.c | 4 ++-- ssh-xmss.c | 6 +++--- sshkey-xmss.c | 18 ++++++++++-------- sshkey-xmss.h | 6 +++--- sshkey.c | 10 +++++----- sshkey.h | 13 ++++--------- 6 files changed, 27 insertions(+), 30 deletions(-) diff --git a/authfd.c b/authfd.c index 8288ef215e46..ae4eafb78c01 100644 --- a/authfd.c +++ b/authfd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: authfd.c,v 1.124 2020/06/26 05:03:36 djm Exp $ */ +/* $OpenBSD: authfd.c,v 1.125 2020/10/19 22:49:23 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -507,7 +507,7 @@ ssh_add_identity_constrained(int sock, struct sshkey *key, SSH2_AGENTC_ADD_IDENTITY; if ((r = sshbuf_put_u8(msg, type)) != 0 || (r = sshkey_private_serialize_maxsign(key, msg, maxsign, - NULL)) != 0 || + 0)) != 0 || (r = sshbuf_put_cstring(msg, comment)) != 0) goto out; break; diff --git a/ssh-xmss.c b/ssh-xmss.c index 07351034f074..7bd3a96a3bf5 100644 --- a/ssh-xmss.c +++ b/ssh-xmss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-xmss.c,v 1.3 2020/10/18 11:32:02 djm Exp $*/ +/* $OpenBSD: ssh-xmss.c,v 1.4 2020/10/19 22:49:23 dtucker Exp $*/ /* * Copyright (c) 2017 Stefan-Lukas Gazdag. * Copyright (c) 2017 Markus Friedl. @@ -62,7 +62,7 @@ ssh_xmss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp, smlen = slen = datalen + required_siglen; if ((sig = malloc(slen)) == NULL) return SSH_ERR_ALLOC_FAIL; - if ((r = sshkey_xmss_get_state(key, error)) != 0) + if ((r = sshkey_xmss_get_state(key, 1)) != 0) goto out; if ((ret = xmss_sign(key->xmss_sk, sshkey_xmss_bds_state(key), sig, &smlen, data, datalen, sshkey_xmss_params(key))) != 0 || smlen <= datalen) { @@ -90,7 +90,7 @@ ssh_xmss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp, /* success */ r = 0; out: - if ((ret = sshkey_xmss_update_state(key, error)) != 0) { + if ((ret = sshkey_xmss_update_state(key, 1)) != 0) { /* discard signature since we cannot update the state */ if (r == 0 && sigp != NULL && *sigp != NULL) { explicit_bzero(*sigp, len); diff --git a/sshkey-xmss.c b/sshkey-xmss.c index 88e9ddf4de7d..c81c689634e7 100644 --- a/sshkey-xmss.c +++ b/sshkey-xmss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey-xmss.c,v 1.8 2019/11/13 07:53:10 markus Exp $ */ +/* $OpenBSD: sshkey-xmss.c,v 1.9 2020/10/19 22:49:23 dtucker Exp $ */ /* * Copyright (c) 2017 Markus Friedl. All rights reserved. * @@ -45,6 +45,7 @@ #include "sshkey.h" #include "sshkey-xmss.h" #include "atomicio.h" +#include "log.h" #include "xmss_fast.h" @@ -79,7 +80,7 @@ int sshkey_xmss_init_bds_state(struct sshkey *); int sshkey_xmss_init_enc_key(struct sshkey *, const char *); void sshkey_xmss_free_bds(struct sshkey *); int sshkey_xmss_get_state_from_file(struct sshkey *, const char *, - int *, sshkey_printfn *); + int *, int); int sshkey_xmss_encrypt_state(const struct sshkey *, struct sshbuf *, struct sshbuf **); int sshkey_xmss_decrypt_state(const struct sshkey *, struct sshbuf *, @@ -87,7 +88,8 @@ int sshkey_xmss_decrypt_state(const struct sshkey *, struct sshbuf *, int sshkey_xmss_serialize_enc_key(const struct sshkey *, struct sshbuf *); int sshkey_xmss_deserialize_enc_key(struct sshkey *, struct sshbuf *); -#define PRINT(s...) do { if (pr) pr(s); } while (0) +#define PRINT(...) do { if (printerror) sshlog(__FILE__, __func__, __LINE__, \ + 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__); } while (0) int sshkey_xmss_init(struct sshkey *key, const char *name) @@ -392,7 +394,7 @@ sshkey_xmss_generate_private_key(struct sshkey *k, u_int bits) int sshkey_xmss_get_state_from_file(struct sshkey *k, const char *filename, - int *have_file, sshkey_printfn *pr) + int *have_file, int printerror) { struct sshbuf *b = NULL, *enc = NULL; int ret = SSH_ERR_SYSTEM_ERROR, r, fd = -1; @@ -440,7 +442,7 @@ sshkey_xmss_get_state_from_file(struct sshkey *k, const char *filename, } int -sshkey_xmss_get_state(const struct sshkey *k, sshkey_printfn *pr) +sshkey_xmss_get_state(const struct sshkey *k, int printerror) { struct ssh_xmss_state *state = k->xmss_state; u_int32_t idx = 0; @@ -493,9 +495,9 @@ sshkey_xmss_get_state(const struct sshkey *k, sshkey_printfn *pr) } /* XXX no longer const */ if ((r = sshkey_xmss_get_state_from_file((struct sshkey *)k, - statefile, &have_state, pr)) != 0) { + statefile, &have_state, printerror)) != 0) { if ((r = sshkey_xmss_get_state_from_file((struct sshkey *)k, - ostatefile, &have_ostate, pr)) == 0) { + ostatefile, &have_ostate, printerror)) == 0) { state->allow_update = 1; r = sshkey_xmss_forward_state(k, 1); state->idx = PEEK_U32(k->xmss_sk); @@ -563,7 +565,7 @@ sshkey_xmss_forward_state(const struct sshkey *k, u_int32_t reserve) } int -sshkey_xmss_update_state(const struct sshkey *k, sshkey_printfn *pr) +sshkey_xmss_update_state(const struct sshkey *k, int printerror) { struct ssh_xmss_state *state = k->xmss_state; struct sshbuf *b = NULL, *enc = NULL; diff --git a/sshkey-xmss.h b/sshkey-xmss.h index b9f8ead1047f..bf52d293c3a4 100644 --- a/sshkey-xmss.h +++ b/sshkey-xmss.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey-xmss.h,v 1.1 2018/02/23 15:58:38 markus Exp $ */ +/* $OpenBSD: sshkey-xmss.h,v 1.2 2020/10/19 22:49:23 dtucker Exp $ */ /* * Copyright (c) 2017 Markus Friedl. All rights reserved. * @@ -47,10 +47,10 @@ int sshkey_xmss_deserialize_pk_info(struct sshkey *, struct sshbuf *); int sshkey_xmss_siglen(const struct sshkey *, size_t *); void *sshkey_xmss_params(const struct sshkey *); void *sshkey_xmss_bds_state(const struct sshkey *); -int sshkey_xmss_get_state(const struct sshkey *, sshkey_printfn *); +int sshkey_xmss_get_state(const struct sshkey *, int); int sshkey_xmss_enable_maxsign(struct sshkey *, u_int32_t); int sshkey_xmss_forward_state(const struct sshkey *, u_int32_t); -int sshkey_xmss_update_state(const struct sshkey *, sshkey_printfn *); +int sshkey_xmss_update_state(const struct sshkey *, int); u_int32_t sshkey_xmss_signatures_left(const struct sshkey *); #endif /* SSHKEY_XMSS_H */ diff --git a/sshkey.c b/sshkey.c index ac451f1a84c2..938fa0d7ceec 100644 --- a/sshkey.c +++ b/sshkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.c,v 1.111 2020/08/27 01:06:19 djm Exp $ */ +/* $OpenBSD: sshkey.c,v 1.112 2020/10/19 22:49:23 dtucker Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * Copyright (c) 2008 Alexander von Gernler. All rights reserved. @@ -4700,7 +4700,7 @@ sshkey_parse_pubkey_from_private_fileblob_type(struct sshbuf *blob, int type, */ int sshkey_private_serialize_maxsign(struct sshkey *k, struct sshbuf *b, - u_int32_t maxsign, sshkey_printfn *pr) + u_int32_t maxsign, int printerror) { int r, rupdate; @@ -4708,14 +4708,14 @@ sshkey_private_serialize_maxsign(struct sshkey *k, struct sshbuf *b, sshkey_type_plain(k->type) != KEY_XMSS) return sshkey_private_serialize_opt(k, b, SSHKEY_SERIALIZE_DEFAULT); - if ((r = sshkey_xmss_get_state(k, pr)) != 0 || + if ((r = sshkey_xmss_get_state(k, printerror)) != 0 || (r = sshkey_private_serialize_opt(k, b, SSHKEY_SERIALIZE_STATE)) != 0 || (r = sshkey_xmss_forward_state(k, maxsign)) != 0) goto out; r = 0; out: - if ((rupdate = sshkey_xmss_update_state(k, pr)) != 0) { + if ((rupdate = sshkey_xmss_update_state(k, printerror)) != 0) { if (r == 0) r = rupdate; } @@ -4754,7 +4754,7 @@ sshkey_set_filename(struct sshkey *k, const char *filename) #else int sshkey_private_serialize_maxsign(struct sshkey *k, struct sshbuf *b, - u_int32_t maxsign, sshkey_printfn *pr) + u_int32_t maxsign, int printerror) { return sshkey_private_serialize_opt(k, b, SSHKEY_SERIALIZE_DEFAULT); } diff --git a/sshkey.h b/sshkey.h index 2d8b6249708c..6d162264b369 100644 --- a/sshkey.h +++ b/sshkey.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.h,v 1.46 2020/08/27 01:06:19 djm Exp $ */ +/* $OpenBSD: sshkey.h,v 1.47 2020/10/19 22:49:23 dtucker Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. @@ -267,17 +267,12 @@ int sshkey_parse_pubkey_from_private_fileblob_type(struct sshbuf *blob, int ssh_rsa_complete_crt_parameters(struct sshkey *, const BIGNUM *); /* stateful keys (e.g. XMSS) */ -#ifdef NO_ATTRIBUTE_ON_PROTOTYPE_ARGS -typedef void sshkey_printfn(const char *, ...); -#else -typedef void sshkey_printfn(const char *, ...) __attribute__((format(printf, 1, 2))); -#endif int sshkey_set_filename(struct sshkey *, const char *); int sshkey_enable_maxsign(struct sshkey *, u_int32_t); u_int32_t sshkey_signatures_left(const struct sshkey *); -int sshkey_forward_state(const struct sshkey *, u_int32_t, sshkey_printfn *); -int sshkey_private_serialize_maxsign(struct sshkey *key, struct sshbuf *buf, - u_int32_t maxsign, sshkey_printfn *pr); +int sshkey_forward_state(const struct sshkey *, u_int32_t, int); +int sshkey_private_serialize_maxsign(struct sshkey *key, + struct sshbuf *buf, u_int32_t maxsign, int); void sshkey_sig_details_free(struct sshkey_sig_details *); From 492d70e18bad5a8c97d05f5eddac817171e88d2c Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 26 Oct 2020 00:39:04 +0000 Subject: [PATCH 0056/1788] upstream: Minor man page fixes (capitalization, commas) identified by the manpage-l10n project via bz#3223. feedback deraadt@, ok jmc@ OpenBSD-Commit-ID: ab83af0daf18369244a72daaec6c4a58a9eb7e2c --- ssh-keygen.1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ssh-keygen.1 b/ssh-keygen.1 index 3ae596caac82..96957acf5636 100644 --- a/ssh-keygen.1 +++ b/ssh-keygen.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: ssh-keygen.1,v 1.209 2020/09/09 03:08:01 djm Exp $ +.\" $OpenBSD: ssh-keygen.1,v 1.210 2020/10/26 00:39:04 dtucker Exp $ .\" .\" Author: Tatu Ylonen .\" Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -35,7 +35,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: September 9 2020 $ +.Dd $Mdocdate: October 26 2020 $ .Dt SSH-KEYGEN 1 .Os .Sh NAME @@ -634,7 +634,7 @@ For example: .Dq 20100101123000:20110101123000 (valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011), .Dq -1d:20110101 -(valid from yesterday to midnight, January 1st, 2011). +(valid from yesterday to midnight, January 1st, 2011), .Dq -1m:forever (valid from one minute ago and never expiring). .It Fl v @@ -1003,7 +1003,7 @@ The option allows specification of certificate start and end times. A certificate that is presented at a time outside this range will not be considered valid. -By default, certificates are valid from +By default, certificates are valid from the .Ux Epoch to the distant future. .Pp @@ -1107,7 +1107,7 @@ Empty lines and lines starting with a .Ql # are ignored as comments. .Pp -The principals field is a pattern-list (See PATTERNS in +The principals field is a pattern-list (see PATTERNS in .Xr ssh_config 5 ) consisting of one or more comma-separated USER@DOMAIN identity patterns that are accepted for signing. From 33267feaffd5d98aa56d2f0b3a99ec352effe938 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 27 Oct 2020 16:46:31 +1100 Subject: [PATCH 0057/1788] Remove checks for strict POSIX mkdtemp() We needed a mkdtemp() that accepted template paths that did not end in XXXXXX a long time ago for KRB4, but that code is long deprecated. We no longer need to replace mkdtemp() for strictly following POSIX. ok dtucker@ --- configure.ac | 28 ---------------------------- openbsd-compat/mktemp.c | 4 ++-- openbsd-compat/openbsd-compat.h | 2 +- 3 files changed, 3 insertions(+), 31 deletions(-) diff --git a/configure.ac b/configure.ac index 05f7b713b5fa..d2d19a79c34f 100644 --- a/configure.ac +++ b/configure.ac @@ -2288,34 +2288,6 @@ if test "x$ac_cv_func_getpeereid" != "xyes" -a "x$ac_cv_func_getpeerucred" != "x ]) fi -dnl see whether mkstemp() requires XXXXXX -if test "x$ac_cv_func_mkdtemp" = "xyes" ; then -AC_MSG_CHECKING([for (overly) strict mkstemp]) -AC_RUN_IFELSE( - [AC_LANG_PROGRAM([[ -#include -#include - ]], [[ - char template[]="conftest.mkstemp-test"; - if (mkstemp(template) == -1) - exit(1); - unlink(template); - exit(0); - ]])], - [ - AC_MSG_RESULT([no]) - ], - [ - AC_MSG_RESULT([yes]) - AC_DEFINE([HAVE_STRICT_MKSTEMP], [1], [Silly mkstemp()]) - ], - [ - AC_MSG_RESULT([yes]) - AC_DEFINE([HAVE_STRICT_MKSTEMP]) - ] -) -fi - dnl make sure that openpty does not reacquire controlling terminal if test ! -z "$check_for_openpty_ctty_bug"; then AC_MSG_CHECKING([if openpty correctly handles controlling tty]) diff --git a/openbsd-compat/mktemp.c b/openbsd-compat/mktemp.c index 4eb52f421b72..ac922c1ecbe5 100644 --- a/openbsd-compat/mktemp.c +++ b/openbsd-compat/mktemp.c @@ -34,7 +34,7 @@ #include #include -#if !defined(HAVE_MKDTEMP) || defined(HAVE_STRICT_MKSTEMP) +#if !defined(HAVE_MKDTEMP) #define MKTEMP_NAME 0 #define MKTEMP_FILE 1 @@ -138,4 +138,4 @@ mkdtemp(char *path) return(error ? NULL : path); } -#endif /* !defined(HAVE_MKDTEMP) || defined(HAVE_STRICT_MKSTEMP) */ +#endif /* !defined(HAVE_MKDTEMP) */ diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h index e5fd6f5bbaf3..50bac587d960 100644 --- a/openbsd-compat/openbsd-compat.h +++ b/openbsd-compat/openbsd-compat.h @@ -122,7 +122,7 @@ void strmode(int mode, char *p); char *strptime(const char *buf, const char *fmt, struct tm *tm); #endif -#if !defined(HAVE_MKDTEMP) || defined(HAVE_STRICT_MKSTEMP) +#if !defined(HAVE_MKDTEMP) int mkstemps(char *path, int slen); int mkstemp(char *path); char *mkdtemp(char *path); From a575cf44e59a65506c67bddb62a712208a7a279c Mon Sep 17 00:00:00 2001 From: Duncan Eastoe Date: Wed, 21 Oct 2020 10:11:10 +0100 Subject: [PATCH 0058/1788] session.c: use "denylist" terminology Follow upstream (6d755706a0059eb9e2d63517f288b75cbc3b4701) language improvements in this portable-specific code. --- session.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/session.c b/session.c index 97f19a4dc7b0..b25cbca69d12 100644 --- a/session.c +++ b/session.c @@ -944,8 +944,8 @@ read_etc_default_login(char ***env, u_int *envsize, uid_t uid) #if defined(USE_PAM) || defined(HAVE_CYGWIN) static void -copy_environment_blacklist(char **source, char ***env, u_int *envsize, - const char *blacklist) +copy_environment_denylist(char **source, char ***env, u_int *envsize, + const char *denylist) { char *var_name, *var_val; int i; @@ -961,8 +961,8 @@ copy_environment_blacklist(char **source, char ***env, u_int *envsize, } *var_val++ = '\0'; - if (blacklist == NULL || - match_pattern_list(var_name, blacklist, 0) != 1) { + if (denylist == NULL || + match_pattern_list(var_name, denylist, 0) != 1) { debug3("Copy environment: %s=%s", var_name, var_val); child_set_env(env, envsize, var_name, var_val); } @@ -976,7 +976,7 @@ copy_environment_blacklist(char **source, char ***env, u_int *envsize, static void copy_environment(char **source, char ***env, u_int *envsize) { - copy_environment_blacklist(source, env, envsize, NULL); + copy_environment_denylist(source, env, envsize, NULL); } #endif @@ -1138,15 +1138,15 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell) * Don't allow PAM-internal env vars to leak * back into the session environment. */ -#define PAM_ENV_BLACKLIST "SSH_AUTH_INFO*,SSH_CONNECTION*" +#define PAM_ENV_DENYLIST "SSH_AUTH_INFO*,SSH_CONNECTION*" p = fetch_pam_child_environment(); - copy_environment_blacklist(p, &env, &envsize, - PAM_ENV_BLACKLIST); + copy_environment_denylist(p, &env, &envsize, + PAM_ENV_DENYLIST); free_pam_environment(p); p = fetch_pam_environment(); - copy_environment_blacklist(p, &env, &envsize, - PAM_ENV_BLACKLIST); + copy_environment_denylist(p, &env, &envsize, + PAM_ENV_DENYLIST); free_pam_environment(p); } #endif /* USE_PAM */ From 815209abfdd2991fb92ad7d2e33374916cdcbcf4 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 29 Oct 2020 02:47:23 +0000 Subject: [PATCH 0059/1788] upstream: UpdateHostkeys: fixed/better detection of host keys that exist under other names and addresses; spotted by and debugged with lots of help from jca@ OpenBSD-Commit-ID: 5113d7f550bbd48243db1705afbf16b63792d4b7 --- clientloop.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/clientloop.c b/clientloop.c index f9b18fe0bc7f..c49eed3980af 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.354 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.355 2020/10/29 02:47:23 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1892,13 +1892,20 @@ hostkeys_find(struct hostkey_foreach_line *l, void *_ctx) return 0; } - /* Record if address matched against a different hostname. */ - if (ctx->ip_str != NULL && (l->match & HKF_MATCH_HOST) == 0 && - strchr(l->hosts, ',') != NULL) { - ctx->other_name_seen = 1; - debug3_f("found address %s against different hostname at " - "%s:%ld", ctx->ip_str, l->path, l->linenum); - return 0; + /* If CheckHostIP is enabled, then check for mismatched hostname/addr */ + if (ctx->ip_str != NULL && strchr(l->hosts, ',') != NULL) { + if ((l->match & HKF_MATCH_HOST) == 0) { + /* Record if address matched a different hostname. */ + ctx->other_name_seen = 1; + debug3_f("found address %s against different hostname " + "at %s:%ld", ctx->ip_str, l->path, l->linenum); + return 0; + } else if ((l->match & HKF_MATCH_IP) == 0) { + /* Record if hostname matched a different address. */ + ctx->other_name_seen = 1; + debug3_f("found hostname %s against different address " + "at %s:%ld", ctx->host_str, l->path, l->linenum); + } } /* @@ -2291,7 +2298,7 @@ client_input_hostkeys(struct ssh *ssh) ctx->ip_str ? ctx->ip_str : "(none)"); if ((r = hostkeys_foreach(options.user_hostfiles[i], hostkeys_find, ctx, ctx->host_str, ctx->ip_str, - HKF_WANT_PARSE_KEY|HKF_WANT_MATCH)) != 0) { + HKF_WANT_PARSE_KEY)) != 0) { if (r == SSH_ERR_SYSTEM_ERROR && errno == ENOENT) { debug_f("hostkeys file %s does not exist", options.user_hostfiles[i]); From 1a14c13147618144d1798c36a588397ba9008fcc Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 29 Oct 2020 02:52:43 +0000 Subject: [PATCH 0060/1788] upstream: whitespace; no code change OpenBSD-Commit-ID: efefc1c47e880887bdee8cd2127ca93177eaad79 --- authfd.c | 4 ++-- digest-openssl.c | 10 +++++----- mux.c | 6 +++--- sftp.c | 4 ++-- ssh-keygen.c | 4 ++-- sshconnect2.c | 6 +++--- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/authfd.c b/authfd.c index ae4eafb78c01..189ebb39345f 100644 --- a/authfd.c +++ b/authfd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: authfd.c,v 1.125 2020/10/19 22:49:23 dtucker Exp $ */ +/* $OpenBSD: authfd.c,v 1.126 2020/10/29 02:52:43 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -62,7 +62,7 @@ #include "ssherr.h" #define MAX_AGENT_IDENTITIES 2048 /* Max keys in agent reply */ -#define MAX_AGENT_REPLY_LEN (256 * 1024) /* Max bytes in agent reply */ +#define MAX_AGENT_REPLY_LEN (256 * 1024) /* Max bytes in agent reply */ /* macro to check for "agent failure" message */ #define agent_failed(x) \ diff --git a/digest-openssl.c b/digest-openssl.c index dbbea4251854..e073a807b148 100644 --- a/digest-openssl.c +++ b/digest-openssl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: digest-openssl.c,v 1.7 2017/05/08 22:57:38 djm Exp $ */ +/* $OpenBSD: digest-openssl.c,v 1.9 2020/10/29 02:52:43 djm Exp $ */ /* * Copyright (c) 2013 Damien Miller * @@ -56,11 +56,11 @@ struct ssh_digest { /* NB. Indexed directly by algorithm number */ const struct ssh_digest digests[] = { - { SSH_DIGEST_MD5, "MD5", 16, EVP_md5 }, - { SSH_DIGEST_SHA1, "SHA1", 20, EVP_sha1 }, - { SSH_DIGEST_SHA256, "SHA256", 32, EVP_sha256 }, + { SSH_DIGEST_MD5, "MD5", 16, EVP_md5 }, + { SSH_DIGEST_SHA1, "SHA1", 20, EVP_sha1 }, + { SSH_DIGEST_SHA256, "SHA256", 32, EVP_sha256 }, { SSH_DIGEST_SHA384, "SHA384", 48, EVP_sha384 }, - { SSH_DIGEST_SHA512, "SHA512", 64, EVP_sha512 }, + { SSH_DIGEST_SHA512, "SHA512", 64, EVP_sha512 }, { -1, NULL, 0, NULL }, }; diff --git a/mux.c b/mux.c index 24b3d6a02201..d0f066a77d62 100644 --- a/mux.c +++ b/mux.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mux.c,v 1.85 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: mux.c,v 1.86 2020/10/29 02:52:43 djm Exp $ */ /* * Copyright (c) 2002-2008 Damien Miller * @@ -472,7 +472,7 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid, CHAN_EXTENDED_WRITE, "client-session", /*nonblock*/0); nc->ctl_chan = c->self; /* link session -> control channel */ - c->remote_id = nc->self; /* link control -> session channel */ + c->remote_id = nc->self; /* link control -> session channel */ c->have_remote_id = 1; if (cctx->want_tty && escape_char != 0xffffffff) { @@ -1035,7 +1035,7 @@ mux_master_process_stdio_fwd(struct ssh *ssh, u_int rid, free(chost); nc->ctl_chan = c->self; /* link session -> control channel */ - c->remote_id = nc->self; /* link control -> session channel */ + c->remote_id = nc->self; /* link control -> session channel */ c->have_remote_id = 1; debug2_f("channel_new: %d control %d", nc->self, nc->ctl_chan); diff --git a/sftp.c b/sftp.c index e522844dea7f..b641be2bc4c7 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.203 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.204 2020/10/29 02:52:43 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -1172,7 +1172,7 @@ undo_glob_escape(char *s) * last argument's quote has been properly terminated or 0 otherwise. * This parameter is only of use if "sloppy" is set. */ -#define MAXARGS 128 +#define MAXARGS 128 #define MAXARGLEN 8192 static char ** makeargv(const char *arg, int *argcp, int sloppy, char *lastquote, diff --git a/ssh-keygen.c b/ssh-keygen.c index acac61742cca..1603206206a8 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.421 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.422 2020/10/29 02:52:43 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -3101,7 +3101,7 @@ usage(void) " ssh-keygen -Y check-novalidate -n namespace -s signature_file\n" " ssh-keygen -Y sign -f key_file -n namespace file ...\n" " ssh-keygen -Y verify -f allowed_signers_file -I signer_identity\n" - " -n namespace -s signature_file [-r revocation_file]\n"); + " -n namespace -s signature_file [-r revocation_file]\n"); exit(1); } diff --git a/sshconnect2.c b/sshconnect2.c index ad81e18a4139..87986346e7bd 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.331 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.332 2020/10/29 02:52:43 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -1604,8 +1604,8 @@ key_type_allowed_by_config(struct sshkey *key) /* * try keys in the following order: - * 1. certificates listed in the config file - * 2. other input certificates + * 1. certificates listed in the config file + * 2. other input certificates * 3. agent keys that are found in the config file * 4. other agent keys * 5. keys that are only listed in the config file From b12b835dc022ba161afe68348e05a83dfbcb1515 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 29 Oct 2020 03:01:18 +0000 Subject: [PATCH 0061/1788] upstream: fix type of nid in type_bits_valid(); github PR#202 from github user thingsconnected OpenBSD-Commit-ID: 769d2b040dec7ab32d323daf54b854dd5dcb5485 --- ssh-keygen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ssh-keygen.c b/ssh-keygen.c index 1603206206a8..303faee31e1d 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.422 2020/10/29 02:52:43 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.423 2020/10/29 03:01:18 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -184,7 +184,7 @@ type_bits_valid(int type, const char *name, u_int32_t *bitsp) fatal("unknown key type %s", key_type_name); if (*bitsp == 0) { #ifdef WITH_OPENSSL - u_int nid; + int nid; switch(type) { case KEY_DSA: From 95d1109fec7e89ad21f2a97e92bde1305d32a353 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 29 Oct 2020 03:13:06 +0000 Subject: [PATCH 0062/1788] upstream: fix sshd_config SetEnv directive inside Match blocks; part of github PR#201 from github user manuelm OpenBSD-Commit-ID: 9772e3748abff3ad65ae8fc43d026ed569b1d2bc --- servconf.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/servconf.h b/servconf.h index 7005aea95501..a0efe20fce16 100644 --- a/servconf.h +++ b/servconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: servconf.h,v 1.147 2020/10/16 13:26:13 djm Exp $ */ +/* $OpenBSD: servconf.h,v 1.148 2020/10/29 03:13:06 djm Exp $ */ /* * Author: Tatu Ylonen @@ -279,6 +279,7 @@ TAILQ_HEAD(include_list, include_item); M_CP_STRARRAYOPT(allow_groups, num_allow_groups); \ M_CP_STRARRAYOPT(deny_groups, num_deny_groups); \ M_CP_STRARRAYOPT(accept_env, num_accept_env); \ + M_CP_STRARRAYOPT(setenv, num_setenv); \ M_CP_STRARRAYOPT(auth_methods, num_auth_methods); \ M_CP_STRARRAYOPT(permitted_opens, num_permitted_opens); \ M_CP_STRARRAYOPT(permitted_listens, num_permitted_listens); \ From 7d680448db5858dc76307663f78d0b8d3c2b4a3d Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 30 Oct 2020 01:50:07 +0000 Subject: [PATCH 0063/1788] upstream: print reason in fatal error message when kex_assemble_namelist() fails OpenBSD-Commit-ID: a9975ee8db6c98d6f32233d88051b2077ca63dab --- sshconnect2.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sshconnect2.c b/sshconnect2.c index 87986346e7bd..46469a3b6401 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.332 2020/10/29 02:52:43 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.333 2020/10/30 01:50:07 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -227,9 +227,9 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port) /* Expand or fill in HostkeyAlgorithms */ all_key = sshkey_alg_list(0, 0, 1, ','); - if (kex_assemble_names(&options.hostkeyalgorithms, - kex_default_pk_alg(), all_key) != 0) - fatal_f("kex_assemble_namelist"); + if ((r = kex_assemble_names(&options.hostkeyalgorithms, + kex_default_pk_alg(), all_key)) != 0) + fatal_fr(r, "kex_assemble_namelist"); free(all_key); if ((s = kex_names_cat(options.kex_algorithms, "ext-info-c")) == NULL) From 05bcd0cadf160fd4826a2284afa7cba6ec432633 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 3 Nov 2020 22:53:12 +0000 Subject: [PATCH 0064/1788] upstream: fold consecutive '*' wildcards to mitigate combinatorial explosion of recursive searches; ok dtucker OpenBSD-Commit-ID: d18bcb39c40fb8a1ab61153db987e7d11dd3792b --- match.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/match.c b/match.c index 927565c188c6..3ac854d38f00 100644 --- a/match.c +++ b/match.c @@ -1,4 +1,4 @@ -/* $OpenBSD: match.c,v 1.42 2020/07/05 23:59:45 djm Exp $ */ +/* $OpenBSD: match.c,v 1.43 2020/11/03 22:53:12 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -53,7 +53,6 @@ * Returns true if the given string matches the pattern (which may contain ? * and * as wildcards), and zero if it does not match. */ - int match_pattern(const char *s, const char *pattern) { @@ -63,8 +62,9 @@ match_pattern(const char *s, const char *pattern) return !*s; if (*pattern == '*') { - /* Skip the asterisk. */ - pattern++; + /* Skip this and any consecutive asterisks. */ + while (*pattern == '*') + pattern++; /* If at end of pattern, accept immediately. */ if (!*pattern) From e5591161f21ab493c6284a85ac3c0710ad94998f Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 6 Nov 2020 13:54:17 +1100 Subject: [PATCH 0065/1788] AC_CHECK_HEADER() is obsoleted in autoconf 2.70. Replace with the non-obsoleted AC_CHECK_HEADERS(). --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index d2d19a79c34f..40977a1d034d 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,7 @@ AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([ssh.c]) AC_LANG([C]) -AC_CONFIG_HEADER([config.h]) +AC_CONFIG_HEADERS([config.h]) AC_PROG_CC([cc gcc]) AC_CANONICAL_HOST AC_C_BIGENDIAN From 771b7795c0ef6a2fb43b4c6c66b615c2085cb9cd Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 6 Nov 2020 13:55:33 +1100 Subject: [PATCH 0066/1788] Move AC_PROG_CC_C99 to immediately afer AC_PROG_CC. This puts the related C version selection output in the same place. --- configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 40977a1d034d..d1dc651e3fc2 100644 --- a/configure.ac +++ b/configure.ac @@ -20,15 +20,15 @@ AC_LANG([C]) AC_CONFIG_HEADERS([config.h]) AC_PROG_CC([cc gcc]) -AC_CANONICAL_HOST -AC_C_BIGENDIAN AC_PROG_CC_C99 - # XXX relax this after reimplementing logit() etc. if test "x$ac_cv_prog_cc_c99" = "xno" ; then AC_MSG_ERROR([*** OpenSSH requires a C99 capable compiler ***]) fi +AC_CANONICAL_HOST +AC_C_BIGENDIAN + # Checks for programs. AC_PROG_AWK AC_PROG_CPP From a019e353df04de1b2ca78d91b39c393256044ad7 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 6 Nov 2020 13:56:41 +1100 Subject: [PATCH 0067/1788] Replace AC_TRY_COMPILE obsoleted in autoconf 2.70. Replace with the equivalent AC_COMPILE_IFELSE. --- m4/openssh.m4 | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/m4/openssh.m4 b/m4/openssh.m4 index 6a49f10fab7e..4f9c3792dc17 100644 --- a/m4/openssh.m4 +++ b/m4/openssh.m4 @@ -171,14 +171,15 @@ AC_DEFUN([TYPE_SOCKLEN_T], curl_cv_socklen_t_equiv= for arg2 in "struct sockaddr" void; do for t in int size_t unsigned long "unsigned long"; do - AC_TRY_COMPILE([ - #include - #include - - int getpeername (int, $arg2 *, $t *); - ],[ - $t len; - getpeername(0,0,&len); + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include + #include + int getpeername (int, $arg2 *, $t *); + ]], [[ + $t len; + getpeername(0,0,&len); + ]]) ],[ curl_cv_socklen_t_equiv="$t" break From 586f9bd2f5980e12f8cf0d3c2a761fa63175da52 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 6 Nov 2020 16:53:24 +1100 Subject: [PATCH 0068/1788] Remove AC_PROC_CC_C99 obsoleted in autoconf 2.70. Since we only use it to make sure we can handle variadic macros, explicitly check only for that. with & ok djm@ --- configure.ac | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index d1dc651e3fc2..07b080fdbd4f 100644 --- a/configure.ac +++ b/configure.ac @@ -20,11 +20,16 @@ AC_LANG([C]) AC_CONFIG_HEADERS([config.h]) AC_PROG_CC([cc gcc]) -AC_PROG_CC_C99 + # XXX relax this after reimplementing logit() etc. -if test "x$ac_cv_prog_cc_c99" = "xno" ; then - AC_MSG_ERROR([*** OpenSSH requires a C99 capable compiler ***]) -fi +AC_MSG_CHECKING([if $CC supports C99-style variadic macros]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +int f(int a, int b, int c) { return a + b + c; } +#define F(a, ...) f(a, __VA_ARGS__) +]], [[int main(void) { return F(1, 2, -3); }]])], + [ AC_MSG_RESULT([yes]) ], + [ AC_MSG_ERROR([*** OpenSSH requires support for C99-style variadic macros]) ] +) AC_CANONICAL_HOST AC_C_BIGENDIAN From 6d2564b94e51184eb0b73b97d13a36ad50b4f810 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 6 Nov 2020 17:11:16 +1100 Subject: [PATCH 0069/1788] Fix function body for variadic macro test. AC_LANG_PROGRAM puts its second argument inside main() so we don't need to do it ourselves. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 07b080fdbd4f..92f45a82aa52 100644 --- a/configure.ac +++ b/configure.ac @@ -26,7 +26,7 @@ AC_MSG_CHECKING([if $CC supports C99-style variadic macros]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ int f(int a, int b, int c) { return a + b + c; } #define F(a, ...) f(a, __VA_ARGS__) -]], [[int main(void) { return F(1, 2, -3); }]])], +]], [[return F(1, 2, -3);]])], [ AC_MSG_RESULT([yes]) ], [ AC_MSG_ERROR([*** OpenSSH requires support for C99-style variadic macros]) ] ) From 4d94b031ff88b015f0db57e140f481bff7ae1a91 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sun, 8 Nov 2020 11:46:12 +0000 Subject: [PATCH 0070/1788] upstream: Replace WITH_OPENSSL ifdefs in log calls with a macro. The log calls are themselves now macros, and preprocessor directives inside macro arguments are undefined behaviour which some compilers (eg old GCCs) choke on. It also makes the code tidier. ok deraadt@ OpenBSD-Commit-ID: cc12a9029833d222043aecd252d654965c351a69 --- ssh.c | 18 +++--------------- sshd.c | 19 +++---------------- sshkey.h | 4 +++- 3 files changed, 9 insertions(+), 32 deletions(-) diff --git a/ssh.c b/ssh.c index 7a10813727ca..85c6e6c55e18 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.540 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.541 2020/11/08 11:46:12 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -893,13 +893,7 @@ main(int ac, char **av) break; case 'V': fprintf(stderr, "%s, %s\n", - SSH_RELEASE, -#ifdef WITH_OPENSSL - OpenSSL_version(OPENSSL_VERSION) -#else - "without OpenSSL" -#endif - ); + SSH_RELEASE, SSH_OPENSSL_VERSION); if (opt == 'V') exit(0); break; @@ -1160,13 +1154,7 @@ main(int ac, char **av) !use_syslog); if (debug_flag) - logit("%s, %s", SSH_RELEASE, -#ifdef WITH_OPENSSL - OpenSSL_version(OPENSSL_VERSION) -#else - "without OpenSSL" -#endif - ); + logit("%s, %s", SSH_RELEASE, SSH_OPENSSL_VERSION); /* Parse the configuration files */ process_config_files(host_arg, pw, 0, &want_final_pass); diff --git a/sshd.c b/sshd.c index bdb9c957baa8..173fadd86c56 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.564 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: sshd.c,v 1.565 2020/11/08 11:46:12 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -906,14 +906,7 @@ drop_connection(int sock, int startups) static void usage(void) { - fprintf(stderr, "%s, %s\n", - SSH_RELEASE, -#ifdef WITH_OPENSSL - OpenSSL_version(OPENSSL_VERSION) -#else - "without OpenSSL" -#endif - ); + fprintf(stderr, "%s, %s\n", SSH_RELEASE, SSH_OPENSSL_VERSION); fprintf(stderr, "usage: sshd [-46DdeiqTt] [-C connection_spec] [-c host_cert_file]\n" " [-E log_file] [-f config_file] [-g login_grace_time]\n" @@ -1772,13 +1765,7 @@ main(int ac, char **av) exit(1); } - debug("sshd version %s, %s", SSH_VERSION, -#ifdef WITH_OPENSSL - OpenSSL_version(OPENSSL_VERSION) -#else - "without OpenSSL" -#endif - ); + debug("sshd version %s, %s", SSH_VERSION, SSH_OPENSSL_VERSION); /* Store privilege separation user for later use if required. */ privsep_chroot = use_privsep && (getuid() == 0 || geteuid() == 0); diff --git a/sshkey.h b/sshkey.h index 6d162264b369..702d91901751 100644 --- a/sshkey.h +++ b/sshkey.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.h,v 1.47 2020/10/19 22:49:23 dtucker Exp $ */ +/* $OpenBSD: sshkey.h,v 1.48 2020/11/08 11:46:12 dtucker Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. @@ -39,6 +39,7 @@ # define EC_GROUP void # define EC_POINT void # endif /* OPENSSL_HAS_ECC */ +#define SSH_OPENSSL_VERSION OpenSSL_version(OPENSSL_VERSION) #else /* WITH_OPENSSL */ # define BIGNUM void # define RSA void @@ -46,6 +47,7 @@ # define EC_KEY void # define EC_GROUP void # define EC_POINT void +#define SSH_OPENSSL_VERSION "without OpenSSL" #endif /* WITH_OPENSSL */ #define SSH_RSA_MINIMUM_MODULUS_SIZE 1024 From 71693251b7cbb7dd89aaac18815147124732d0d3 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sun, 8 Nov 2020 12:10:20 +0000 Subject: [PATCH 0071/1788] upstream: Add a comment documenting the source of the moduli group sizes. OpenBSD-Commit-ID: aec0725ce607630caaa62682624c6763b350391c --- .skipped-commit-ids | 1 + 1 file changed, 1 insertion(+) diff --git a/.skipped-commit-ids b/.skipped-commit-ids index 6abbb99bca55..495dbf1d1df3 100644 --- a/.skipped-commit-ids +++ b/.skipped-commit-ids @@ -21,6 +21,7 @@ d9b910e412d139141b072a905e66714870c38ac0 Makefile.inc 3bcae7a754db3fc5ad3cab63dd46774edb35b8ae moduli regen script update 52ff0e3205036147b2499889353ac082e505ea54 moduli update 07b5031e9f49f2b69ac5e85b8da4fc9e393992a0 Makefile.inc +cc12a9029833d222043aecd252d654965c351a69 moduli-gen Makefile Old upstream tree: From 292bcb2479deb27204e3ff796539c003975a5f7a Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 9 Nov 2020 00:33:35 +1100 Subject: [PATCH 0072/1788] Remove preprocessor directive from log macro calls. Preprocessor directives inside macro calls, such as the new log macros, are undefined behaviour and do not work with, eg old GCCs. Put the entire log call inside the ifdef for OPENSSL_HAS_NISTP521. --- ssh-keygen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ssh-keygen.c b/ssh-keygen.c index 303faee31e1d..23d273a96931 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -219,10 +219,11 @@ type_bits_valid(int type, const char *name, u_int32_t *bitsp) break; case KEY_ECDSA: if (sshkey_ecdsa_bits_to_nid(*bitsp) == -1) - fatal("Invalid ECDSA key length: valid lengths are " #ifdef OPENSSL_HAS_NISTP521 + fatal("Invalid ECDSA key length: valid lengths are " "256, 384 or 521 bits"); #else + fatal("Invalid ECDSA key length: valid lengths are " "256 or 384 bits"); #endif } From d5a0cd4fc430c8eda213a4010a612d4778867cd9 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 8 Nov 2020 22:37:24 +0000 Subject: [PATCH 0073/1788] upstream: when requesting a security key touch on stderr, inform the user once the touch has been recorded; requested by claudio@ ok markus@ OpenBSD-Commit-ID: 3b76ee444490e546b9ea7f879e4092ee0d256233 --- misc.h | 5 +++-- readpass.c | 36 ++++++++++++++++++++++++++++-------- ssh-agent.c | 4 ++-- ssh-keygen.c | 4 ++-- sshconnect2.c | 4 ++-- 5 files changed, 37 insertions(+), 16 deletions(-) diff --git a/misc.h b/misc.h index 106539ec3f89..8ede60649741 100644 --- a/misc.h +++ b/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.88 2020/10/03 09:22:26 djm Exp $ */ +/* $OpenBSD: misc.h,v 1.89 2020/11/08 22:37:24 djm Exp $ */ /* * Author: Tatu Ylonen @@ -191,7 +191,8 @@ char *read_passphrase(const char *, int); int ask_permission(const char *, ...) __attribute__((format(printf, 1, 2))); struct notifier_ctx *notify_start(int, const char *, ...) __attribute__((format(printf, 2, 3))); -void notify_complete(struct notifier_ctx *); +void notify_complete(struct notifier_ctx *, const char *, ...) + __attribute__((format(printf, 2, 3))); #define MINIMUM(a, b) (((a) < (b)) ? (a) : (b)) #define MAXIMUM(a, b) (((a) > (b)) ? (a) : (b)) diff --git a/readpass.c b/readpass.c index 1362a49e9d64..6938d03dc6bb 100644 --- a/readpass.c +++ b/readpass.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readpass.c,v 1.65 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: readpass.c,v 1.66 2020/11/08 22:37:24 djm Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * @@ -222,6 +222,14 @@ ask_permission(const char *fmt, ...) return (allowed); } +static void +writemsg(const char *msg) +{ + (void)write(STDERR_FILENO, "\r", 1); + (void)write(STDERR_FILENO, msg, strlen(msg)); + (void)write(STDERR_FILENO, "\r\n", 2); +} + struct notifier_ctx { pid_t pid; void (*osigchld)(int); @@ -232,8 +240,8 @@ notify_start(int force_askpass, const char *fmt, ...) { va_list args; char *prompt = NULL; - pid_t pid; - void (*osigchld)(int); + pid_t pid = -1; + void (*osigchld)(int) = NULL; const char *askpass, *s; struct notifier_ctx *ret = NULL; @@ -244,10 +252,8 @@ notify_start(int force_askpass, const char *fmt, ...) if (fflush(NULL) != 0) error_f("fflush: %s", strerror(errno)); if (!force_askpass && isatty(STDERR_FILENO)) { - (void)write(STDERR_FILENO, "\r", 1); - (void)write(STDERR_FILENO, prompt, strlen(prompt)); - (void)write(STDERR_FILENO, "\r\n", 2); - goto out; + writemsg(prompt); + goto out_ctx; } if ((askpass = getenv("SSH_ASKPASS")) == NULL) askpass = _PATH_SSH_ASKPASS_DEFAULT; @@ -278,6 +284,7 @@ notify_start(int force_askpass, const char *fmt, ...) _exit(1); /* NOTREACHED */ } + out_ctx: if ((ret = calloc(1, sizeof(*ret))) == NULL) { kill(pid, SIGTERM); fatal_f("calloc failed"); @@ -290,9 +297,22 @@ notify_start(int force_askpass, const char *fmt, ...) } void -notify_complete(struct notifier_ctx *ctx) +notify_complete(struct notifier_ctx *ctx, const char *fmt, ...) { int ret; + char *msg = NULL; + va_list args; + + if (fmt != NULL && ctx->pid == -1) { + /* + * notify_start wrote to stderr, so send conclusion message + * there too + */ + va_start(args, fmt); + xvasprintf(&msg, fmt, args); + va_end(args); + writemsg(msg); + } if (ctx == NULL || ctx->pid <= 0) { free(ctx); diff --git a/ssh-agent.c b/ssh-agent.c index 179f353a3fe8..93f04f265fe0 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.266 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.267 2020/11/08 22:37:24 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -416,7 +416,7 @@ process_sign_request2(SocketEntry *e) /* Success */ ok = 0; send: - notify_complete(notifier); + notify_complete(notifier, "User presence confirmed"); sshkey_free(key); free(fp); if (ok == 0) { diff --git a/ssh-keygen.c b/ssh-keygen.c index 23d273a96931..9ce7befa551f 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.423 2020/10/29 03:01:18 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.424 2020/11/08 22:37:24 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -1854,7 +1854,7 @@ do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent, } r = sshkey_certify(public, ca, key_type_name, sk_provider, pin); - notify_complete(notifier); + notify_complete(notifier, "User presence confirmed"); if (r != 0) fatal_r(r, "Couldn't certify key %s", tmp); } diff --git a/sshconnect2.c b/sshconnect2.c index 46469a3b6401..f0e62e1425c3 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.333 2020/10/30 01:50:07 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.334 2020/11/08 22:37:24 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -1279,7 +1279,7 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, free(prompt); if (pin != NULL) freezero(pin, strlen(pin)); - notify_complete(notifier); + notify_complete(notifier, "User presence confirmed"); sshkey_free(prv); return r; } From 10dce8ff68ef615362cfcab0c0cc33ce524e7682 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 8 Nov 2020 23:19:03 +0000 Subject: [PATCH 0074/1788] upstream: unbreak; missing NULL check OpenBSD-Commit-ID: 6613dfab488123f454d348ef496824476b8c11c0 --- readpass.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readpass.c b/readpass.c index 6938d03dc6bb..78bca832aec7 100644 --- a/readpass.c +++ b/readpass.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readpass.c,v 1.66 2020/11/08 22:37:24 djm Exp $ */ +/* $OpenBSD: readpass.c,v 1.67 2020/11/08 23:19:03 djm Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * @@ -303,7 +303,7 @@ notify_complete(struct notifier_ctx *ctx, const char *fmt, ...) char *msg = NULL; va_list args; - if (fmt != NULL && ctx->pid == -1) { + if (ctx != NULL && fmt != NULL && ctx->pid == -1) { /* * notify_start wrote to stderr, so send conclusion message * there too From fcf429a4c69d30d8725612a55b37181594da8ddf Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 11 Nov 2020 12:30:46 +1100 Subject: [PATCH 0075/1788] Prevent excessively long username going to PAM. This is a mitigation for a buffer overflow in Solaris' PAM username handling (CVE-2020-14871), and is only enabled for Sun-derived PAM implementations. This is not a problem in sshd itself, it only prevents sshd from being used as a vector to attack Solaris' PAM. It does not prevent the bug in PAM from being exploited via some other PAM application. Based on github PR#212 from Mike Scott but implemented slightly differently. ok tim@ djm@ --- auth-pam.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/auth-pam.c b/auth-pam.c index 832382151274..d429ef13aaea 100644 --- a/auth-pam.c +++ b/auth-pam.c @@ -689,6 +689,12 @@ sshpam_init(struct ssh *ssh, Authctxt *authctxt) const char *pam_user, *user = authctxt->user; const char **ptr_pam_user = &pam_user; +#if defined(PAM_SUN_CODEBASE) && defined(PAM_MAX_RESP_SIZE) + /* Protect buggy PAM implementations from excessively long usernames */ + if (strlen(user) >= PAM_MAX_RESP_SIZE) + fatal("Username too long from %s port %d", + ssh_remote_ipaddr(ssh), ssh_remote_port(ssh)); +#endif if (sshpam_handle == NULL) { if (ssh == NULL) { fatal("%s: called initially with no " From 4340dd43928dfe746cb7e75fe920b63c0d909a9a Mon Sep 17 00:00:00 2001 From: "claudio@openbsd.org" Date: Tue, 10 Nov 2020 07:46:20 +0000 Subject: [PATCH 0076/1788] upstream: Free the previously allocated msg buffer after writing it out. OK djm@ OpenBSD-Commit-ID: 18c055870fc75e4cb9f926c86c7543e2e21d7fa4 --- readpass.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/readpass.c b/readpass.c index 78bca832aec7..9c7476c13f2a 100644 --- a/readpass.c +++ b/readpass.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readpass.c,v 1.67 2020/11/08 23:19:03 djm Exp $ */ +/* $OpenBSD: readpass.c,v 1.68 2020/11/10 07:46:20 claudio Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. * @@ -312,6 +312,7 @@ notify_complete(struct notifier_ctx *ctx, const char *fmt, ...) xvasprintf(&msg, fmt, args); va_end(args); writemsg(msg); + free(msg); } if (ctx == NULL || ctx->pid <= 0) { From add926dd1bbe3c4db06e27cab8ab0f9a3d00a0c2 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 11 Nov 2020 05:22:32 +0000 Subject: [PATCH 0077/1788] upstream: fix logic error that broke URI parsing in ProxyJump directives; ok dtucker@ OpenBSD-Commit-ID: 96d48839b1704882a0e9a77898f5e14b2d222705 --- readconf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readconf.c b/readconf.c index 8da57731d520..e2374a857e54 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.340 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.341 2020/11/11 05:22:32 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2558,12 +2558,12 @@ parse_jump(const char *s, Options *o, int active) if (first) { /* First argument and configuration is active */ - if (parse_ssh_uri(cp, &user, &host, &port) == -1 || + if (parse_ssh_uri(cp, &user, &host, &port) == -1 && parse_user_host_port(cp, &user, &host, &port) != 0) goto out; } else { /* Subsequent argument or inactive configuration */ - if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 || + if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 && parse_user_host_port(cp, NULL, NULL, NULL) != 0) goto out; } From 819b44e8b9af6ce18d3ec7505b9f461bf7991a1f Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Thu, 12 Nov 2020 22:38:57 +0000 Subject: [PATCH 0078/1788] upstream: Prevent integer overflow when ridiculously large ConnectTimeout is specified, capping the effective value (for most platforms) at 24 days. bz#3229, ok djm@ OpenBSD-Commit-ID: 62d4c4b7b87d111045f8e9f28b5b532d17ac5bc0 --- ssh.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ssh.c b/ssh.c index 85c6e6c55e18..f467ba2d0e66 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.541 2020/11/08 11:46:12 dtucker Exp $ */ +/* $OpenBSD: ssh.c,v 1.542 2020/11/12 22:38:57 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1523,7 +1523,10 @@ main(int ac, char **av) cleanup_exit(255); /* resolve_host logs the error */ } - timeout_ms = options.connection_timeout * 1000; + if (options.connection_timeout >= INT_MAX/1000) + timeout_ms = INT_MAX; + else + timeout_ms = options.connection_timeout * 1000; /* Open a connection to the remote host. */ if (ssh_connect(ssh, host, host_arg, addrs, &hostaddr, options.port, From d5d05cdb3d4efd4a618aa52caab5bec73097c163 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 12 Nov 2020 22:56:00 +0000 Subject: [PATCH 0079/1788] upstream: when prompting the user to accept a new hostkey, display any other host names/addresses already associated with the key. E.g. > The authenticity of host 'test (10.0.0.1)' can't be established. > ECDSA key fingerprint is SHA256:milU4MODXm8iJQI18wlsbPG7Yup+34fuNNmV08qDnax. > This host key is known by the following other names/addresses: > ~/.ssh/known_hosts:1: host.example.org,10.0.0.1 > ~/.ssh/known_hosts:2: [hashed name] > ~/.ssh/known_hosts:3: [hashed name] > ~/.ssh/known_hosts:4: host > ~/.ssh/known_hosts:5: [host]:2222 > Are you sure you want to continue connecting (yes/no/[fingerprint])? feedback and ok markus@ OpenBSD-Commit-ID: f6f58a77b49f1368b5883b3a1f776447cfcc7ef4 --- sshconnect.c | 219 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 191 insertions(+), 28 deletions(-) diff --git a/sshconnect.c b/sshconnect.c index 70b2dee047b0..02f569c1a477 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.341 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.342 2020/11/12 22:56:00 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -700,6 +700,166 @@ path_in_hostfiles(const char *path, char **hostfiles, u_int num_hostfiles) return 0; } +struct find_by_key_ctx { + const char *host, *ip; + const struct sshkey *key; + char **names; + u_int nnames; +}; + +/* Try to replace home directory prefix (per $HOME) with a ~/ sequence */ +static char * +try_tilde_unexpand(const char *path) +{ + char *home, *ret = NULL; + size_t l; + + if (*path != '/') + return xstrdup(path); + if ((home = getenv("HOME")) == NULL || (l = strlen(home)) == 0) + return xstrdup(path); + if (strncmp(path, home, l) != 0) + return xstrdup(path); + /* + * ensure we have matched on a path boundary: either the $HOME that + * we just compared ends with a '/' or the next character of the path + * must be a '/'. + */ + if (home[l - 1] != '/' && path[l] != '/') + return xstrdup(path); + if (path[l] == '/') + l++; + xasprintf(&ret, "~/%s", path + l); + return ret; +} + +static int +hostkeys_find_by_key_cb(struct hostkey_foreach_line *l, void *_ctx) +{ + struct find_by_key_ctx *ctx = (struct find_by_key_ctx *)_ctx; + char *path; + + /* we are looking for keys with names that *do not* match */ + if ((l->match & HKF_MATCH_HOST) != 0) + return 0; + /* not interested in marker lines */ + if (l->marker != MRK_NONE) + return 0; + /* we are only interested in exact key matches */ + if (l->key == NULL || !sshkey_equal(ctx->key, l->key)) + return 0; + path = try_tilde_unexpand(l->path); + debug_f("found matching key in %s:%lu", path, l->linenum); + ctx->names = xrecallocarray(ctx->names, + ctx->nnames, ctx->nnames + 1, sizeof(*ctx->names)); + xasprintf(&ctx->names[ctx->nnames], "%s:%lu: %s", path, l->linenum, + strncmp(l->hosts, HASH_MAGIC, strlen(HASH_MAGIC)) == 0 ? + "[hashed name]" : l->hosts); + ctx->nnames++; + free(path); + return 0; +} + +static int +hostkeys_find_by_key_hostfile(const char *file, const char *which, + struct find_by_key_ctx *ctx) +{ + int r; + + debug3_f("trying %s hostfile \"%s\"", which, file); + if ((r = hostkeys_foreach(file, hostkeys_find_by_key_cb, ctx, + ctx->host, ctx->ip, HKF_WANT_PARSE_KEY)) != 0) { + if (r == SSH_ERR_SYSTEM_ERROR && errno == ENOENT) { + debug_f("hostkeys file %s does not exist", file); + return 0; + } + error_fr(r, "hostkeys_foreach failed for %s", file); + return r; + } + return 0; +} + +/* + * Find 'key' in known hosts file(s) that do not match host/ip. + * Used to display also-known-as information for previously-unseen hostkeys. + */ +static void +hostkeys_find_by_key(const char *host, const char *ip, const struct sshkey *key, + char **user_hostfiles, u_int num_user_hostfiles, + char **system_hostfiles, u_int num_system_hostfiles, + char ***names, u_int *nnames) +{ + struct find_by_key_ctx ctx = {0}; + u_int i; + + *names = NULL; + *nnames = 0; + + if (key == NULL || sshkey_is_cert(key)) + return; + + ctx.host = host; + ctx.ip = ip; + ctx.key = key; + + for (i = 0; i < num_user_hostfiles; i++) { + if (hostkeys_find_by_key_hostfile(user_hostfiles[i], + "user", &ctx) != 0) + goto fail; + } + for (i = 0; i < num_system_hostfiles; i++) { + if (hostkeys_find_by_key_hostfile(system_hostfiles[i], + "system", &ctx) != 0) + goto fail; + } + /* success */ + *names = ctx.names; + *nnames = ctx.nnames; + ctx.names = NULL; + ctx.nnames = 0; + return; + fail: + for (i = 0; i < ctx.nnames; i++) + free(ctx.names[i]); + free(ctx.names); +} + +#define MAX_OTHER_NAMES 8 /* Maximum number of names to list */ +static char * +other_hostkeys_message(const char *host, const char *ip, + const struct sshkey *key, + char **user_hostfiles, u_int num_user_hostfiles, + char **system_hostfiles, u_int num_system_hostfiles) +{ + char *ret = NULL, **othernames = NULL; + u_int i, n, num_othernames = 0; + + hostkeys_find_by_key(host, ip, key, + user_hostfiles, num_user_hostfiles, + system_hostfiles, num_system_hostfiles, + &othernames, &num_othernames); + if (num_othernames == 0) + return xstrdup("This key is not known by any other names"); + + xasprintf(&ret, "This host key is known by the following other " + "names/addresses:"); + + n = num_othernames; + if (n > MAX_OTHER_NAMES) + n = MAX_OTHER_NAMES; + for (i = 0; i < n; i++) { + xextendf(&ret, "\n", " %s", othernames[i]); + } + if (n < num_othernames) { + xextendf(&ret, "\n", " (%d additional names ommitted)", + num_othernames - n); + } + for (i = 0; i < num_othernames; i++) + free(othernames[i]); + free(othernames); + return ret; +} + /* * check whether the supplied host key is valid, return -1 if the key * is not valid. user_hostfile[0] will not be updated if 'readonly' is true. @@ -876,45 +1036,48 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, goto fail; } else if (options.strict_host_key_checking == SSH_STRICT_HOSTKEY_ASK) { - char msg1[1024], msg2[1024]; + char *msg1 = NULL, *msg2 = NULL; + + xasprintf(&msg1, "The authenticity of host " + "'%.200s (%s)' can't be established", host, ip); + + if (show_other_keys(host_hostkeys, host_key)) { + xextendf(&msg1, "\n", "but keys of different " + "type are already known for this host."); + } else + xextendf(&msg1, "", "."); - if (show_other_keys(host_hostkeys, host_key)) - snprintf(msg1, sizeof(msg1), - "\nbut keys of different type are already" - " known for this host."); - else - snprintf(msg1, sizeof(msg1), "."); - /* The default */ fp = sshkey_fingerprint(host_key, options.fingerprint_hash, SSH_FP_DEFAULT); ra = sshkey_fingerprint(host_key, options.fingerprint_hash, SSH_FP_RANDOMART); if (fp == NULL || ra == NULL) fatal_f("sshkey_fingerprint failed"); - msg2[0] = '\0'; + xextendf(&msg1, "\n", "%s key fingerprint is %s.", + type, fp); + if (options.visual_host_key) + xextendf(&msg1, "\n", "%s", ra); if (options.verify_host_key_dns) { - if (matching_host_key_dns) - snprintf(msg2, sizeof(msg2), - "Matching host key fingerprint" - " found in DNS.\n"); - else - snprintf(msg2, sizeof(msg2), - "No matching host key fingerprint" - " found in DNS.\n"); + xextendf(&msg1, "\n", + "%s host key fingerprint found in DNS.", + matching_host_key_dns ? + "Matching" : "No matching"); } - snprintf(msg, sizeof(msg), - "The authenticity of host '%.200s (%s)' can't be " - "established%s\n" - "%s key fingerprint is %s.%s%s\n%s" + /* msg2 informs for other names matching this key */ + if ((msg2 = other_hostkeys_message(host, ip, host_key, + user_hostfiles, num_user_hostfiles, + system_hostfiles, num_system_hostfiles)) != NULL) + xextendf(&msg1, "\n", "%s", msg2); + + xextendf(&msg1, "\n", "Are you sure you want to continue connecting " - "(yes/no/[fingerprint])? ", - host, ip, msg1, type, fp, - options.visual_host_key ? "\n" : "", - options.visual_host_key ? ra : "", - msg2); + "(yes/no/[fingerprint])? "); + + confirmed = confirm(msg1, fp); free(ra); - confirmed = confirm(msg, fp); free(fp); + free(msg1); + free(msg2); if (!confirmed) goto fail; hostkey_trusted = 1; /* user explicitly confirmed */ From b79add37d118276d67f3899987b9f0629c9449c3 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 13 Nov 2020 13:43:30 +1100 Subject: [PATCH 0080/1788] Remove obsolete AC_HEADER_TIME macro. AC_HEADER_TIME is marked as obsolete in autoconf-2.70 and as far as I can tell everything we have that might be old enough to need it doesn't. --- configure.ac | 2 -- 1 file changed, 2 deletions(-) diff --git a/configure.ac b/configure.ac index 92f45a82aa52..d3f4f57073cf 100644 --- a/configure.ac +++ b/configure.ac @@ -4138,8 +4138,6 @@ if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then [define if you have struct addrinfo data type]) fi -AC_HEADER_TIME - AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ struct timeval tv; tv.tv_sec = 1;]])], From e51dc7fab61df36e43f3bc64b673f88d388cab91 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 13 Nov 2020 13:22:15 +1100 Subject: [PATCH 0081/1788] SELinux has deprecated security_context_t (it was only ever a char* anyway) --- openbsd-compat/port-linux.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c index 89915eb87717..77cb8213a12e 100644 --- a/openbsd-compat/port-linux.c +++ b/openbsd-compat/port-linux.c @@ -55,11 +55,10 @@ ssh_selinux_enabled(void) } /* Return the default security context for the given username */ -static security_context_t +static char * ssh_selinux_getctxbyname(char *pwname) { - security_context_t sc = NULL; - char *sename = NULL, *lvl = NULL; + char *sc = NULL, *sename = NULL, *lvl = NULL; int r; #ifdef HAVE_GETSEUSERBYNAME @@ -105,7 +104,7 @@ ssh_selinux_getctxbyname(char *pwname) void ssh_selinux_setup_exec_context(char *pwname) { - security_context_t user_ctx = NULL; + char *user_ctx = NULL; if (!ssh_selinux_enabled()) return; @@ -136,9 +135,7 @@ ssh_selinux_setup_exec_context(char *pwname) void ssh_selinux_setup_pty(char *pwname, const char *tty) { - security_context_t new_tty_ctx = NULL; - security_context_t user_ctx = NULL; - security_context_t old_tty_ctx = NULL; + char *new_tty_ctx = NULL, *user_ctx = NULL, *old_tty_ctx = NULL; security_class_t chrclass; if (!ssh_selinux_enabled()) @@ -187,7 +184,7 @@ ssh_selinux_change_context(const char *newname) if (!ssh_selinux_enabled()) return; - if (getcon((security_context_t *)&oldctx) < 0) { + if (getcon(&oldctx) < 0) { logit("%s: getcon failed with %s", __func__, strerror(errno)); return; } @@ -224,7 +221,7 @@ ssh_selinux_change_context(const char *newname) void ssh_selinux_setfscreatecon(const char *path) { - security_context_t context; + char *context; if (!ssh_selinux_enabled()) return; From e3f27006f15abacb7e89fda3f5e9a0bd420b7e38 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 13 Nov 2020 14:20:43 +1100 Subject: [PATCH 0082/1788] Revert "detect Linux/X32 systems" This reverts commit 5b56bd0affea7b02b540bdbc4d1d271b0e4fc885. The approach used was incorrect; discussion in bz#3085 --- configure.ac | 6 ------ 1 file changed, 6 deletions(-) diff --git a/configure.ac b/configure.ac index d3f4f57073cf..842c255edb55 100644 --- a/configure.ac +++ b/configure.ac @@ -532,8 +532,6 @@ SPP_MSG="no" # the --with-solaris-privs option and --with-sandbox=solaris). SOLARIS_PRIVS="no" -AC_CHECK_SIZEOF([size_t]) - # Check for some target-specific stuff case "$host" in *-*-aix*) @@ -878,10 +876,6 @@ main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16)) case "$host" in x86_64-*) seccomp_audit_arch=AUDIT_ARCH_X86_64 - # X32: AMD64 instructions in 32bit address space. - if test "x$ac_cv_sizeof_size_t" = "x4" ; then - seccomp_audit_arch=AUDIT_ARCH_I386 - fi ;; i*86-*) seccomp_audit_arch=AUDIT_ARCH_I386 From 2992e4e7014ac1047062acfdbbf6feb156fef616 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 13 Nov 2020 17:56:11 +1100 Subject: [PATCH 0083/1788] Remove use of TIME_WITH_SYS_TIME. It was only set by the recently removed AC_HEADER_TIME macro, replace with simple inclusions of both sys/time.h and time.h. Should prevent mis-detection of struct timespec. --- configure.ac | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/configure.ac b/configure.ac index 842c255edb55..9bf28ca5812f 100644 --- a/configure.ac +++ b/configure.ac @@ -4146,15 +4146,11 @@ fi AC_CACHE_CHECK([for struct timespec], ac_cv_have_struct_timespec, [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #ifdef TIME_WITH_SYS_TIME + #ifdef HAVE_SYS_TIME_H # include + #endif + #ifdef HAVE_TIME_H # include - #else - # ifdef HAVE_SYS_TIME_H - # include - # else - # include - # endif #endif ]], [[ struct timespec ts; ts.tv_sec = 1;]])], From 5442b491d0ee4bb82f6341ad0ee620ef3947f8c5 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 13 Nov 2020 04:53:12 +0000 Subject: [PATCH 0084/1788] upstream: prefix keyboard interactive prompts with (user@host) to make it easier to determine which connection they are associated with in cases like scp -3, ProxyJump, etc. bz#3224 ok dtucker OpenBSD-Commit-ID: 67e6189b04b46c867662f8a6759cf3ecb5f59170 --- sshconnect2.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/sshconnect2.c b/sshconnect2.c index f0e62e1425c3..6c31eeaf23f9 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.334 2020/11/08 22:37:24 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.335 2020/11/13 04:53:12 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -1886,15 +1886,15 @@ input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh) { Authctxt *authctxt = ssh->authctxt; char *name = NULL, *inst = NULL, *lang = NULL, *prompt = NULL; - char *response = NULL; + char *display_prompt = NULL, *response = NULL; u_char echo = 0; u_int num_prompts, i; int r; - debug2("input_userauth_info_req"); + debug2_f("entering"); if (authctxt == NULL) - fatal("input_userauth_info_req: no authentication context"); + fatal_f("no authentication context"); authctxt->info_req_seen = 1; @@ -1919,17 +1919,21 @@ input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh) (r = sshpkt_put_u32(ssh, num_prompts)) != 0) goto out; - debug2("input_userauth_info_req: num_prompts %d", num_prompts); + debug2_f("num_prompts %d", num_prompts); for (i = 0; i < num_prompts; i++) { if ((r = sshpkt_get_cstring(ssh, &prompt, NULL)) != 0 || (r = sshpkt_get_u8(ssh, &echo)) != 0) goto out; - response = read_passphrase(prompt, echo ? RP_ECHO : 0); + xasprintf(&display_prompt, "(%s@%s) %s", + authctxt->server_user, options.host_key_alias ? + options.host_key_alias : authctxt->host, prompt); + response = read_passphrase(display_prompt, echo ? RP_ECHO : 0); if ((r = sshpkt_put_cstring(ssh, response)) != 0) goto out; freezero(response, strlen(response)); free(prompt); - response = prompt = NULL; + free(display_prompt); + display_prompt = response = prompt = NULL; } /* done with parsing incoming message. */ if ((r = sshpkt_get_end(ssh)) != 0 || @@ -1940,6 +1944,7 @@ input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh) if (response) freezero(response, strlen(response)); free(prompt); + free(display_prompt); free(name); free(inst); free(lang); From 04088725ec9c44880c01799b588cd4ba47b3e8bc Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 13 Nov 2020 07:30:44 +0000 Subject: [PATCH 0085/1788] upstream: scrub keyboard-interactive authentication prompts coming from the server through asmprintf() prior to display; suggested by and ok dtucker@ OpenBSD-Commit-ID: 31fe93367645c37fbfe4691596bf6cf1e3972a58 --- sshconnect2.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sshconnect2.c b/sshconnect2.c index 6c31eeaf23f9..149bb8d6e883 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.335 2020/11/13 04:53:12 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.336 2020/11/13 07:30:44 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -1924,9 +1925,10 @@ input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh) if ((r = sshpkt_get_cstring(ssh, &prompt, NULL)) != 0 || (r = sshpkt_get_u8(ssh, &echo)) != 0) goto out; - xasprintf(&display_prompt, "(%s@%s) %s", + if (asmprintf(&display_prompt, INT_MAX, NULL, "(%s@%s) %s", authctxt->server_user, options.host_key_alias ? - options.host_key_alias : authctxt->host, prompt); + options.host_key_alias : authctxt->host, prompt) == -1) + fatal_f("asmprintf failed"); response = read_passphrase(display_prompt, echo ? RP_ECHO : 0); if ((r = sshpkt_put_cstring(ssh, response)) != 0) goto out; From 5b9720f9adbd70ba5a994f407fe07a7d016d8d65 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 15 Nov 2020 22:34:58 +0000 Subject: [PATCH 0086/1788] upstream: revert r1.341; it breaks ProxyJump; reported by sthen@ OpenBSD-Commit-ID: 6ac2f945b26cb86d936eed338f77861d6da8356a --- readconf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readconf.c b/readconf.c index e2374a857e54..09b5e086a114 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.341 2020/11/11 05:22:32 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.342 2020/11/15 22:34:58 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2558,12 +2558,12 @@ parse_jump(const char *s, Options *o, int active) if (first) { /* First argument and configuration is active */ - if (parse_ssh_uri(cp, &user, &host, &port) == -1 && + if (parse_ssh_uri(cp, &user, &host, &port) == -1 || parse_user_host_port(cp, &user, &host, &port) != 0) goto out; } else { /* Subsequent argument or inactive configuration */ - if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 && + if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 || parse_user_host_port(cp, NULL, NULL, NULL) != 0) goto out; } From 85cceda21f1471548e04111aefe2c4943131c1c8 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Tue, 17 Nov 2020 11:23:58 +0000 Subject: [PATCH 0087/1788] upstream: Specify that the KDF function is bcrypt. Based on github PR#214 from rafork, ok markus@, mdoc correction jmc@ OpenBSD-Commit-ID: d8f2853e7edbcd483f31b50da77ab80ffa18b4ef --- ssh-keygen.1 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ssh-keygen.1 b/ssh-keygen.1 index 96957acf5636..e09d6475e8b9 100644 --- a/ssh-keygen.1 +++ b/ssh-keygen.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: ssh-keygen.1,v 1.210 2020/10/26 00:39:04 dtucker Exp $ +.\" $OpenBSD: ssh-keygen.1,v 1.211 2020/11/17 11:23:58 dtucker Exp $ .\" .\" Author: Tatu Ylonen .\" Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -35,7 +35,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: October 26 2020 $ +.Dd $Mdocdate: November 17 2020 $ .Dt SSH-KEYGEN 1 .Os .Sh NAME @@ -274,7 +274,9 @@ This is used by to generate new host keys. .It Fl a Ar rounds When saving a private key, this option specifies the number of KDF -(key derivation function) rounds used. +(key derivation function, currently +.Xr bcrypt_pbkdf 3 ) +rounds used. Higher numbers result in slower passphrase verification and increased resistance to brute-force password cracking (should the keys be stolen). The default is 16 rounds. From 076cb616b87d1ea1d292973fcd0ba38c08ea6832 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Thu, 19 Nov 2020 23:05:05 +0000 Subject: [PATCH 0088/1788] upstream: draft-ietf-secsh-architecture is now RFC4251. OpenBSD-Commit-ID: cb0bb58c2711fb5ed519507659be1dcf179ed403 --- ssh2.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ssh2.h b/ssh2.h index f2e37c96aa26..32ddae89b33b 100644 --- a/ssh2.h +++ b/ssh2.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh2.h,v 1.18 2016/05/04 14:22:33 markus Exp $ */ +/* $OpenBSD: ssh2.h,v 1.19 2020/11/19 23:05:05 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -25,7 +25,7 @@ */ /* - * draft-ietf-secsh-architecture-05.txt + * RFC4251: * * Transport layer protocol: * From 3a7c46c72b6a1f643b1fc3589cd20d8320c3d9e1 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 20 Nov 2020 02:14:16 +0000 Subject: [PATCH 0089/1788] upstream: Explicitly initialize all members of the find_by_key_ctx struct. Initializing a single member should be enough (the spec says the remainder should be initialized as per the static rules) but some GCCs warn on this which prevents us testing with -Werror on those. ok deraadt@ djm@ OpenBSD-Commit-ID: 687126e60a27d30f02614760ef3c3ae4e8d6af28 --- sshconnect.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sshconnect.c b/sshconnect.c index 02f569c1a477..1abe710c1f76 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.342 2020/11/12 22:56:00 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.343 2020/11/20 02:14:16 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -789,7 +789,7 @@ hostkeys_find_by_key(const char *host, const char *ip, const struct sshkey *key, char **system_hostfiles, u_int num_system_hostfiles, char ***names, u_int *nnames) { - struct find_by_key_ctx ctx = {0}; + struct find_by_key_ctx ctx = {0, 0, 0, 0, 0}; u_int i; *names = NULL; From 0f90440ca70abab947acbd77795e9f130967956c Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 20 Nov 2020 13:37:54 +1100 Subject: [PATCH 0090/1788] Add new pselect6_time64 syscall on ARM. This is apparently needed on armhfp/armv7hl. bz#3232, patch from jjelen at redhat.com. --- sandbox-seccomp-filter.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c index e0768c0636ed..5065ae7efc53 100644 --- a/sandbox-seccomp-filter.c +++ b/sandbox-seccomp-filter.c @@ -267,6 +267,9 @@ static const struct sock_filter preauth_insns[] = { #ifdef __NR_pselect6 SC_ALLOW(__NR_pselect6), #endif +#ifdef __NR_pselect6_time64 + SC_ALLOW(__NR_pselect6_time64), +#endif #ifdef __NR_read SC_ALLOW(__NR_read), #endif From 41935882f4e82de60dbd6e033eabe79e1b963518 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 20 Nov 2020 03:16:56 +0000 Subject: [PATCH 0091/1788] upstream: When doing an sftp recursive upload or download of a read-only directory, ensure that the directory is created with write and execute permissions in the interim so that we can actually complete the transfer, then set the directory permission as the final step. (The execute bit is only likely to be an issue with a non-POSIX server). bz#3222, ok djm@ OpenBSD-Commit-ID: a82606212f2796e31f0e1af94a63355a7ad5d903 --- sftp-client.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/sftp-client.c b/sftp-client.c index 6c2a4fb76deb..d82e31aeeec4 100644 --- a/sftp-client.c +++ b/sftp-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.c,v 1.137 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: sftp-client.c,v 1.138 2020/11/20 03:16:56 dtucker Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -1496,7 +1496,7 @@ download_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, int i, ret = 0; SFTP_DIRENT **dir_entries; char *filename, *new_src = NULL, *new_dst = NULL; - mode_t mode = 0777; + mode_t mode = 0777, tmpmode = mode; if (depth >= MAX_DIR_DEPTH) { error("Maximum directory depth exceeded: %d levels", depth); @@ -1515,14 +1515,15 @@ download_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, if (print_flag) mprintf("Retrieving %s\n", src); - if (dirattrib->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) + if (dirattrib->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) { mode = dirattrib->perm & 01777; - else { + tmpmode = mode | (S_IWUSR|S_IXUSR); + } else { debug("Server did not send permissions for " "directory \"%s\"", dst); } - if (mkdir(dst, mode) == -1 && errno != EEXIST) { + if (mkdir(dst, tmpmode) == -1 && errno != EEXIST) { error("mkdir %s: %s", dst, strerror(errno)); return -1; } @@ -1577,6 +1578,10 @@ download_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, "\"%s\"", dst); } + if (mode != tmpmode && chmod(dst, mode) == -1) + error("Can't set final mode on \"%s\": %s", dst, + strerror(errno)); + free_sftp_dirents(dir_entries); return ret; @@ -1829,6 +1834,7 @@ upload_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, char *filename, *new_src = NULL, *new_dst = NULL; struct stat sb; Attrib a, *dirattrib; + u_int32_t saved_perm; if (depth >= MAX_DIR_DEPTH) { error("Maximum directory depth exceeded: %d levels", depth); @@ -1858,8 +1864,11 @@ upload_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, /* * sftp lacks a portable status value to match errno EEXIST, * so if we get a failure back then we must check whether - * the path already existed and is a directory. + * the path already existed and is a directory. Ensure we can + * write to the directory we create for the duration of the transfer. */ + saved_perm = a.perm; + a.perm |= (S_IWUSR|S_IXUSR); if (do_mkdir(conn, dst, &a, 0) != 0) { if ((dirattrib = do_stat(conn, dst, 0)) == NULL) return -1; @@ -1868,6 +1877,7 @@ upload_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, return -1; } } + a.perm = saved_perm; if ((dirp = opendir(src)) == NULL) { error("Failed to open dir \"%s\": %s", src, strerror(errno)); From 9880f3480f9768897f3b8e714d5317fb993bc5b3 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 20 Nov 2020 17:16:51 +1100 Subject: [PATCH 0092/1788] Restore correct flags during localtime_r check. We were restoring the wrong thing CPPFLAGS (we used CFLAGS) for any platform that doesn't have localtime_r. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 9bf28ca5812f..35d1aca9fc90 100644 --- a/configure.ac +++ b/configure.ac @@ -1992,7 +1992,7 @@ AC_SEARCH_LIBS([clock_gettime], [rt], dnl check if we need -D_REENTRANT for localtime_r declaration. AC_CHECK_DECL([localtime_r], [], - [ saved_CPPFLAGS="$CFLAGS" + [ saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_REENTRANT" unset ac_cv_have_decl_localtime_r AC_CHECK_DECL([localtime_r], [], From 637017a7dd3281d3f2df804993cc27c30dbfda47 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 25 Nov 2020 17:38:46 +1100 Subject: [PATCH 0093/1788] Use "=" not "==" in string test. POSIX says "=" is string comparison and some shells (eg HP-UX) will complain about "==". --- regress/key-options.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regress/key-options.sh b/regress/key-options.sh index 097f46eba4e4..2f3d66e2e9ea 100644 --- a/regress/key-options.sh +++ b/regress/key-options.sh @@ -9,7 +9,7 @@ cp $authkeys $origkeys # Allocating ptys can require privileges on some platforms. skip_pty="" -if ! config_defined HAVE_OPENPTY && [ "x$SUDO" == "x" ]; then +if ! config_defined HAVE_OPENPTY && [ "x$SUDO" = "x" ]; then skip_pty="no openpty(3) and SUDO not set" fi From 9b9465ea856e15b9e9890b4ecb4110d7106e7766 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 22 Nov 2020 22:37:11 +0000 Subject: [PATCH 0094/1788] upstream: when mentioning that the host key has changed, don't report the type because it is ambiguous as to whether it referred to the known or new host key. bz3216; ok dtucker@ OpenBSD-Commit-ID: 2d5ce4a83dbcf44e340a572e361decad8aab7bad --- sshconnect.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sshconnect.c b/sshconnect.c index 1abe710c1f76..dfee55a85b63 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.343 2020/11/20 02:14:16 dtucker Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.344 2020/11/22 22:37:11 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1182,8 +1182,8 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, */ if (options.strict_host_key_checking != SSH_STRICT_HOSTKEY_OFF) { - error("%s host key for %.200s has changed and you have " - "requested strict checking.", type, host); + error("Host key for %.200s has changed and you have " + "requested strict checking.", host); goto fail; } From 19af04e2231155d513e24fdc81fbec2217ae36a6 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 22 Nov 2020 22:38:26 +0000 Subject: [PATCH 0095/1788] upstream: when loading PKCS#11 keys, include the key fingerprints and provider/slot information in debug output. OpenBSD-Commit-ID: 969a089575d0166a9a364a9901bb6a8d9b8a1431 --- ssh-pkcs11.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/ssh-pkcs11.c b/ssh-pkcs11.c index 5dc63ccc6aa3..844aa9fff740 100644 --- a/ssh-pkcs11.c +++ b/ssh-pkcs11.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-pkcs11.c,v 1.51 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh-pkcs11.c,v 1.52 2020/11/22 22:38:26 djm Exp $ */ /* * Copyright (c) 2010 Markus Friedl. All rights reserved. * Copyright (c) 2014 Pedro Martelletto. All rights reserved. @@ -46,6 +46,7 @@ #include "misc.h" #include "sshkey.h" #include "ssh-pkcs11.h" +#include "digest.h" #include "xmalloc.h" struct pkcs11_slotinfo { @@ -1078,6 +1079,22 @@ have_rsa_key(const RSA *rsa) } #endif +static void +note_key(struct pkcs11_provider *p, CK_ULONG slotidx, const char *context, + struct sshkey *key) +{ + char *fp; + + if ((fp = sshkey_fingerprint(key, SSH_FP_HASH_DEFAULT, + SSH_FP_DEFAULT)) == NULL) { + error_f("sshkey_fingerprint failed"); + return; + } + debug2("%s: provider %s slot %lu: %s %s", context, p->name, + (u_long)slotidx, sshkey_type(key), fp); + free(fp); +} + /* * lookup certificates for token in slot identified by slotidx, * add 'wrapped' public keys to the 'keysp' array and increment nkeys. @@ -1153,8 +1170,9 @@ pkcs11_fetch_certs(struct pkcs11_provider *p, CK_ULONG slotidx, ck_cert_type); continue; } - + note_key(p, slotidx, __func__, key); if (pkcs11_key_included(keysp, nkeys, key)) { + debug2_f("key already included");; sshkey_free(key); } else { /* expand key array and add key */ @@ -1266,8 +1284,9 @@ pkcs11_fetch_keys(struct pkcs11_provider *p, CK_ULONG slotidx, error("failed to fetch key"); continue; } - + note_key(p, slotidx, __func__, key); if (pkcs11_key_included(keysp, nkeys, key)) { + debug2_f("key already included");; sshkey_free(key); } else { /* expand key array and add key */ From b2bcec13f17ce9174238a704e91d52203e916432 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 27 Nov 2020 00:37:10 +0000 Subject: [PATCH 0096/1788] upstream: clean up passing of struct passwd from monitor to preauth privsep process. No longer copy entire struct w/ pointer addresses, but pass remaining scalar fields explicitly, Prompted by Yuichiro NAITO, feedback Thorsten Glaser; ok dtucker@ OpenBSD-Commit-ID: 9925df75a56732c43f3663e70dd15ff413ab3e53 --- monitor.c | 26 ++++++++++++++++++++------ monitor_wrap.c | 25 ++++++++++++++++++------- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/monitor.c b/monitor.c index 10f8462429a6..64a837f48efd 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.217 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.218 2020/11/27 00:37:10 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -705,8 +705,14 @@ mm_answer_sign(struct ssh *ssh, int sock, struct sshbuf *m) return (0); } -/* Retrieves the password entry and also checks if the user is permitted */ +#define PUTPW(b, id) \ + do { \ + if ((r = sshbuf_put_string(b, \ + &pwent->id, sizeof(pwent->id))) != 0) \ + fatal_fr(r, "assemble %s", #id); \ + } while (0) +/* Retrieves the password entry and also checks if the user is permitted */ int mm_answer_pwnamallow(struct ssh *ssh, int sock, struct sshbuf *m) { @@ -742,10 +748,18 @@ mm_answer_pwnamallow(struct ssh *ssh, int sock, struct sshbuf *m) authctxt->pw = pwent; authctxt->valid = 1; - /* XXX don't sent pwent to unpriv; send fake class/dir/shell too */ - if ((r = sshbuf_put_u8(m, 1)) != 0 || - (r = sshbuf_put_string(m, pwent, sizeof(*pwent))) != 0 || - (r = sshbuf_put_cstring(m, pwent->pw_name)) != 0 || + /* XXX send fake class/dir/shell, etc. */ + if ((r = sshbuf_put_u8(m, 1)) != 0) + fatal_fr(r, "assemble ok"); + PUTPW(m, pw_uid); + PUTPW(m, pw_gid); +#ifdef HAVE_STRUCT_PASSWD_PW_CHANGE + PUTPW(m, pw_change); +#endif +#ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE + PUTPW(m, pw_expire); +#endif + if ((r = sshbuf_put_cstring(m, pwent->pw_name)) != 0 || (r = sshbuf_put_cstring(m, "*")) != 0 || #ifdef HAVE_STRUCT_PASSWD_PW_GECOS (r = sshbuf_put_cstring(m, pwent->pw_gecos)) != 0 || diff --git a/monitor_wrap.c b/monitor_wrap.c index 5f40cc82efe6..1226dfd0e401 100644 --- a/monitor_wrap.c +++ b/monitor_wrap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_wrap.c,v 1.121 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: monitor_wrap.c,v 1.122 2020/11/27 00:37:10 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -246,6 +246,15 @@ mm_sshkey_sign(struct ssh *ssh, struct sshkey *key, u_char **sigp, size_t *lenp, return (0); } +#define GETPW(b, id) \ + do { \ + if ((r = sshbuf_get_string_direct(b, &p, &len)) != 0) \ + fatal_fr(r, "parse pw %s", #id); \ + if (len != sizeof(pw->id)) \ + fatal_fr(r, "bad length for %s", #id); \ + memcpy(&pw->id, p, len); \ + } while (0) + struct passwd * mm_getpwnamallow(struct ssh *ssh, const char *username) { @@ -279,12 +288,14 @@ mm_getpwnamallow(struct ssh *ssh, const char *username) /* XXX don't like passing struct passwd like this */ pw = xcalloc(sizeof(*pw), 1); - if ((r = sshbuf_get_string_direct(m, &p, &len)) != 0) - fatal_fr(r, "parse"); - if (len != sizeof(*pw)) - fatal_f("struct passwd size mismatch"); - memcpy(pw, p, sizeof(*pw)); - + GETPW(m, pw_uid); + GETPW(m, pw_gid); +#ifdef HAVE_STRUCT_PASSWD_PW_CHANGE + GETPW(m, pw_change); +#endif +#ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE + GETPW(m, pw_expire); +#endif if ((r = sshbuf_get_cstring(m, &pw->pw_name, NULL)) != 0 || (r = sshbuf_get_cstring(m, &pw->pw_passwd, NULL)) != 0 || #ifdef HAVE_STRUCT_PASSWD_PW_GECOS From 33313ebc1c7135085676db62189e3520341d6b73 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 27 Nov 2020 00:49:58 +0000 Subject: [PATCH 0097/1788] upstream: Set the specified TOS/DSCP for interactive use prior to TCP connect. The connection phase of the SSH session is time-sensitive (due to server side login grace periods) and is frequently interactive (e.g. entering passwords). The ultimate interactive/bulk TOS/DSCP will be set after authentication completes. ok dtucker@ OpenBSD-Commit-ID: f31ab10d9233363a6d2c9996007083ba43a093f1 --- misc.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++- misc.h | 4 +++- packet.c | 42 ++++----------------------------------- sshconnect.c | 7 ++++++- 4 files changed, 68 insertions(+), 41 deletions(-) diff --git a/misc.c b/misc.c index a25cd6ad554c..7c9460e8f186 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.155 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: misc.c,v 1.156 2020/11/27 00:49:58 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -231,6 +231,60 @@ set_rdomain(int fd, const char *name) #endif } +int +get_sock_af(int fd) +{ + struct sockaddr_storage to; + socklen_t tolen = sizeof(to); + + memset(&to, 0, sizeof(to)); + if (getsockname(fd, (struct sockaddr *)&to, &tolen) == -1) + return -1; +#ifdef IPV4_IN_IPV6 + if (to.ss_family == AF_INET6 && + IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)&to)->sin6_addr)) + return AF_INET; +#endif + return to.ss_family; +} + +void +set_sock_tos(int fd, int tos) +{ +#ifndef IP_TOS_IS_BROKEN + int af; + + switch ((af = get_sock_af(fd))) { + case -1: + /* assume not a socket */ + break; + case AF_INET: +# ifdef IP_TOS + debug3_f("set socket %d IP_TOS 0x%02x", fd, tos); + if (setsockopt(fd, IPPROTO_IP, IP_TOS, + &tos, sizeof(tos)) == -1) { + error("setsockopt socket %d IP_TOS %d: %s:", + fd, tos, strerror(errno)); + } +# endif /* IP_TOS */ + break; + case AF_INET6: +# ifdef IPV6_TCLASS + debug3_f("set socket %d IPV6_TCLASS 0x%02x", fd, tos); + if (setsockopt(fd, IPPROTO_IPV6, IPV6_TCLASS, + &tos, sizeof(tos)) == -1) { + error("setsockopt socket %d IPV6_TCLASS %d: %.100s:", + fd, tos, strerror(errno)); + } +# endif /* IPV6_TCLASS */ + break; + default: + debug2_f("unsupported socket family %d", af); + break; + } +#endif /* IP_TOS_IS_BROKEN */ +} + /* * Wait up to *timeoutp milliseconds for events on fd. Updates * *timeoutp with time remaining. diff --git a/misc.h b/misc.h index 8ede60649741..b8120a140525 100644 --- a/misc.h +++ b/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.89 2020/11/08 22:37:24 djm Exp $ */ +/* $OpenBSD: misc.h,v 1.90 2020/11/27 00:49:58 djm Exp $ */ /* * Author: Tatu Ylonen @@ -53,6 +53,8 @@ void set_nodelay(int); int set_reuseaddr(int); char *get_rdomain(int); int set_rdomain(int, const char *); +int get_sock_af(int); +void set_sock_tos(int, int); int waitrfd(int, int *); int timeout_connect(int, const struct sockaddr *, socklen_t, int *); int a2port(const char *); diff --git a/packet.c b/packet.c index f22861630752..742cf3a590ea 100644 --- a/packet.c +++ b/packet.c @@ -1,4 +1,4 @@ -/* $OpenBSD: packet.c,v 1.297 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: packet.c,v 1.298 2020/11/27 00:49:58 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -475,19 +475,7 @@ ssh_packet_get_bytes(struct ssh *ssh, u_int64_t *ibytes, u_int64_t *obytes) int ssh_packet_connection_af(struct ssh *ssh) { - struct sockaddr_storage to; - socklen_t tolen = sizeof(to); - - memset(&to, 0, sizeof(to)); - if (getsockname(ssh->state->connection_out, (struct sockaddr *)&to, - &tolen) == -1) - return 0; -#ifdef IPV4_IN_IPV6 - if (to.ss_family == AF_INET6 && - IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)&to)->sin6_addr)) - return AF_INET; -#endif - return to.ss_family; + return get_sock_af(ssh->state->connection_out); } /* Sets the connection into non-blocking mode. */ @@ -2069,30 +2057,9 @@ ssh_packet_not_very_much_data_to_write(struct ssh *ssh) void ssh_packet_set_tos(struct ssh *ssh, int tos) { -#ifndef IP_TOS_IS_BROKEN if (!ssh_packet_connection_is_on_socket(ssh) || tos == INT_MAX) return; - switch (ssh_packet_connection_af(ssh)) { -# ifdef IP_TOS - case AF_INET: - debug3_f("set IP_TOS 0x%02x", tos); - if (setsockopt(ssh->state->connection_in, - IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) == -1) - error("setsockopt IP_TOS %d: %.100s:", - tos, strerror(errno)); - break; -# endif /* IP_TOS */ -# ifdef IPV6_TCLASS - case AF_INET6: - debug3_f("set IPV6_TCLASS 0x%02x", tos); - if (setsockopt(ssh->state->connection_in, - IPPROTO_IPV6, IPV6_TCLASS, &tos, sizeof(tos)) == -1) - error("setsockopt IPV6_TCLASS %d: %.100s:", - tos, strerror(errno)); - break; -# endif /* IPV6_TCLASS */ - } -#endif /* IP_TOS_IS_BROKEN */ + set_sock_tos(ssh->state->connection_in, tos); } /* Informs that the current session is interactive. Sets IP flags for that. */ @@ -2113,8 +2080,7 @@ ssh_packet_set_interactive(struct ssh *ssh, int interactive, int qos_interactive if (!ssh_packet_connection_is_on_socket(ssh)) return; set_nodelay(state->connection_in); - ssh_packet_set_tos(ssh, interactive ? qos_interactive : - qos_bulk); + ssh_packet_set_tos(ssh, interactive ? qos_interactive : qos_bulk); } /* Returns true if the current connection is interactive. */ diff --git a/sshconnect.c b/sshconnect.c index dfee55a85b63..6b60ca0d3bc3 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.344 2020/11/22 22:37:11 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.345 2020/11/27 00:49:58 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -30,6 +30,7 @@ #include #include #include +#include #include #ifdef HAVE_PATHS_H #include @@ -363,6 +364,10 @@ ssh_create_socket(struct addrinfo *ai) } fcntl(sock, F_SETFD, FD_CLOEXEC); + /* Use interactive QOS (if specified) until authentication completed */ + if (options.ip_qos_interactive != INT_MAX) + set_sock_tos(sock, options.ip_qos_interactive); + /* Bind the socket to an alternative local IP address */ if (options.bind_address == NULL && options.bind_interface == NULL) return sock; From 57bf03f0217554afb8980f6697a7a0b88658d0a9 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 27 Nov 2020 10:12:30 +0000 Subject: [PATCH 0098/1788] upstream: Document ssh-keygen -Z, sanity check its argument earlier and provide a better error message if it's not correct. Prompted by bz#2879, ok djm@ jmc@ OpenBSD-Commit-ID: 484178a173e92230fb1803fb4f206d61f7b58005 --- ssh-keygen.1 | 13 +++++++++++-- ssh-keygen.c | 9 ++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ssh-keygen.1 b/ssh-keygen.1 index e09d6475e8b9..43c8aa2f5839 100644 --- a/ssh-keygen.1 +++ b/ssh-keygen.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: ssh-keygen.1,v 1.211 2020/11/17 11:23:58 dtucker Exp $ +.\" $OpenBSD: ssh-keygen.1,v 1.212 2020/11/27 10:12:30 dtucker Exp $ .\" .\" Author: Tatu Ylonen .\" Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -35,7 +35,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: November 17 2020 $ +.Dd $Mdocdate: November 27 2020 $ .Dt SSH-KEYGEN 1 .Os .Sh NAME @@ -53,6 +53,7 @@ .Op Fl O Ar option .Op Fl t Cm dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa .Op Fl w Ar provider +.Op Fl Z Ar cipher .Nm ssh-keygen .Fl p .Op Fl a Ar rounds @@ -60,6 +61,7 @@ .Op Fl m Ar format .Op Fl N Ar new_passphrase .Op Fl P Ar old_passphrase +.Op Fl Z Ar cipher .Nm ssh-keygen .Fl i .Op Fl f Ar input_keyfile @@ -740,6 +742,13 @@ returning a zero exit status. .It Fl y This option will read a private OpenSSH format file and print an OpenSSH public key to stdout. +.It Fl Z Ar cipher +Specifies the cipher to use for encryption when writing an OpenSSH-format +private key file. +The list of available ciphers may be obtained using +.Qq ssh -Q cipher . +The default is +.Dq aes256-ctr . .It Fl z Ar serial_number Specifies a serial number to be embedded in the certificate to distinguish this certificate from others from the same CA. diff --git a/ssh-keygen.c b/ssh-keygen.c index 9ce7befa551f..fd11ffad454f 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.424 2020/11/08 22:37:24 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.425 2020/11/27 10:12:30 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -3067,9 +3067,9 @@ usage(void) "usage: ssh-keygen [-q] [-a rounds] [-b bits] [-C comment] [-f output_keyfile]\n" " [-m format] [-N new_passphrase] [-O option]\n" " [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa]\n" - " [-w provider]\n" + " [-w provider] [-Z cipher]\n" " ssh-keygen -p [-a rounds] [-f keyfile] [-m format] [-N new_passphrase]\n" - " [-P old_passphrase]\n" + " [-P old_passphrase] [-Z cipher]\n" " ssh-keygen -i [-f input_keyfile] [-m key_format]\n" " ssh-keygen -e [-f input_keyfile] [-m key_format]\n" " ssh-keygen -y [-f input_keyfile]\n" @@ -3258,6 +3258,9 @@ main(int argc, char **argv) break; case 'Z': openssh_format_cipher = optarg; + if (cipher_by_name(openssh_format_cipher) == NULL) + fatal("Invalid OpenSSH-format cipher '%s'", + openssh_format_cipher); break; case 'C': identity_comment = optarg; From 022def7bd16c3426a95e25f57cb259d54468341c Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 28 Nov 2020 03:27:59 +0000 Subject: [PATCH 0099/1788] upstream: check result of strchr() against NULL rather than searched-for characters; from zhongjubin@huawei.com OpenBSD-Commit-ID: e6f57de1d4a4d25f8db2d44e8d58d847e247a4fe --- session.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/session.c b/session.c index b25cbca69d12..2f716ce97bde 100644 --- a/session.c +++ b/session.c @@ -1,4 +1,4 @@ -/* $OpenBSD: session.c,v 1.325 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: session.c,v 1.326 2020/11/28 03:27:59 djm Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -1105,7 +1105,7 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell) for (n = 0 ; n < auth_opts->nenv; n++) { ocp = xstrdup(auth_opts->env[n]); cp = strchr(ocp, '='); - if (*cp == '=') { + if (cp != NULL) { *cp = '\0'; /* Apply PermitUserEnvironment allowlist */ if (options.permit_user_env_allowlist == NULL || From b755264e7d3cdf1de34e18df1af4efaa76a3c015 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sat, 28 Nov 2020 12:52:32 +0000 Subject: [PATCH 0100/1788] upstream: Include cipher.h for declaration of cipher_by_name. OpenBSD-Commit-ID: ddfebbca03ca0e14e00bbad9d35f94b99655d032 --- ssh-keygen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ssh-keygen.c b/ssh-keygen.c index fd11ffad454f..634e1ee348ac 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.425 2020/11/27 10:12:30 dtucker Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.426 2020/11/28 12:52:32 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -65,6 +65,7 @@ #include "sshsig.h" #include "ssh-sk.h" #include "sk-api.h" /* XXX for SSH_SK_USER_PRESENCE_REQD; remove */ +#include "cipher.h" #ifdef WITH_OPENSSL # define DEFAULT_KEY_TYPE_NAME "rsa" From 2bcbf679de838bb77a8bd7fa18e100df471a679c Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 30 Nov 2020 05:36:39 +0000 Subject: [PATCH 0101/1788] upstream: Ignore comments at the end of config lines in ssh_config, similar to what we already do for sshd_config. bz#2320, with & ok djm@ OpenBSD-Commit-ID: bdbf9fc5bc72b1a14266f5f61723ed57307a6db4 --- readconf.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/readconf.c b/readconf.c index 09b5e086a114..d60eeacfdb7b 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.342 2020/11/15 22:34:58 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.343 2020/11/30 05:36:39 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1899,7 +1899,7 @@ read_config_file_depth(const char *filename, struct passwd *pw, int flags, int *activep, int *want_final_pass, int depth) { FILE *f; - char *line = NULL; + char *cp, *line = NULL; size_t linesize = 0; int linenum; int bad_options = 0; @@ -1930,6 +1930,13 @@ read_config_file_depth(const char *filename, struct passwd *pw, while (getline(&line, &linesize, f) != -1) { /* Update line number counter. */ linenum++; + /* + * Trim out comments and strip whitespace. + * NB - preserve newlines, they are needed to reproduce + * line numbers later for error messages. + */ + if ((cp = strchr(line, '#')) != NULL) + *cp = '\0'; if (process_config_line_depth(options, pw, host, original_host, line, filename, linenum, activep, flags, want_final_pass, depth) != 0) From ee22db7c5885a1d90219202c0695bc621aa0409b Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 4 Dec 2020 02:25:13 +0000 Subject: [PATCH 0102/1788] upstream: make program name be const OpenBSD-Commit-ID: ece25680ec637fdf20502721ccb0276691df5384 --- log.c | 7 ++++--- log.h | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/log.c b/log.c index f57e7550656e..4d786c2cf63b 100644 --- a/log.c +++ b/log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: log.c,v 1.55 2020/10/18 11:21:59 djm Exp $ */ +/* $OpenBSD: log.c,v 1.56 2020/12/04 02:25:13 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -57,7 +57,7 @@ static LogLevel log_level = SYSLOG_LEVEL_INFO; static int log_on_stderr = 1; static int log_stderr_fd = STDERR_FILENO; static int log_facility = LOG_AUTH; -static char *argv0; +static const char *argv0; static log_handler_fn *log_handler; static void *log_handler_ctx; static char **log_verbose; @@ -191,7 +191,8 @@ log_verbose_reset(void) */ void -log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr) +log_init(const char *av0, LogLevel level, SyslogFacility facility, + int on_stderr) { #if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) struct syslog_data sdata = SYSLOG_DATA_INIT; diff --git a/log.h b/log.h index ee81ec568832..5ec793ceef46 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.29 2020/10/18 11:21:59 djm Exp $ */ +/* $OpenBSD: log.h,v 1.30 2020/12/04 02:25:13 djm Exp $ */ /* * Author: Tatu Ylonen @@ -52,7 +52,7 @@ typedef enum { typedef void (log_handler_fn)(const char *, const char *, int, LogLevel, const char *, void *); -void log_init(char *, LogLevel, SyslogFacility, int); +void log_init(const char *, LogLevel, SyslogFacility, int); LogLevel log_level_get(void); int log_change_level(LogLevel); int log_is_on_stderr(void); From ac0364b85e66eb53da2f9618f699ba6bd195ceea Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 4 Dec 2020 02:27:08 +0000 Subject: [PATCH 0103/1788] upstream: typos: s/hex/kex/ in error messages OpenBSD-Commit-ID: 43a026c9571dd779ec148de1829cf5a6b6651905 --- kex.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kex.c b/kex.c index 2cf3f73bb46e..b9f45dd72073 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.160 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.161 2020/12/04 02:27:08 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -535,7 +535,7 @@ kex_send_kexinit(struct ssh *ssh) int r; if (kex == NULL) { - error_f("no hex"); + error_f("no kex"); return SSH_ERR_INTERNAL_ERROR; } if (kex->flags & KEX_INIT_SENT) @@ -577,7 +577,7 @@ kex_input_kexinit(int type, u_int32_t seq, struct ssh *ssh) debug("SSH2_MSG_KEXINIT received"); if (kex == NULL) { - error_f("no hex"); + error_f("no kex"); return SSH_ERR_INTERNAL_ERROR; } ssh_dispatch_set(ssh, SSH2_MSG_KEXINIT, NULL); From 553b90feedd7da5b90901d73005f86705456d686 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 4 Dec 2020 02:27:57 +0000 Subject: [PATCH 0104/1788] upstream: fix minor memleak of kex->hostkey_alg on rekex OpenBSD-Commit-ID: 2c3969c74966d4ccdfeff5e5f0df0791919aef50 --- kex.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kex.c b/kex.c index b9f45dd72073..4a36310a377e 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.161 2020/12/04 02:27:08 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.162 2020/12/04 02:27:57 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -837,6 +837,7 @@ choose_kex(struct kex *k, char *client, char *server) static int choose_hostkeyalg(struct kex *k, char *client, char *server) { + free(k->hostkey_alg); k->hostkey_alg = match_list(client, server, NULL); debug("kex: host key algorithm: %s", From 3b98b6e27f8a122dbfda9966b1afeb3e371cce91 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 4 Dec 2020 02:29:25 +0000 Subject: [PATCH 0105/1788] upstream: memleak of DH public bignum; found with libfuzzer OpenBSD-Commit-ID: 0e913b542c3764b100b1571fdb0d0e5cc086fe97 --- kexdh.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kexdh.c b/kexdh.c index 6e0159f9f101..001dd12db57a 100644 --- a/kexdh.c +++ b/kexdh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexdh.c,v 1.33 2020/05/08 05:13:14 djm Exp $ */ +/* $OpenBSD: kexdh.c,v 1.34 2020/12/04 02:29:25 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl. All rights reserved. * @@ -194,6 +194,7 @@ kex_dh_dec(struct kex *kex, const struct sshbuf *dh_blob, *shared_secretp = buf; buf = NULL; out: + BN_free(dh_pub); DH_free(kex->dh); kex->dh = NULL; sshbuf_free(buf); From ace12dc64f8e3a2496ca48d36b53cb3c0a090755 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 4 Dec 2020 02:29:56 +0000 Subject: [PATCH 0106/1788] upstream: make ssh_free(NULL) a no-op OpenBSD-Commit-ID: 42cb285d94789cefe6608db89c63040ab0a80fa0 --- ssh_api.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ssh_api.c b/ssh_api.c index 9479eb61b424..f1fd2d77ffa2 100644 --- a/ssh_api.c +++ b/ssh_api.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh_api.c,v 1.22 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh_api.c,v 1.23 2020/12/04 02:29:56 djm Exp $ */ /* * Copyright (c) 2012 Markus Friedl. All rights reserved. * @@ -152,6 +152,9 @@ ssh_free(struct ssh *ssh) { struct key_entry *k; + if (ssh == NULL) + return; + /* * we've only created the public keys variants in case we * are a acting as a server. From e4d1a0b40add800b6e9352b40c2223e44acc3a45 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 4 Dec 2020 02:41:10 +0000 Subject: [PATCH 0107/1788] upstream: shuffle a few utility functions into sftp-client.c; from Jakub Jelen OpenBSD-Commit-ID: fdeb1aae1f6149b193f12cd2af158f948c514a2a --- sftp-client.c | 51 +++++++++++++++++++++++++++++++++++++++++++- sftp-client.h | 15 ++++++++++++- sftp.c | 58 +++++---------------------------------------------- 3 files changed, 69 insertions(+), 55 deletions(-) diff --git a/sftp-client.c b/sftp-client.c index d82e31aeeec4..4603b0098779 100644 --- a/sftp-client.c +++ b/sftp-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.c,v 1.138 2020/11/20 03:16:56 dtucker Exp $ */ +/* $OpenBSD: sftp-client.c,v 1.139 2020/12/04 02:41:10 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -1959,3 +1959,52 @@ path_append(const char *p1, const char *p2) return(ret); } +char * +make_absolute(char *p, const char *pwd) +{ + char *abs_str; + + /* Derelativise */ + if (p && !path_absolute(p)) { + abs_str = path_append(pwd, p); + free(p); + return(abs_str); + } else + return(p); +} + +int +remote_is_dir(struct sftp_conn *conn, const char *path) +{ + Attrib *a; + + /* XXX: report errors? */ + if ((a = do_stat(conn, path, 1)) == NULL) + return(0); + if (!(a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS)) + return(0); + return(S_ISDIR(a->perm)); +} + + +int +local_is_dir(const char *path) +{ + struct stat sb; + + /* XXX: report errors? */ + if (stat(path, &sb) == -1) + return(0); + + return(S_ISDIR(sb.st_mode)); +} + +/* Check whether path returned from glob(..., GLOB_MARK, ...) is a directory */ +int +globpath_is_dir(const char *pathname) +{ + size_t l = strlen(pathname); + + return l > 0 && pathname[l - 1] == '/'; +} + diff --git a/sftp-client.h b/sftp-client.h index 63a9b8b13bdc..32a24a3c4302 100644 --- a/sftp-client.h +++ b/sftp-client.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.h,v 1.28 2019/01/16 23:23:45 djm Exp $ */ +/* $OpenBSD: sftp-client.h,v 1.29 2020/12/04 02:41:10 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller @@ -142,4 +142,17 @@ int upload_dir(struct sftp_conn *, const char *, const char *, int, int, int, /* Concatenate paths, taking care of slashes. Caller must free result. */ char *path_append(const char *, const char *); +/* Make absolute path if relative path and CWD is given. Does not modify + * original if the the path is already absolute. */ +char *make_absolute(char *, const char *); + +/* Check if remote path is directory */ +int remote_is_dir(struct sftp_conn *conn, const char *path); + +/* Check if local path is directory */ +int local_is_dir(const char *path); + +/* Check whether path returned from glob(..., GLOB_MARK, ...) is a directory */ +int globpath_is_dir(const char *pathname); + #endif diff --git a/sftp.c b/sftp.c index b641be2bc4c7..248d452100d8 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.204 2020/10/29 02:52:43 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.205 2020/12/04 02:41:10 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -385,20 +385,6 @@ path_strip(const char *path, const char *strip) return (xstrdup(path)); } -static char * -make_absolute(char *p, const char *pwd) -{ - char *abs_str; - - /* Derelativise */ - if (p && !path_absolute(p)) { - abs_str = path_append(pwd, p); - free(p); - return(abs_str); - } else - return(p); -} - static int parse_getput_flags(const char *cmd, char **argv, int argc, int *aflag, int *fflag, int *pflag, int *rflag) @@ -607,40 +593,6 @@ parse_no_flags(const char *cmd, char **argv, int argc) return optind; } -static int -is_dir(const char *path) -{ - struct stat sb; - - /* XXX: report errors? */ - if (stat(path, &sb) == -1) - return(0); - - return(S_ISDIR(sb.st_mode)); -} - -static int -remote_is_dir(struct sftp_conn *conn, const char *path) -{ - Attrib *a; - - /* XXX: report errors? */ - if ((a = do_stat(conn, path, 1)) == NULL) - return(0); - if (!(a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS)) - return(0); - return(S_ISDIR(a->perm)); -} - -/* Check whether path returned from glob(..., GLOB_MARK, ...) is a directory */ -static int -pathname_is_dir(const char *pathname) -{ - size_t l = strlen(pathname); - - return l > 0 && pathname[l - 1] == '/'; -} - static int process_get(struct sftp_conn *conn, const char *src, const char *dst, const char *pwd, int pflag, int rflag, int resume, int fflag) @@ -670,7 +622,7 @@ process_get(struct sftp_conn *conn, const char *src, const char *dst, * If multiple matches then dst must be a directory or * unspecified. */ - if (g.gl_matchc > 1 && dst != NULL && !is_dir(dst)) { + if (g.gl_matchc > 1 && dst != NULL && !local_is_dir(dst)) { error("Multiple source paths, but destination " "\"%s\" is not a directory", dst); err = -1; @@ -687,7 +639,7 @@ process_get(struct sftp_conn *conn, const char *src, const char *dst, } if (g.gl_matchc == 1 && dst) { - if (is_dir(dst)) { + if (local_is_dir(dst)) { abs_dst = path_append(dst, filename); } else { abs_dst = xstrdup(dst); @@ -706,7 +658,7 @@ process_get(struct sftp_conn *conn, const char *src, const char *dst, else if (!quiet && !resume) mprintf("Fetching %s to %s\n", g.gl_pathv[i], abs_dst); - if (pathname_is_dir(g.gl_pathv[i]) && (rflag || global_rflag)) { + if (globpath_is_dir(g.gl_pathv[i]) && (rflag || global_rflag)) { if (download_dir(conn, g.gl_pathv[i], abs_dst, NULL, pflag || global_pflag, 1, resume, fflag || global_fflag) == -1) @@ -799,7 +751,7 @@ process_put(struct sftp_conn *conn, const char *src, const char *dst, else if (!quiet && !resume) mprintf("Uploading %s to %s\n", g.gl_pathv[i], abs_dst); - if (pathname_is_dir(g.gl_pathv[i]) && (rflag || global_rflag)) { + if (globpath_is_dir(g.gl_pathv[i]) && (rflag || global_rflag)) { if (upload_dir(conn, g.gl_pathv[i], abs_dst, pflag || global_pflag, 1, resume, fflag || global_fflag) == -1) From 021ff33e383c77b11badd60cec5b141a3e3fa532 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 4 Dec 2020 13:57:43 +1100 Subject: [PATCH 0108/1788] use options that work with recent clang --- regress/misc/fuzz-harness/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regress/misc/fuzz-harness/Makefile b/regress/misc/fuzz-harness/Makefile index 64fbdbab162b..521a1054c5c0 100644 --- a/regress/misc/fuzz-harness/Makefile +++ b/regress/misc/fuzz-harness/Makefile @@ -1,6 +1,6 @@ # NB. libssh and libopenbsd-compat should be built with the same sanitizer opts. -CXX=clang++-6.0 -FUZZ_FLAGS=-fsanitize=address,undefined -fsanitize-coverage=edge,trace-pc +CXX=clang++-9 +FUZZ_FLAGS=-fsanitize=address,fuzzer FUZZ_LIBS=-lFuzzer CXXFLAGS=-O2 -g -Wall -Wextra -Wno-unused-parameter -I ../../.. $(FUZZ_FLAGS) From a5ab499bd2644b4026596fc2cb24a744fa310666 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 4 Dec 2020 14:01:27 +1100 Subject: [PATCH 0109/1788] basic KEX fuzzer; adapted from Markus' unittest --- regress/misc/fuzz-harness/Makefile | 5 +- regress/misc/fuzz-harness/kex_fuzz.cc | 521 ++++++++++++++++++++++++++ 2 files changed, 525 insertions(+), 1 deletion(-) create mode 100644 regress/misc/fuzz-harness/kex_fuzz.cc diff --git a/regress/misc/fuzz-harness/Makefile b/regress/misc/fuzz-harness/Makefile index 521a1054c5c0..f5fda72f4b21 100644 --- a/regress/misc/fuzz-harness/Makefile +++ b/regress/misc/fuzz-harness/Makefile @@ -9,7 +9,7 @@ LIBS=-lssh -lopenbsd-compat -lcrypto -lfido2 -lcbor $(FUZZ_LIBS) COMMON_OBJS=ssh-sk-null.o TARGETS=pubkey_fuzz sig_fuzz authopt_fuzz sshsig_fuzz \ - sshsigopt_fuzz privkey_fuzz + sshsigopt_fuzz privkey_fuzz kex_fuzz all: $(TARGETS) @@ -34,5 +34,8 @@ sshsigopt_fuzz: sshsigopt_fuzz.o $(COMMON_OBJS) privkey_fuzz: privkey_fuzz.o $(COMMON_OBJS) $(CXX) -o $@ privkey_fuzz.o $(COMMON_OBJS) $(LDFLAGS) $(LIBS) +kex_fuzz: kex_fuzz.o $(COMMON_OBJS) + $(CXX) -o $@ kex_fuzz.o $(COMMON_OBJS) $(LDFLAGS) $(LIBS) -lz + clean: -rm -f *.o $(TARGETS) diff --git a/regress/misc/fuzz-harness/kex_fuzz.cc b/regress/misc/fuzz-harness/kex_fuzz.cc new file mode 100644 index 000000000000..c1e2a2009076 --- /dev/null +++ b/regress/misc/fuzz-harness/kex_fuzz.cc @@ -0,0 +1,521 @@ +// libfuzzer driver for key exchange fuzzing. + + +#include +#include +#include +#include +#include +#include + +extern "C" { + +#include "includes.h" +#include "ssherr.h" +#include "ssh_api.h" +#include "sshbuf.h" +#include "packet.h" +#include "myproposal.h" +#include "xmalloc.h" +#include "authfile.h" +#include "log.h" + +// Define if you want to generate traces. +// #define STANDALONE 1 + +#define PRIV_RSA \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn\n"\ +"NhAAAAAwEAAQAAAQEA3+epf+VGKoGPaAZXrf6S0cyumQnddkGBnVFX0A5eh37RtLug0qY5\n"\ +"thxsBUbGGVr9mTd2QXwLujBwYg5l1MP/Fmg+5312Zgx9pHmS+qKULbar0hlNgptNEb+aNU\n"\ +"d3o9qg3aXqXm7+ZnjAV05ef/mxNRN2ZvuEkw7cRppTJcbBI+vF3lXuCXnX2klDI95Gl2AW\n"\ +"3WHRtanqLHZXuBkjjRBDKc7MUq/GP1hmLiAd95dvU7fZjRlIEsP84zGEI1Fb0L/kmPHcOt\n"\ +"iVfHft8CtmC9v6+94JrOiPBBNScV+dyrgAGPsdKdr/1vIpQmCNiI8s3PCiD8J7ZiBaYm0I\n"\ +"8fq5G/qnUwAAA7ggw2dXIMNnVwAAAAdzc2gtcnNhAAABAQDf56l/5UYqgY9oBlet/pLRzK\n"\ +"6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZm\n"\ +"DH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGml\n"\ +"MlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29T\n"\ +"t9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v\n"\ +"/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdTAAAAAwEAAQAAAQEArWm5B4tFasppjUHM\n"\ +"SsAuajtCxtizI1Hc10EW59cZM4vvUzE2f6+qZvdgWj3UU/L7Et23w0QVuSCnCerox379ZB\n"\ +"ddEOFFAAiQjwBx65hbd4RRUymxtIQfjq18++LcMJW1nbVQ7c69ThQbtALIggmbS+ZE/8Gx\n"\ +"jkwmIrCH0Ww8TlpsPe+mNHuyNk7UEZoXLm22lNLqq5qkIL5JgT6M2iNJpMOJy9/CKi6kO4\n"\ +"JPuVwjdG4C5pBPaMN3KJ1IvAlSlLGNaXnfXcn85gWfsCjsZmH3liey2NJamqp/w83BrKUg\n"\ +"YZvMR2qeWZaKkFTahpzN5KRK1BFeB37O0P84Dzh1biDX8QAAAIEAiWXW8ePYFwLpa2mFIh\n"\ +"VvRTdcrN70rVK5eWVaL3pyS4vGA56Jixq86dHveOnbSY+iNb1jQidtXc8SWUt2wtHqZ32h\n"\ +"Lji9/hMSKqe9SEP3xvDRDmUJqsVw0ySyrFrzm4160QY6RKU3CIQCVFslMZ9fxmrfZ/hxoU\n"\ +"0X3FVsxmC4+kwAAACBAPOc1YERpV6PjANBrGR+1o1RCdACbm5myc42QzSNIaOZmgrYs+Gt\n"\ +"7+EcoqSdbJzHJNCNQfF+A+vjbIkFiuZqq/5wwr59qXx5OAlijLB/ywwKmTWq6lp//Zxny+\n"\ +"ka3sIGNO14eQvmxNDnlLL+RIZleCTEKBXSW6CZhr+uHMZFKKMtAAAAgQDrSkm+LbILB7H9\n"\ +"jxEBZLhv53aAn4u81kFKQOJ7PzzpBGSoD12i7oIJu5siSD5EKDNVEr+SvCf0ISU3BuMpzl\n"\ +"t3YrPrHRheOFhn5e3j0e//zB8rBC0DGB4CtTDdeh7rOXUL4K0pz+8wEpNkV62SWxhC6NRW\n"\ +"I79JhtGkh+GtcnkEfwAAAAAB\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_RSA \ +"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf56l/5UYqgY9oBlet/pLRzK6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZmDH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGmlMlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29Tt9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdT" +#define PRIV_DSA \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsgAAAAdzc2gtZH\n"\ +"NzAAAAgQCsGTfjpQ465EOkfQXJM9BOvfRQE0fqlykAls+ncz+T7hrbeScRu8xpwzsznJNm\n"\ +"xlW8o6cUDiHmBJ5OHgamUC9N7YJeU/6fnOAZifgN8mqK6k8pKHuje8ANOiYgHLl0yiASQA\n"\ +"3//qMyzZ+W/hemoLSmLAbEqlfWVeyYx+wta1Vm+QAAABUAvWyehvUvdHvQxavYgS5p0t5Q\n"\ +"d7UAAACBAIRA9Yy+f4Kzqpv/qICPO3zk42UuP7WAhSW2nCbQdLlCiSTxcjKgcvXNRckwJP\n"\ +"44JjSHOtJy/AMtJrPIbLYG6KuWTdBlEHFiG6DafvLG+qPMSL2bPjXTOhuOMbCHIZ+5WBkW\n"\ +"THeG/Nv11iI01Of9V6tXkig23K370flkRkXFi9MdAAAAgCt6YUcQkNwG7B/e5M1FZsLP9O\n"\ +"kVB3BwLAOjmWdHpyhu3HpwSJa3XLEvhXN0i6IVI2KgPo/2GtYA6rHt14L+6u1pmhh8sAvQ\n"\ +"ksp3qZB+xh/NP+hBqf0sbHX0yYbzKOvI5SCc/kKK6yagcBZOsubM/KC8TxyVgmD5c6WzYs\n"\ +"h5TEpvAAAB2PHjRbbx40W2AAAAB3NzaC1kc3MAAACBAKwZN+OlDjrkQ6R9Bckz0E699FAT\n"\ +"R+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4B\n"\ +"mJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1r\n"\ +"VWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS\n"\ +"4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIb\n"\ +"oNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRc\n"\ +"WL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SL\n"\ +"ohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJ\n"\ +"z+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8AAAAUUA+OGldMi76ClO/sstpdbBUE\n"\ +"lq8AAAAAAQI=\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_DSA \ +"ssh-dss AAAAB3NzaC1kc3MAAACBAKwZN+OlDjrkQ6R9Bckz0E699FATR+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4BmJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1rVWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIboNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRcWL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SLohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJz+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8=" +#define PRIV_ECDSA \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS\n"\ +"1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTDJ0VlMv+0rguNzaJ1DF2KueHaxRSQ\n"\ +"6LpIxGbulrg1a8RPbnMXwag5GcDiDllD2lDUJUuBEWyjXA0rZoZX35ELAAAAoE/Bbr5PwW\n"\ +"6+AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43N\n"\ +"onUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQ\n"\ +"sAAAAhAIhE6hCID5oOm1TDktc++KFKyScjLifcZ6Cgv5xSSyLOAAAAAAECAwQFBgc=\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_ECDSA \ +"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43NonUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQs=" +#define PRIV_ED25519 \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\n"\ +"QyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAIhWlP99VpT/\n"\ +"fQAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAw\n"\ +"AAAEDE1rlcMC0s0X3TKVZAOVavZOywwkXw8tO5dLObxaCMEDPQXmEVMVLmeFRyafKMVWgP\n"\ +"Dkv8/uRBTwmcEDatZzMDAAAAAAECAwQF\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_ED25519 \ +"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDPQXmEVMVLmeFRyafKMVWgPDkv8/uRBTwmcEDatZzMD" + +static int prepare_key(struct shared_state *st, int keytype, int bits); + +struct shared_state { + size_t nkeys; + struct sshkey **privkeys, **pubkeys; +}; + +struct test_state { + struct sshbuf *smsgs, *cmsgs; /* output, for standalone mode */ + struct sshbuf *sin, *cin; /* input; setup per-test in do_kex_with_key */ + struct sshbuf *s_template, *c_template; /* main copy of input */ +}; + +static int +do_send_and_receive(struct ssh *from, struct ssh *to, + struct sshbuf *store, int clobber, size_t *n) +{ + u_char type; + size_t len; + const u_char *buf; + int r; + + for (*n = 0;; (*n)++) { + if ((r = ssh_packet_next(from, &type)) != 0) { + debug_fr(r, "ssh_packet_next"); + return r; + } + if (type != 0) + return 0; + buf = ssh_output_ptr(from, &len); + debug_f("%zu%s", len, clobber ? " ignore" : ""); + if (len == 0) + return 0; + if ((r = ssh_output_consume(from, len)) != 0) { + debug_fr(r, "ssh_output_consume"); + return r; + } + if (store != NULL && (r = sshbuf_put(store, buf, len)) != 0) { + debug_fr(r, "sshbuf_put"); + return r; + } + if (!clobber && (r = ssh_input_append(to, buf, len)) != 0) { + debug_fr(r, "ssh_input_append"); + return r; + } + } +} + +static int +run_kex(struct test_state *ts, struct ssh *client, struct ssh *server) +{ + int r = 0; + size_t cn, sn; + + /* If fuzzing, replace server/client input */ + if (ts->sin != NULL) { + if ((r = ssh_input_append(server, sshbuf_ptr(ts->sin), + sshbuf_len(ts->sin))) != 0) { + error_fr(r, "ssh_input_append"); + return r; + } + sshbuf_reset(ts->sin); + } + if (ts->cin != NULL) { + if ((r = ssh_input_append(client, sshbuf_ptr(ts->cin), + sshbuf_len(ts->cin))) != 0) { + error_fr(r, "ssh_input_append"); + return r; + } + sshbuf_reset(ts->cin); + } + while (!server->kex->done || !client->kex->done) { + cn = sn = 0; + debug_f("S:"); + if ((r = do_send_and_receive(server, client, + ts->smsgs, ts->cin != NULL, &sn)) != 0) { + debug_fr(r, "S->C"); + break; + } + debug_f("C:"); + if ((r = do_send_and_receive(client, server, + ts->cmsgs, ts->sin != NULL, &cn)) != 0) { + debug_fr(r, "C->S"); + break; + } + if (cn == 0 && sn == 0) { + debug_f("kex stalled"); + r = SSH_ERR_PROTOCOL_ERROR; + break; + } + } + debug_fr(r, "done"); + return r; +} + +static void +store_key(struct shared_state *st, struct sshkey *pubkey, + struct sshkey *privkey) +{ + if (st == NULL || pubkey->type < 0 || pubkey->type > INT_MAX || + privkey->type != pubkey->type || + ((size_t)pubkey->type < st->nkeys && + st->pubkeys[pubkey->type] != NULL)) + abort(); + if ((size_t)pubkey->type >= st->nkeys) { + st->pubkeys = (struct sshkey **)xrecallocarray(st->pubkeys, + st->nkeys, pubkey->type + 1, sizeof(*st->pubkeys)); + st->privkeys = (struct sshkey **)xrecallocarray(st->privkeys, + st->nkeys, privkey->type + 1, sizeof(*st->privkeys)); + st->nkeys = privkey->type + 1; + } + debug_f("store %s at %d", sshkey_ssh_name(pubkey), pubkey->type); + st->pubkeys[pubkey->type] = pubkey; + st->privkeys[privkey->type] = privkey; +} + +static int +prepare_keys(struct shared_state *st) +{ + if (prepare_key(st, KEY_RSA, 2048) != 0 || + prepare_key(st, KEY_DSA, 1024) != 0 || + prepare_key(st, KEY_ECDSA, 256) != 0 || + prepare_key(st, KEY_ED25519, 256) != 0) { + error_f("key prepare failed"); + return -1; + } + return 0; +} + +static struct sshkey * +get_pubkey(struct shared_state *st, int keytype) +{ + if (st == NULL || keytype < 0 || (size_t)keytype >= st->nkeys || + st->pubkeys == NULL || st->pubkeys[keytype] == NULL) + abort(); + return st->pubkeys[keytype]; +} + +static struct sshkey * +get_privkey(struct shared_state *st, int keytype) +{ + if (st == NULL || keytype < 0 || (size_t)keytype >= st->nkeys || + st->privkeys == NULL || st->privkeys[keytype] == NULL) + abort(); + return st->privkeys[keytype]; +} + +static int +do_kex_with_key(struct shared_state *st, struct test_state *ts, + const char *kex, int keytype) +{ + struct ssh *client = NULL, *server = NULL; + struct sshkey *privkey = NULL, *pubkey = NULL; + struct sshbuf *state = NULL; + struct kex_params kex_params; + const char *ccp, *proposal[PROPOSAL_MAX] = { KEX_CLIENT }; + char *myproposal[PROPOSAL_MAX] = {0}, *keyname = NULL; + int i, r; + + ts->cin = ts->sin = NULL; + if (ts->c_template != NULL && + (ts->cin = sshbuf_fromb(ts->c_template)) == NULL) + abort(); + if (ts->s_template != NULL && + (ts->sin = sshbuf_fromb(ts->s_template)) == NULL) + abort(); + + pubkey = get_pubkey(st, keytype); + privkey = get_privkey(st, keytype); + keyname = xstrdup(sshkey_ssh_name(privkey)); + debug_f("%s %s clobber %s %zu", kex, keyname, + ts->cin == NULL ? "server" : "client", + ts->cin == NULL ? sshbuf_len(ts->sin) : sshbuf_len(ts->cin)); + for (i = 0; i < PROPOSAL_MAX; i++) { + ccp = proposal[i]; + if (i == PROPOSAL_SERVER_HOST_KEY_ALGS) + ccp = keyname; + else if (i == PROPOSAL_KEX_ALGS && kex != NULL) + ccp = kex; + if ((myproposal[i] = strdup(ccp)) == NULL) { + error_f("strdup prop %d", i); + goto fail; + } + } + memcpy(kex_params.proposal, myproposal, sizeof(myproposal)); + if ((r = ssh_init(&client, 0, &kex_params)) != 0) { + error_fr(r, "init client"); + goto fail; + } + if ((r = ssh_init(&server, 1, &kex_params)) != 0) { + error_fr(r, "init server"); + goto fail; + } + if ((r = ssh_add_hostkey(server, privkey)) != 0 || + (r = ssh_add_hostkey(client, pubkey)) != 0) { + error_fr(r, "add hostkeys"); + goto fail; + } + if ((r = run_kex(ts, client, server)) != 0) { + error_fr(r, "kex"); + goto fail; + } + /* XXX rekex, set_state, etc */ + fail: + for (i = 0; i < PROPOSAL_MAX; i++) + free(myproposal[i]); + sshbuf_free(ts->sin); + sshbuf_free(ts->cin); + sshbuf_free(state); + ssh_free(client); + ssh_free(server); + free(keyname); + return r; +} + +static int +prepare_key(struct shared_state *st, int kt, int bits) +{ + const char *pubstr = NULL; + const char *privstr = NULL; + char *tmp, *cp; + struct sshkey *privkey = NULL, *pubkey = NULL; + struct sshbuf *b = NULL; + int r; + + switch (kt) { + case KEY_RSA: + pubstr = PUB_RSA; + privstr = PRIV_RSA; + break; + case KEY_DSA: + pubstr = PUB_DSA; + privstr = PRIV_DSA; + break; + case KEY_ECDSA: + pubstr = PUB_ECDSA; + privstr = PRIV_ECDSA; + break; + case KEY_ED25519: + pubstr = PUB_ED25519; + privstr = PRIV_ED25519; + break; + default: + abort(); + } + if ((b = sshbuf_from(privstr, strlen(privstr))) == NULL) + abort(); + if ((r = sshkey_parse_private_fileblob(b, "", &privkey, NULL)) != 0) { + error_fr(r, "priv %d", kt); + abort(); + } + sshbuf_free(b); + tmp = cp = xstrdup(pubstr); + if ((pubkey = sshkey_new(KEY_UNSPEC)) == NULL) + abort(); + if ((r = sshkey_read(pubkey, &cp)) != 0) { + error_fr(r, "pub %d", kt); + abort(); + } + free(tmp); + + store_key(st, pubkey, privkey); + return 0; +} + +#if defined(STANDALONE) + +#if 0 /* use this if generating new keys to embed above */ +static int +prepare_key(struct shared_state *st, int keytype, int bits) +{ + struct sshkey *privkey = NULL, *pubkey = NULL; + int r; + + if ((r = sshkey_generate(keytype, bits, &privkey)) != 0) { + error_fr(r, "generate"); + abort(); + } + if ((r = sshkey_from_private(privkey, &pubkey)) != 0) { + error_fr(r, "make pubkey"); + abort(); + } + store_key(st, pubkey, privkey); + return 0; +} +#endif + +int main(void) +{ + static struct shared_state *st; + struct test_state *ts; + const int keytypes[] = { KEY_RSA, KEY_DSA, KEY_ECDSA, KEY_ED25519, -1 }; + const char *kextypes[] = { + "sntrup4591761x25519-sha512@tinyssh.org", + "curve25519-sha256@libssh.org", + "ecdh-sha2-nistp256", + "diffie-hellman-group1-sha1", + NULL, + }; + int i, j; + char *path; + FILE *f; + + if (st == NULL) { + st = (struct shared_state *)xcalloc(1, sizeof(*st)); + prepare_keys(st); + } + /* Run each kex method for each key and save client/server packets */ + for (i = 0; keytypes[i] != -1; i++) { + for (j = 0; kextypes[j] != NULL; j++) { + ts = (struct test_state *)xcalloc(1, sizeof(*ts)); + ts->smsgs = sshbuf_new(); + ts->cmsgs = sshbuf_new(); + do_kex_with_key(st, ts, kextypes[j], keytypes[i]); + xasprintf(&path, "S2C-%s-%s", + kextypes[j], sshkey_type(st->pubkeys[keytypes[i]])); + debug_f("%s", path); + if ((f = fopen(path, "wb+")) == NULL) + abort(); + if (fwrite(sshbuf_ptr(ts->smsgs), 1, + sshbuf_len(ts->smsgs), f) != sshbuf_len(ts->smsgs)) + abort(); + fclose(f); + free(path); + //sshbuf_dump(ts->smsgs, stderr); + xasprintf(&path, "C2S-%s-%s", + kextypes[j], sshkey_type(st->pubkeys[keytypes[i]])); + debug_f("%s", path); + if ((f = fopen(path, "wb+")) == NULL) + abort(); + if (fwrite(sshbuf_ptr(ts->cmsgs), 1, + sshbuf_len(ts->cmsgs), f) != sshbuf_len(ts->cmsgs)) + abort(); + fclose(f); + free(path); + //sshbuf_dump(ts->cmsgs, stderr); + sshbuf_free(ts->smsgs); + sshbuf_free(ts->cmsgs); + free(ts); + } + } + for (i = 0; keytypes[i] != -1; i++) { + xasprintf(&path, "%s.priv", + sshkey_type(st->privkeys[keytypes[i]])); + debug_f("%s", path); + if (sshkey_save_private(st->privkeys[keytypes[i]], path, + "", "", SSHKEY_PRIVATE_OPENSSH, NULL, 0) != 0) + abort(); + free(path); + xasprintf(&path, "%s.pub", + sshkey_type(st->pubkeys[keytypes[i]])); + debug_f("%s", path); + if (sshkey_save_public(st->pubkeys[keytypes[i]], path, "") != 0) + abort(); + free(path); + } +} +#else /* !STANDALONE */ +static void +do_kex(struct shared_state *st, struct test_state *ts, const char *kex) +{ + do_kex_with_key(st, ts, kex, KEY_RSA); + do_kex_with_key(st, ts, kex, KEY_DSA); + do_kex_with_key(st, ts, kex, KEY_ECDSA); + do_kex_with_key(st, ts, kex, KEY_ED25519); +} + +static void +kex_tests(struct shared_state *st, struct test_state *ts) +{ + do_kex(st, ts, "sntrup4591761x25519-sha512@tinyssh.org"); + do_kex(st, ts, "curve25519-sha256@libssh.org"); + do_kex(st, ts, "ecdh-sha2-nistp256"); + do_kex(st, ts, "diffie-hellman-group1-sha1"); +} + +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) +{ + static struct shared_state *st; + struct test_state *ts; + u_char crbuf[SSH_MAX_PRE_BANNER_LINES * 4]; + u_char zbuf[4096] = {0}; + static LogLevel loglevel = SYSLOG_LEVEL_INFO; + + if (st == NULL) { + if (getenv("DEBUG") != NULL || getenv("KEX_FUZZ_DEBUG") != NULL) + loglevel = SYSLOG_LEVEL_DEBUG3; + log_init("kex_fuzz", + loglevel, SYSLOG_FACILITY_AUTH, 1); + st = (struct shared_state *)xcalloc(1, sizeof(*st)); + prepare_keys(st); + } + + /* Ensure that we can complete (fail) banner exchange at least */ + memset(crbuf, '\n', sizeof(crbuf)); + + ts = (struct test_state *)xcalloc(1, sizeof(*ts)); + if ((ts->s_template = sshbuf_new()) == NULL || + sshbuf_put(ts->s_template, data, size) != 0 || + sshbuf_put(ts->s_template, crbuf, sizeof(crbuf)) != 0 || + sshbuf_put(ts->s_template, zbuf, sizeof(zbuf)) != 0) + abort(); + kex_tests(st, ts); + sshbuf_free(ts->s_template); + free(ts); + + ts = (struct test_state *)xcalloc(1, sizeof(*ts)); + if ((ts->c_template = sshbuf_new()) == NULL || + sshbuf_put(ts->c_template, data, size) != 0 || + sshbuf_put(ts->c_template, crbuf, sizeof(crbuf)) != 0 || + sshbuf_put(ts->c_template, zbuf, sizeof(zbuf)) != 0) + abort(); + kex_tests(st, ts); + sshbuf_free(ts->c_template); + free(ts); + + return 0; +} +#endif /* STANDALONE */ +} /* extern "C" */ From bef92346c4a808f33216e54d6f4948f9df2ad7c1 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Mon, 14 Dec 2020 03:13:12 +0000 Subject: [PATCH 0110/1788] upstream: use _PATH_SSH_USER_DIR instead of hardcoded .ssh in path OpenBSD-Commit-ID: 5c1048468813107baa872f5ee33ba51623630e01 --- session.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/session.c b/session.c index 2f716ce97bde..e63fc472c245 100644 --- a/session.c +++ b/session.c @@ -1,4 +1,4 @@ -/* $OpenBSD: session.c,v 1.326 2020/11/28 03:27:59 djm Exp $ */ +/* $OpenBSD: session.c,v 1.327 2020/12/14 03:13:12 djm Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -1120,8 +1120,8 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell) /* read $HOME/.ssh/environment. */ if (options.permit_user_env) { - snprintf(buf, sizeof buf, "%.200s/.ssh/environment", - pw->pw_dir); + snprintf(buf, sizeof buf, "%.200s/%s/environment", + pw->pw_dir, _PATH_SSH_USER_DIR); read_environment_file(&env, &envsize, buf, options.permit_user_env_allowlist); } From 43026da035cd266db37df1f723d5575056150744 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 17 Dec 2020 23:10:27 +0000 Subject: [PATCH 0111/1788] upstream: prepare readconf.c for fuzzing; remove fatal calls and fix some (one-off) memory leaks; ok markus@ OpenBSD-Commit-ID: 91c6aec57b0e7aae9190de188e9fe8933aad5ec5 --- readconf.c | 559 ++++++++++++++++++++++++++++++++++++-------------- readconf.h | 5 +- ssh-keysign.c | 4 +- ssh.c | 5 +- 4 files changed, 412 insertions(+), 161 deletions(-) diff --git a/readconf.c b/readconf.c index d60eeacfdb7b..c8ba5ddb532b 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.343 2020/11/30 05:36:39 dtucker Exp $ */ +/* $OpenBSD: readconf.c,v 1.344 2020/12/17 23:10:27 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -315,14 +315,20 @@ static struct { { NULL, oBadOption } }; -static char *kex_default_pk_alg_filtered; const char * kex_default_pk_alg(void) { - if (kex_default_pk_alg_filtered == NULL) - fatal("kex_default_pk_alg not initialized."); - return kex_default_pk_alg_filtered; + static char *pkalgs; + + if (pkalgs == NULL) { + char *all_key; + + all_key = sshkey_alg_list(0, 0, 1, ','); + pkalgs = match_filter_allowlist(KEX_DEFAULT_PK_ALG, all_key); + free(all_key); + } + return pkalgs; } char * @@ -873,8 +879,10 @@ parse_multistate_value(const char *arg, const char *filename, int linenum, { int i; - if (!arg || *arg == '\0') - fatal("%s line %d: missing argument.", filename, linenum); + if (!arg || *arg == '\0') { + error("%s line %d: missing argument.", filename, linenum); + return -1; + } for (i = 0; multistate_ptr[i].key != NULL; i++) { if (strcasecmp(arg, multistate_ptr[i].key) == 0) return multistate_ptr[i].value; @@ -959,14 +967,18 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, intptr = &options->connection_timeout; parse_time: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%s line %d: missing time value.", + if (!arg || *arg == '\0') { + error("%s line %d: missing time value.", filename, linenum); + return -1; + } if (strcmp(arg, "none") == 0) value = -1; - else if ((value = convtime(arg)) == -1) - fatal("%s line %d: invalid time value.", + else if ((value = convtime(arg)) == -1) { + error("%s line %d: invalid time value.", filename, linenum); + return -1; + } if (*activep && *intptr == -1) *intptr = value; break; @@ -975,9 +987,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, intptr = &options->forward_agent; arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%s line %d: missing argument.", + if (!arg || *arg == '\0') { + error("%s line %d: missing argument.", filename, linenum); + return -1; + } value = -1; multistate_ptr = multistate_flag; @@ -1007,8 +1021,9 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, arg = strdelim(&s); if ((value = parse_multistate_value(arg, filename, linenum, multistate_ptr)) == -1) { - fatal("%s line %d: unsupported option \"%s\".", + error("%s line %d: unsupported option \"%s\".", filename, linenum, arg); + return -1; } if (*activep && *intptr == -1) *intptr = value; @@ -1099,18 +1114,24 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oRekeyLimit: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", filename, + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; + } if (strcmp(arg, "default") == 0) { val64 = 0; } else { - if (scan_scaled(arg, &val64) == -1) - fatal("%.200s line %d: Bad number '%s': %s", + if (scan_scaled(arg, &val64) == -1) { + error("%.200s line %d: Bad number '%s': %s", filename, linenum, arg, strerror(errno)); - if (val64 != 0 && val64 < 16) - fatal("%.200s line %d: RekeyLimit too small", + return -1; + } + if (val64 != 0 && val64 < 16) { + error("%.200s line %d: RekeyLimit too small", filename, linenum); + return -1; + } } if (*activep && options->rekey_limit == -1) options->rekey_limit = val64; @@ -1126,13 +1147,19 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oIdentityFile: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", filename, linenum); + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", + filename, linenum); + return -1; + } if (*activep) { intptr = &options->num_identity_files; - if (*intptr >= SSH_MAX_IDENTITY_FILES) - fatal("%.200s line %d: Too many identity files specified (max %d).", - filename, linenum, SSH_MAX_IDENTITY_FILES); + if (*intptr >= SSH_MAX_IDENTITY_FILES) { + error("%.200s line %d: Too many identity files " + "specified (max %d).", filename, linenum, + SSH_MAX_IDENTITY_FILES); + return -1; + } add_identity_file(options, NULL, arg, flags & SSHCONF_USERCONF); } @@ -1140,16 +1167,19 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oCertificateFile: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; + } if (*activep) { intptr = &options->num_certificate_files; if (*intptr >= SSH_MAX_CERTIFICATE_FILES) { - fatal("%.200s line %d: Too many certificate " + error("%.200s line %d: Too many certificate " "files specified (max %d).", filename, linenum, SSH_MAX_CERTIFICATE_FILES); + return -1; } add_certificate_file(options, arg, flags & SSHCONF_USERCONF); @@ -1164,9 +1194,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, charptr = &options->user; parse_string: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; + } if (*activep && *charptr == NULL) *charptr = xstrdup(arg); break; @@ -1178,10 +1210,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, parse_char_array: if (*activep && *uintptr == 0) { while ((arg = strdelim(&s)) != NULL && *arg != '\0') { - if ((*uintptr) >= max_entries) - fatal("%s line %d: " - "too many known hosts files.", - filename, linenum); + if ((*uintptr) >= max_entries) { + error("%s line %d: too many known " + "hosts files.", filename, linenum); + return -1; + } cpptr[(*uintptr)++] = xstrdup(arg); } } @@ -1227,8 +1260,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, if (options->jump_host != NULL) charptr = &options->jump_host; /* Skip below */ parse_command: - if (s == NULL) - fatal("%.200s line %d: Missing argument.", filename, linenum); + if (s == NULL) { + error("%.200s line %d: Missing argument.", + filename, linenum); + return -1; + } len = strspn(s, WHITESPACE "="); if (*activep && *charptr == NULL) *charptr = xstrdup(s + len); @@ -1236,25 +1272,31 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oProxyJump: if (s == NULL) { - fatal("%.200s line %d: Missing argument.", + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; } len = strspn(s, WHITESPACE "="); if (parse_jump(s + len, options, *activep) == -1) { - fatal("%.200s line %d: Invalid ProxyJump \"%s\"", + error("%.200s line %d: Invalid ProxyJump \"%s\"", filename, linenum, s + len); + return -1; } return 0; case oPort: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; + } value = a2port(arg); - if (value <= 0) - fatal("%.200s line %d: Bad port '%s'.", + if (value <= 0) { + error("%.200s line %d: Bad port '%s'.", filename, linenum, arg); + return -1; + } if (*activep && options->port == -1) options->port = value; break; @@ -1263,47 +1305,63 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, intptr = &options->connection_attempts; parse_int: arg = strdelim(&s); - if ((errstr = atoi_err(arg, &value)) != NULL) - fatal("%s line %d: integer value %s.", + if ((errstr = atoi_err(arg, &value)) != NULL) { + error("%s line %d: integer value %s.", filename, linenum, errstr); + return -1; + } if (*activep && *intptr == -1) *intptr = value; break; case oCiphers: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", filename, linenum); + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", + filename, linenum); + return -1; + } if (*arg != '-' && - !ciphers_valid(*arg == '+' || *arg == '^' ? arg + 1 : arg)) - fatal("%.200s line %d: Bad SSH2 cipher spec '%s'.", + !ciphers_valid(*arg == '+' || *arg == '^' ? arg + 1 : arg)){ + error("%.200s line %d: Bad SSH2 cipher spec '%s'.", filename, linenum, arg ? arg : ""); + return -1; + } if (*activep && options->ciphers == NULL) options->ciphers = xstrdup(arg); break; case oMacs: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", filename, linenum); + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", + filename, linenum); + return -1; + } if (*arg != '-' && - !mac_valid(*arg == '+' || *arg == '^' ? arg + 1 : arg)) - fatal("%.200s line %d: Bad SSH2 MAC spec '%s'.", + !mac_valid(*arg == '+' || *arg == '^' ? arg + 1 : arg)) { + error("%.200s line %d: Bad SSH2 MAC spec '%s'.", filename, linenum, arg ? arg : ""); + return -1; + } if (*activep && options->macs == NULL) options->macs = xstrdup(arg); break; case oKexAlgorithms: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; + } if (*arg != '-' && !kex_names_valid(*arg == '+' || *arg == '^' ? - arg + 1 : arg)) - fatal("%.200s line %d: Bad SSH2 KexAlgorithms '%s'.", + arg + 1 : arg)) { + error("%.200s line %d: Bad SSH2 KexAlgorithms '%s'.", filename, linenum, arg ? arg : ""); + return -1; + } if (*activep && options->kex_algorithms == NULL) options->kex_algorithms = xstrdup(arg); break; @@ -1312,14 +1370,18 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, charptr = &options->hostkeyalgorithms; parse_keytypes: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; + } if (*arg != '-' && !sshkey_names_valid2(*arg == '+' || *arg == '^' ? - arg + 1 : arg, 1)) - fatal("%s line %d: Bad key types '%s'.", - filename, linenum, arg ? arg : ""); + arg + 1 : arg, 1)) { + error("%s line %d: Bad key types '%s'.", + filename, linenum, arg ? arg : ""); + return -1; + } if (*activep && *charptr == NULL) *charptr = xstrdup(arg); break; @@ -1332,9 +1394,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, log_level_ptr = &options->log_level; arg = strdelim(&s); value = log_level_number(arg); - if (value == SYSLOG_LEVEL_NOT_SET) - fatal("%.200s line %d: unsupported log level '%s'", + if (value == SYSLOG_LEVEL_NOT_SET) { + error("%.200s line %d: unsupported log level '%s'", filename, linenum, arg ? arg : ""); + return -1; + } if (*activep && *log_level_ptr == SYSLOG_LEVEL_NOT_SET) *log_level_ptr = (LogLevel) value; break; @@ -1343,9 +1407,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, log_facility_ptr = &options->log_facility; arg = strdelim(&s); value = log_facility_number(arg); - if (value == SYSLOG_FACILITY_NOT_SET) - fatal("%.200s line %d: unsupported log facility '%s'", + if (value == SYSLOG_FACILITY_NOT_SET) { + error("%.200s line %d: unsupported log facility '%s'", filename, linenum, arg ? arg : ""); + return -1; + } if (*log_facility_ptr == -1) *log_facility_ptr = (SyslogFacility) value; break; @@ -1366,9 +1432,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oRemoteForward: case oDynamicForward: arg = strdelim(&s); - if (arg == NULL || *arg == '\0') - fatal("%.200s line %d: Missing port argument.", + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; + } remotefwd = (opcode == oRemoteForward); dynamicfwd = (opcode == oDynamicForward); @@ -1378,9 +1446,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, if (arg2 == NULL || *arg2 == '\0') { if (remotefwd) dynamicfwd = 1; - else - fatal("%.200s line %d: Missing target " + else { + error("%.200s line %d: Missing target " "argument.", filename, linenum); + return -1; + } } else { /* construct a string for parse_forward */ snprintf(fwdarg, sizeof(fwdarg), "%s:%s", arg, @@ -1390,9 +1460,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, if (dynamicfwd) strlcpy(fwdarg, arg, sizeof(fwdarg)); - if (parse_forward(&fwd, fwdarg, dynamicfwd, remotefwd) == 0) - fatal("%.200s line %d: Bad forwarding specification.", + if (parse_forward(&fwd, fwdarg, dynamicfwd, remotefwd) == 0) { + error("%.200s line %d: Bad forwarding specification.", filename, linenum); + return -1; + } if (*activep) { if (remotefwd) { @@ -1408,9 +1480,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, goto parse_flag; case oHost: - if (cmdline) - fatal("Host directive not supported as a command-line " + if (cmdline) { + error("Host directive not supported as a command-line " "option"); + return -1; + } *activep = 0; arg2 = NULL; while ((arg = strdelim(&s)) != NULL && *arg != '\0') { @@ -1440,23 +1514,30 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, return 0; case oMatch: - if (cmdline) - fatal("Host directive not supported as a command-line " + if (cmdline) { + error("Host directive not supported as a command-line " "option"); + return -1; + } value = match_cfg_line(options, &s, pw, host, original_host, flags & SSHCONF_FINAL, want_final_pass, filename, linenum); - if (value < 0) - fatal("%.200s line %d: Bad Match condition", filename, + if (value < 0) { + error("%.200s line %d: Bad Match condition", filename, linenum); + return -1; + } *activep = (flags & SSHCONF_NEVERMATCH) ? 0 : value; break; case oEscapeChar: intptr = &options->escape_char; arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", filename, linenum); + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", + filename, linenum); + return -1; + } if (strcmp(arg, "none") == 0) value = SSH_ESCAPECHAR_NONE; else if (arg[1] == '\0') @@ -1465,9 +1546,9 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, (u_char) arg[1] >= 64 && (u_char) arg[1] < 128) value = (u_char) arg[1] & 31; else { - value = 0; /* Avoid compiler warning. */ - fatal("%.200s line %d: Bad escape character.", + error("%.200s line %d: Bad escape character.", filename, linenum); + return -1; } if (*activep && *intptr == -1) *intptr = value; @@ -1496,9 +1577,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oSendEnv: while ((arg = strdelim(&s)) != NULL && *arg != '\0') { - if (strchr(arg, '=') != NULL) - fatal("%s line %d: Invalid environment name.", + if (strchr(arg, '=') != NULL) { + error("%s line %d: Invalid environment name.", filename, linenum); + return -1; + } if (!*activep) continue; if (*arg == '-') { @@ -1507,9 +1590,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, continue; } else { /* Adding an env var */ - if (options->num_send_env >= INT_MAX) - fatal("%s line %d: too many send env.", + if (options->num_send_env >= INT_MAX) { + error("%s line %d: too many send env.", filename, linenum); + return -1; + } options->send_env = xrecallocarray( options->send_env, options->num_send_env, options->num_send_env + 1, @@ -1523,15 +1608,19 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oSetEnv: value = options->num_setenv; while ((arg = strdelimw(&s)) != NULL && *arg != '\0') { - if (strchr(arg, '=') == NULL) - fatal("%s line %d: Invalid SetEnv.", + if (strchr(arg, '=') == NULL) { + error("%s line %d: Invalid SetEnv.", filename, linenum); + return -1; + } if (!*activep || value != 0) continue; /* Adding a setenv var */ - if (options->num_setenv >= INT_MAX) - fatal("%s line %d: too many SetEnv.", + if (options->num_setenv >= INT_MAX) { + error("%s line %d: too many SetEnv.", filename, linenum); + return -1; + } options->setenv = xrecallocarray( options->setenv, options->num_setenv, options->num_setenv + 1, sizeof(*options->setenv)); @@ -1552,9 +1641,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, /* no/false/yes/true, or a time spec */ intptr = &options->control_persist; arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing ControlPersist" + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing ControlPersist" " argument.", filename, linenum); + return -1; + } value = 0; value2 = 0; /* timeout */ if (strcmp(arg, "no") == 0 || strcmp(arg, "false") == 0) @@ -1563,9 +1654,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, value = 1; else if ((value2 = convtime(arg)) >= 0) value = 1; - else - fatal("%.200s line %d: Bad ControlPersist argument.", + else { + error("%.200s line %d: Bad ControlPersist argument.", filename, linenum); + return -1; + } if (*activep && *intptr == -1) { *intptr = value; options->control_persist_timeout = value2; @@ -1583,11 +1676,17 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oTunnelDevice: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", filename, linenum); + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", + filename, linenum); + return -1; + } value = a2tun(arg, &value2); - if (value == SSH_TUNID_ERR) - fatal("%.200s line %d: Bad tun device.", filename, linenum); + if (value == SSH_TUNID_ERR) { + error("%.200s line %d: Bad tun device.", + filename, linenum); + return -1; + } if (*activep) { options->tun_local = value; options->tun_remote = value2; @@ -1611,9 +1710,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, goto parse_flag; case oInclude: - if (cmdline) - fatal("Include directive not supported as a " + if (cmdline) { + error("Include directive not supported as a " "command-line option"); + return -1; + } value = 0; while ((arg = strdelim(&s)) != NULL && *arg != '\0') { /* @@ -1623,9 +1724,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, * as living in ~/.ssh for user configurations or * /etc/ssh for system ones. */ - if (*arg == '~' && (flags & SSHCONF_USERCONF) == 0) - fatal("%.200s line %d: bad include path %s.", + if (*arg == '~' && (flags & SSHCONF_USERCONF) == 0) { + error("%.200s line %d: bad include path %s.", filename, linenum, arg); + return -1; + } if (!path_absolute(arg) && *arg != '~') { xasprintf(&arg2, "%s/%s", (flags & SSHCONF_USERCONF) ? @@ -1639,9 +1742,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, "files",filename, linenum, arg2); free(arg2); continue; - } else if (r != 0) - fatal("%.200s line %d: glob failed for %s.", + } else if (r != 0) { + error("%.200s line %d: glob failed for %s.", filename, linenum, arg2); + return -1; + } free(arg2); oactive = *activep; for (i = 0; i < gl.gl_pathc; i++) { @@ -1655,9 +1760,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, (oactive ? 0 : SSHCONF_NEVERMATCH), activep, want_final_pass, depth + 1); if (r != 1 && errno != ENOENT) { - fatal("Can't open user config file " + error("Can't open user config file " "%.100s: %.100s", gl.gl_pathv[i], strerror(errno)); + globfree(&gl); + return -1; } /* * don't let Match in includes clobber the @@ -1675,15 +1782,19 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oIPQoS: arg = strdelim(&s); - if ((value = parse_ipqos(arg)) == -1) - fatal("%s line %d: Bad IPQoS value: %s", + if ((value = parse_ipqos(arg)) == -1) { + error("%s line %d: Bad IPQoS value: %s", filename, linenum, arg); + return -1; + } arg = strdelim(&s); if (arg == NULL) value2 = value; - else if ((value2 = parse_ipqos(arg)) == -1) - fatal("%s line %d: Bad IPQoS value: %s", + else if ((value2 = parse_ipqos(arg)) == -1) { + error("%s line %d: Bad IPQoS value: %s", filename, linenum, arg); + return -1; + } if (*activep) { options->ip_qos_interactive = value; options->ip_qos_bulk = value2; @@ -1707,14 +1818,18 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, value = options->num_canonical_domains != 0; while ((arg = strdelim(&s)) != NULL && *arg != '\0') { if (!valid_domain(arg, 1, &errstr)) { - fatal("%s line %d: %s", filename, linenum, + error("%s line %d: %s", filename, linenum, errstr); + return -1; } if (!*activep || value) continue; - if (options->num_canonical_domains >= MAX_CANON_DOMAINS) - fatal("%s line %d: too many hostname suffixes.", + if (options->num_canonical_domains >= + MAX_CANON_DOMAINS) { + error("%s line %d: too many hostname suffixes.", filename, linenum); + return -1; + } options->canonical_domains[ options->num_canonical_domains++] = xstrdup(arg); } @@ -1730,18 +1845,22 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, lowercase(arg); if ((arg2 = strchr(arg, ':')) == NULL || arg2[1] == '\0') { - fatal("%s line %d: " + error("%s line %d: " "Invalid permitted CNAME \"%s\"", filename, linenum, arg); + return -1; } *arg2 = '\0'; arg2++; } if (!*activep || value) continue; - if (options->num_permitted_cnames >= MAX_CANON_DOMAINS) - fatal("%s line %d: too many permitted CNAMEs.", + if (options->num_permitted_cnames >= + MAX_CANON_DOMAINS) { + error("%s line %d: too many permitted CNAMEs.", filename, linenum); + return -1; + } cname = options->permitted_cnames + options->num_permitted_cnames++; cname->source_list = xstrdup(arg); @@ -1764,12 +1883,17 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oStreamLocalBindMask: arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing StreamLocalBindMask argument.", filename, linenum); + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing StreamLocalBindMask " + "argument.", filename, linenum); + return -1; + } /* Parse mode in octal format */ value = strtol(arg, &endofnumber, 8); - if (arg == endofnumber || value < 0 || value > 0777) - fatal("%.200s line %d: Bad mask.", filename, linenum); + if (arg == endofnumber || value < 0 || value > 0777) { + error("%.200s line %d: Bad mask.", filename, linenum); + return -1; + } options->fwd_opts.streamlocal_bind_mask = (mode_t)value; break; @@ -1784,12 +1908,16 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oFingerprintHash: intptr = &options->fingerprint_hash; arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); - if ((value = ssh_digest_alg_by_name(arg)) == -1) - fatal("%.200s line %d: Invalid hash algorithm \"%s\".", + return -1; + } + if ((value = ssh_digest_alg_by_name(arg)) == -1) { + error("%.200s line %d: Invalid hash algorithm \"%s\".", filename, linenum, arg); + return -1; + } if (*activep && *intptr == -1) *intptr = value; break; @@ -1815,17 +1943,24 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, value2 = 0; /* unlimited lifespan by default */ if (value == 3 && arg2 != NULL) { /* allow "AddKeysToAgent confirm 5m" */ - if ((value2 = convtime(arg2)) == -1 || value2 > INT_MAX) - fatal("%s line %d: invalid time value.", + if ((value2 = convtime(arg2)) == -1 || + value2 > INT_MAX) { + error("%s line %d: invalid time value.", filename, linenum); + return -1; + } } else if (value == -1 && arg2 == NULL) { - if ((value2 = convtime(arg)) == -1 || value2 > INT_MAX) - fatal("%s line %d: unsupported option", + if ((value2 = convtime(arg)) == -1 || + value2 > INT_MAX) { + error("%s line %d: unsupported option", filename, linenum); + return -1; + } value = 1; /* yes */ } else if (value == -1 || arg2 != NULL) { - fatal("%s line %d: unsupported option", + error("%s line %d: unsupported option", filename, linenum); + return -1; } if (*activep && options->add_keys_to_agent == -1) { options->add_keys_to_agent = value; @@ -1836,19 +1971,25 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oIdentityAgent: charptr = &options->identity_agent; arg = strdelim(&s); - if (!arg || *arg == '\0') - fatal("%.200s line %d: Missing argument.", + if (!arg || *arg == '\0') { + error("%.200s line %d: Missing argument.", filename, linenum); + return -1; + } parse_agent_path: /* Extra validation if the string represents an env var. */ - if ((arg2 = dollar_expand(&r, arg)) == NULL || r) - fatal("%.200s line %d: Invalid environment expansion " + if ((arg2 = dollar_expand(&r, arg)) == NULL || r) { + error("%.200s line %d: Invalid environment expansion " "%s.", filename, linenum, arg); + return -1; + } free(arg2); /* check for legacy environment format */ - if (arg[0] == '$' && arg[1] != '{' && !valid_env_name(arg + 1)) { - fatal("%.200s line %d: Invalid environment name %s.", + if (arg[0] == '$' && arg[1] != '{' && + !valid_env_name(arg + 1)) { + error("%.200s line %d: Invalid environment name %s.", filename, linenum, arg); + return -1; } if (*activep && *charptr == NULL) *charptr = xstrdup(arg); @@ -1865,13 +2006,15 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, return 0; default: - fatal_f("Unimplemented opcode %d", opcode); + error("%s line %d: Unimplemented opcode %d", + filename, linenum, opcode); } /* Check that there is no garbage at end of line. */ if ((arg = strdelim(&s)) != NULL && *arg != '\0') { - fatal("%.200s line %d: garbage at end of line; \"%.200s\".", + error("%.200s line %d: garbage at end of line; \"%.200s\".", filename, linenum, arg); + return -1; } return 0; } @@ -2005,7 +2148,9 @@ initialize_options(Options * options) options->hostkeyalgorithms = NULL; options->ca_sign_algorithms = NULL; options->num_identity_files = 0; + memset(options->identity_keys, 0, sizeof(options->identity_keys)); options->num_certificate_files = 0; + memset(options->certificates, 0, sizeof(options->certificates)); options->hostname = NULL; options->host_key_alias = NULL; options->proxy_command = NULL; @@ -2093,12 +2238,12 @@ fill_default_options_for_canonicalization(Options *options) * Called after processing other sources of option data, this fills those * options for which no value has been specified with their default values. */ -void +int fill_default_options(Options * options) { char *all_cipher, *all_mac, *all_kex, *all_key, *all_sig; char *def_cipher, *def_mac, *def_kex, *def_key, *def_sig; - int r; + int ret = 0, r; if (options->forward_agent == -1) options->forward_agent = 0; @@ -2122,7 +2267,7 @@ fill_default_options(Options * options) clear_forwardings(options); if (options->xauth_location == NULL) - options->xauth_location = _PATH_XAUTH; + options->xauth_location = xstrdup(_PATH_XAUTH); if (options->fwd_opts.gateway_ports == -1) options->fwd_opts.gateway_ports = 0; if (options->fwd_opts.streamlocal_bind_mask == (mode_t)-1) @@ -2280,8 +2425,10 @@ fill_default_options(Options * options) #define ASSEMBLE(what, defaults, all) \ do { \ if ((r = kex_assemble_names(&options->what, \ - defaults, all)) != 0) \ - fatal_fr(r, "%s", #what); \ + defaults, all)) != 0) { \ + error_fr(r, "%s", #what); \ + goto fail; \ + } \ } while (0) ASSEMBLE(ciphers, def_cipher, all_cipher); ASSEMBLE(macs, def_mac, all_mac); @@ -2290,16 +2437,6 @@ fill_default_options(Options * options) ASSEMBLE(pubkey_key_types, def_key, all_key); ASSEMBLE(ca_sign_algorithms, def_sig, all_sig); #undef ASSEMBLE - free(all_cipher); - free(all_mac); - free(all_kex); - free(all_key); - free(all_sig); - free(def_cipher); - free(def_mac); - free(def_kex); - kex_default_pk_alg_filtered = def_key; /* save for later use */ - free(def_sig); #define CLEAR_ON_NONE(v) \ do { \ @@ -2326,6 +2463,103 @@ fill_default_options(Options * options) /* options->hostname will be set in the main program if appropriate */ /* options->host_key_alias should not be set by default */ /* options->preferred_authentications will be set in ssh */ + + /* success */ + ret = 0; + fail: + free(all_cipher); + free(all_mac); + free(all_kex); + free(all_key); + free(all_sig); + free(def_cipher); + free(def_mac); + free(def_kex); + free(def_key); + free(def_sig); + return ret; +} + +void +free_options(Options *o) +{ + int i; + + if (o == NULL) + return; + +#define FREE_ARRAY(type, n, a) \ + do { \ + type _i; \ + for (_i = 0; _i < (n); _i++) \ + free((a)[_i]); \ + } while (0) + + free(o->forward_agent_sock_path); + free(o->xauth_location); + FREE_ARRAY(u_int, o->num_log_verbose, o->log_verbose); + free(o->log_verbose); + free(o->ciphers); + free(o->macs); + free(o->hostkeyalgorithms); + free(o->kex_algorithms); + free(o->ca_sign_algorithms); + free(o->hostname); + free(o->host_key_alias); + free(o->proxy_command); + free(o->user); + FREE_ARRAY(u_int, o->num_system_hostfiles, o->system_hostfiles); + FREE_ARRAY(u_int, o->num_user_hostfiles, o->user_hostfiles); + free(o->preferred_authentications); + free(o->bind_address); + free(o->bind_interface); + free(o->pkcs11_provider); + free(o->sk_provider); + for (i = 0; i < o->num_identity_files; i++) { + free(o->identity_files[i]); + sshkey_free(o->identity_keys[i]); + } + for (i = 0; i < o->num_certificate_files; i++) { + free(o->certificate_files[i]); + sshkey_free(o->certificates[i]); + } + free(o->identity_agent); + for (i = 0; i < o->num_local_forwards; i++) { + free(o->local_forwards[i].listen_host); + free(o->local_forwards[i].listen_path); + free(o->local_forwards[i].connect_host); + free(o->local_forwards[i].connect_path); + } + free(o->local_forwards); + for (i = 0; i < o->num_remote_forwards; i++) { + free(o->remote_forwards[i].listen_host); + free(o->remote_forwards[i].listen_path); + free(o->remote_forwards[i].connect_host); + free(o->remote_forwards[i].connect_path); + } + free(o->remote_forwards); + free(o->stdio_forward_host); + FREE_ARRAY(int, o->num_send_env, o->send_env); + free(o->send_env); + FREE_ARRAY(int, o->num_setenv, o->setenv); + free(o->setenv); + free(o->control_path); + free(o->local_command); + free(o->remote_command); + FREE_ARRAY(int, o->num_canonical_domains, o->canonical_domains); + for (i = 0; i < o->num_permitted_cnames; i++) { + free(o->permitted_cnames[i].source_list); + free(o->permitted_cnames[i].target_list); + } + free(o->revoked_host_keys); + free(o->hostbased_key_types); + free(o->pubkey_key_types); + free(o->jump_user); + free(o->jump_host); + free(o->jump_extra); + free(o->ignored_unknown); + explicit_bzero(o, sizeof(*o)); +#undef FREE_ARRAY } struct fwdarg { @@ -2565,12 +2799,12 @@ parse_jump(const char *s, Options *o, int active) if (first) { /* First argument and configuration is active */ - if (parse_ssh_uri(cp, &user, &host, &port) == -1 || + if (parse_ssh_uri(cp, &user, &host, &port) == -1 && parse_user_host_port(cp, &user, &host, &port) != 0) goto out; } else { /* Subsequent argument or inactive configuration */ - if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 || + if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 && parse_user_host_port(cp, NULL, NULL, NULL) != 0) goto out; } @@ -2604,12 +2838,27 @@ parse_jump(const char *s, Options *o, int active) int parse_ssh_uri(const char *uri, char **userp, char **hostp, int *portp) { - char *path; - int r; + char *user = NULL, *host = NULL, *path = NULL; + int r, port; - r = parse_uri("ssh", uri, userp, hostp, portp, &path); + r = parse_uri("ssh", uri, &user, &host, &port, &path); if (r == 0 && path != NULL) r = -1; /* path not allowed */ + if (r == 0) { + if (userp != NULL) { + *userp = user; + user = NULL; + } + if (hostp != NULL) { + *hostp = host; + host = NULL; + } + if (portp != NULL) + *portp = port; + } + free(user); + free(host); + free(path); return r; } diff --git a/readconf.h b/readconf.h index be9154da0452..268dbf179a9e 100644 --- a/readconf.h +++ b/readconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.h,v 1.135 2020/10/16 13:26:13 djm Exp $ */ +/* $OpenBSD: readconf.h,v 1.136 2020/12/17 23:10:27 djm Exp $ */ /* * Author: Tatu Ylonen @@ -205,8 +205,9 @@ const char *kex_default_pk_alg(void); char *ssh_connection_hash(const char *thishost, const char *host, const char *portstr, const char *user); void initialize_options(Options *); -void fill_default_options(Options *); +int fill_default_options(Options *); void fill_default_options_for_canonicalization(Options *); +void free_options(Options *o); int process_config_line(Options *, struct passwd *, const char *, const char *, char *, const char *, int, int *, int); int read_config_file(const char *, struct passwd *, const char *, diff --git a/ssh-keysign.c b/ssh-keysign.c index 0582490419c7..907162dc7459 100644 --- a/ssh-keysign.c +++ b/ssh-keysign.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keysign.c,v 1.65 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh-keysign.c,v 1.66 2020/12/17 23:10:27 djm Exp $ */ /* * Copyright (c) 2002 Markus Friedl. All rights reserved. * @@ -207,7 +207,7 @@ main(int argc, char **argv) initialize_options(&options); (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw, "", "", &options, 0, NULL); - fill_default_options(&options); + (void)fill_default_options(&options); if (options.enable_ssh_keysign != 1) fatal("ssh-keysign not enabled in %s", _PATH_HOST_CONFIG_FILE); diff --git a/ssh.c b/ssh.c index f467ba2d0e66..8cc606fde134 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.542 2020/11/12 22:38:57 dtucker Exp $ */ +/* $OpenBSD: ssh.c,v 1.543 2020/12/17 23:10:27 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1237,7 +1237,8 @@ main(int ac, char **av) } /* Fill configuration defaults. */ - fill_default_options(&options); + if (fill_default_options(&options) != 0) + cleanup_exit(255); if (options.user == NULL) options.user = xstrdup(pw->pw_name); From d060bc7f6e6244f001e658208f53e3e2ecbbd382 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 17 Dec 2020 23:26:11 +0000 Subject: [PATCH 0112/1788] upstream: refactor client percent_expand() argument passing; consolidate the common arguments into a single struct and pass that around instead of using a bunch of globals. ok markus@ OpenBSD-Commit-ID: 035e6d7ca9145ad504f6af5a021943f1958cd19b --- ssh.c | 145 ++++++++++++++++++++++++++++----------------------- sshconnect.h | 16 +++++- 2 files changed, 95 insertions(+), 66 deletions(-) diff --git a/ssh.c b/ssh.c index 8cc606fde134..7cece4efc583 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.543 2020/12/17 23:10:27 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.544 2020/12/17 23:26:11 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -173,11 +173,6 @@ char *host; */ char *forward_agent_sock_path = NULL; -/* Various strings used to to percent_expand() arguments */ -static char thishost[NI_MAXHOST], shorthost[NI_MAXHOST], portstr[NI_MAXSERV]; -static char uidstr[32], *host_arg, *conn_hash_hex; -static const char *keyalias; - /* socket address the host resolves to */ struct sockaddr_storage hostaddr; @@ -214,8 +209,8 @@ usage(void) exit(255); } -static int ssh_session2(struct ssh *, struct passwd *); -static void load_public_identity_files(struct passwd *); +static int ssh_session2(struct ssh *, const struct ssh_conn_info *); +static void load_public_identity_files(const struct ssh_conn_info *); static void main_sigchld_handler(int); /* ~/ expand a list of paths. NB. assumes path[n] is heap-allocated. */ @@ -233,13 +228,13 @@ tilde_expand_paths(char **paths, u_int num_paths) } #define DEFAULT_CLIENT_PERCENT_EXPAND_ARGS \ - "C", conn_hash_hex, \ - "L", shorthost, \ - "i", uidstr, \ - "k", keyalias, \ - "l", thishost, \ - "n", host_arg, \ - "p", portstr + "C", cinfo->conn_hash_hex, \ + "L", cinfo->shorthost, \ + "i", cinfo->uidstr, \ + "k", cinfo->keyalias, \ + "l", cinfo->thishost, \ + "n", cinfo->host_arg, \ + "p", cinfo->portstr /* * Expands the set of percent_expand options used by the majority of keywords @@ -247,17 +242,17 @@ tilde_expand_paths(char **paths, u_int num_paths) * Caller must free returned string. */ static char * -default_client_percent_expand(const char *str, const char *homedir, - const char *remhost, const char *remuser, const char *locuser) +default_client_percent_expand(const char *str, + const struct ssh_conn_info *cinfo) { return percent_expand(str, /* values from statics above */ DEFAULT_CLIENT_PERCENT_EXPAND_ARGS, /* values from arguments */ - "d", homedir, - "h", remhost, - "r", remuser, - "u", locuser, + "d", cinfo->homedir, + "h", cinfo->remhost, + "r", cinfo->remuser, + "u", cinfo->locuser, (char *)NULL); } @@ -267,8 +262,8 @@ default_client_percent_expand(const char *str, const char *homedir, * Caller must free returned string. */ static char * -default_client_percent_dollar_expand(const char *str, const char *homedir, - const char *remhost, const char *remuser, const char *locuser) +default_client_percent_dollar_expand(const char *str, + const struct ssh_conn_info *cinfo) { char *ret; @@ -276,10 +271,10 @@ default_client_percent_dollar_expand(const char *str, const char *homedir, /* values from statics above */ DEFAULT_CLIENT_PERCENT_EXPAND_ARGS, /* values from arguments */ - "d", homedir, - "h", remhost, - "r", remuser, - "u", locuser, + "d", cinfo->homedir, + "h", cinfo->remhost, + "r", cinfo->remuser, + "u", cinfo->locuser, (char *)NULL); if (ret == NULL) fatal("invalid environment variable expansion"); @@ -634,6 +629,25 @@ set_addrinfo_port(struct addrinfo *addrs, int port) } } +static void +ssh_conn_info_free(struct ssh_conn_info *cinfo) +{ + if (cinfo == NULL) + return; + free(cinfo->conn_hash_hex); + free(cinfo->shorthost); + free(cinfo->uidstr); + free(cinfo->keyalias); + free(cinfo->thishost); + free(cinfo->host_arg); + free(cinfo->portstr); + free(cinfo->remhost); + free(cinfo->remuser); + free(cinfo->homedir); + free(cinfo->locuser); + free(cinfo); +} + /* * Main program for the ssh client. */ @@ -643,8 +657,8 @@ main(int ac, char **av) struct ssh *ssh = NULL; int i, r, opt, exit_status, use_syslog, direct, timeout_ms; int was_addr, config_test = 0, opt_terminated = 0, want_final_pass = 0; - char *p, *cp, *line, *argv0, *logfile; - char cname[NI_MAXHOST]; + char *p, *cp, *line, *argv0, *logfile, *host_arg; + char cname[NI_MAXHOST], thishost[NI_MAXHOST]; struct stat st; struct passwd *pw; extern int optind, optreset; @@ -653,6 +667,8 @@ main(int ac, char **av) struct addrinfo *addrs = NULL; size_t n, len; u_int j; + struct ssh_conn_info *cinfo = NULL; + /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ sanitise_stdfd(); @@ -1364,17 +1380,24 @@ main(int ac, char **av) } /* Set up strings used to percent_expand() arguments */ + cinfo = xcalloc(1, sizeof(*cinfo)); if (gethostname(thishost, sizeof(thishost)) == -1) fatal("gethostname: %s", strerror(errno)); - strlcpy(shorthost, thishost, sizeof(shorthost)); - shorthost[strcspn(thishost, ".")] = '\0'; - snprintf(portstr, sizeof(portstr), "%d", options.port); - snprintf(uidstr, sizeof(uidstr), "%llu", + cinfo->thishost = xstrdup(thishost); + thishost[strcspn(thishost, ".")] = '\0'; + cinfo->shorthost = xstrdup(thishost); + xasprintf(&cinfo->portstr, "%d", options.port); + xasprintf(&cinfo->uidstr, "%llu", (unsigned long long)pw->pw_uid); - keyalias = options.host_key_alias ? options.host_key_alias : host_arg; - - conn_hash_hex = ssh_connection_hash(thishost, host, portstr, - options.user); + cinfo->keyalias = xstrdup(options.host_key_alias ? + options.host_key_alias : host_arg); + cinfo->conn_hash_hex = ssh_connection_hash(cinfo->thishost, host, + cinfo->portstr, options.user); + cinfo->host_arg = xstrdup(host_arg); + cinfo->remhost = xstrdup(host); + cinfo->remuser = xstrdup(options.user); + cinfo->homedir = xstrdup(pw->pw_dir); + cinfo->locuser = xstrdup(pw->pw_name); /* * Expand tokens in arguments. NB. LocalCommand is expanded later, @@ -1385,7 +1408,7 @@ main(int ac, char **av) debug3("expanding RemoteCommand: %s", options.remote_command); cp = options.remote_command; options.remote_command = default_client_percent_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + cinfo); debug3("expanded RemoteCommand: %s", options.remote_command); free(cp); if ((r = sshbuf_put(command, options.remote_command, @@ -1397,14 +1420,13 @@ main(int ac, char **av) cp = tilde_expand_filename(options.control_path, getuid()); free(options.control_path); options.control_path = default_client_percent_dollar_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + cinfo); free(cp); } if (options.identity_agent != NULL) { p = tilde_expand_filename(options.identity_agent, getuid()); - cp = default_client_percent_dollar_expand(p, - pw->pw_dir, host, options.user, pw->pw_name); + cp = default_client_percent_dollar_expand(p, cinfo); free(p); free(options.identity_agent); options.identity_agent = cp; @@ -1413,8 +1435,7 @@ main(int ac, char **av) if (options.forward_agent_sock_path != NULL) { p = tilde_expand_filename(options.forward_agent_sock_path, getuid()); - cp = default_client_percent_dollar_expand(p, - pw->pw_dir, host, options.user, pw->pw_name); + cp = default_client_percent_dollar_expand(p, cinfo); free(p); free(options.forward_agent_sock_path); options.forward_agent_sock_path = cp; @@ -1424,8 +1445,7 @@ main(int ac, char **av) if (options.user_hostfiles[j] != NULL) { cp = tilde_expand_filename(options.user_hostfiles[j], getuid()); - p = default_client_percent_dollar_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + p = default_client_percent_dollar_expand(cp, cinfo); if (strcmp(options.user_hostfiles[j], p) != 0) debug3("expanded UserKnownHostsFile '%s' -> " "'%s'", options.user_hostfiles[j], p); @@ -1439,8 +1459,7 @@ main(int ac, char **av) if (options.local_forwards[i].listen_path != NULL) { cp = options.local_forwards[i].listen_path; p = options.local_forwards[i].listen_path = - default_client_percent_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + default_client_percent_expand(cp, cinfo); if (strcmp(cp, p) != 0) debug3("expanded LocalForward listen path " "'%s' -> '%s'", cp, p); @@ -1449,8 +1468,7 @@ main(int ac, char **av) if (options.local_forwards[i].connect_path != NULL) { cp = options.local_forwards[i].connect_path; p = options.local_forwards[i].connect_path = - default_client_percent_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + default_client_percent_expand(cp, cinfo); if (strcmp(cp, p) != 0) debug3("expanded LocalForward connect path " "'%s' -> '%s'", cp, p); @@ -1462,8 +1480,7 @@ main(int ac, char **av) if (options.remote_forwards[i].listen_path != NULL) { cp = options.remote_forwards[i].listen_path; p = options.remote_forwards[i].listen_path = - default_client_percent_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + default_client_percent_expand(cp, cinfo); if (strcmp(cp, p) != 0) debug3("expanded RemoteForward listen path " "'%s' -> '%s'", cp, p); @@ -1472,8 +1489,7 @@ main(int ac, char **av) if (options.remote_forwards[i].connect_path != NULL) { cp = options.remote_forwards[i].connect_path; p = options.remote_forwards[i].connect_path = - default_client_percent_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + default_client_percent_expand(cp, cinfo); if (strcmp(cp, p) != 0) debug3("expanded RemoteForward connect path " "'%s' -> '%s'", cp, p); @@ -1584,7 +1600,7 @@ main(int ac, char **av) } /* load options.identity_files */ - load_public_identity_files(pw); + load_public_identity_files(cinfo); /* optionally set the SSH_AUTHSOCKET_ENV_NAME variable */ if (options.identity_agent && @@ -1671,7 +1687,8 @@ main(int ac, char **av) } skip_connect: - exit_status = ssh_session2(ssh, pw); + exit_status = ssh_session2(ssh, cinfo); + ssh_conn_info_free(cinfo); ssh_packet_close(ssh); if (options.control_path != NULL && muxserver_sock != -1) @@ -2038,7 +2055,7 @@ ssh_session2_open(struct ssh *ssh) } static int -ssh_session2(struct ssh *ssh, struct passwd *pw) +ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo) { int r, id = -1; char *cp, *tun_fwd_ifname = NULL; @@ -2054,10 +2071,10 @@ ssh_session2(struct ssh *ssh, struct passwd *pw) cp = options.local_command; options.local_command = percent_expand(cp, DEFAULT_CLIENT_PERCENT_EXPAND_ARGS, - "d", pw->pw_dir, - "h", host, - "r", options.user, - "u", pw->pw_name, + "d", cinfo->homedir, + "h", cinfo->remhost, + "r", cinfo->remuser, + "u", cinfo->locuser, "T", tun_fwd_ifname == NULL ? "NONE" : tun_fwd_ifname, (char *)NULL); debug3("expanded LocalCommand: %s", options.local_command); @@ -2149,7 +2166,7 @@ ssh_session2(struct ssh *ssh, struct passwd *pw) /* Loads all IdentityFile and CertificateFile keys */ static void -load_public_identity_files(struct passwd *pw) +load_public_identity_files(const struct ssh_conn_info *cinfo) { char *filename, *cp; struct sshkey *public; @@ -2205,8 +2222,7 @@ load_public_identity_files(struct passwd *pw) continue; } cp = tilde_expand_filename(options.identity_files[i], getuid()); - filename = default_client_percent_dollar_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + filename = default_client_percent_dollar_expand(cp, cinfo); free(cp); check_load(sshkey_load_public(filename, &public, NULL), filename, "pubkey"); @@ -2255,8 +2271,7 @@ load_public_identity_files(struct passwd *pw) for (i = 0; i < options.num_certificate_files; i++) { cp = tilde_expand_filename(options.certificate_files[i], getuid()); - filename = default_client_percent_dollar_expand(cp, - pw->pw_dir, host, options.user, pw->pw_name); + filename = default_client_percent_dollar_expand(cp, cinfo); free(cp); check_load(sshkey_load_public(filename, &public, NULL), diff --git a/sshconnect.h b/sshconnect.h index 13131d301a79..556b2537c75f 100644 --- a/sshconnect.h +++ b/sshconnect.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.h,v 1.43 2020/10/12 08:36:37 kn Exp $ */ +/* $OpenBSD: sshconnect.h,v 1.44 2020/12/17 23:26:11 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -30,6 +30,20 @@ struct Sensitive { int nkeys; }; +struct ssh_conn_info { + char *conn_hash_hex; + char *shorthost; + char *uidstr; + char *keyalias; + char *thishost; + char *host_arg; + char *portstr; + char *remhost; + char *remuser; + char *homedir; + char *locuser; +}; + struct addrinfo; struct ssh; From 0ebead6593e2441e4af2735bbe2cd097607cd0d3 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 17 Dec 2020 23:28:50 +0000 Subject: [PATCH 0113/1788] upstream: fix possible error("%s", NULL) on error paths OpenBSD-Commit-ID: 0b3833c2cb985453ecca1d76803ebb8f3b736a11 --- auth2-pubkey.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/auth2-pubkey.c b/auth2-pubkey.c index b331216c82c9..307afa5629d2 100644 --- a/auth2-pubkey.c +++ b/auth2-pubkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-pubkey.c,v 1.101 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: auth2-pubkey.c,v 1.102 2020/12/17 23:28:50 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -927,12 +927,12 @@ user_key_command_allowed2(struct ssh *ssh, struct passwd *user_pw, /* Turn the command into an argument vector */ if (argv_split(options.authorized_keys_command, &ac, &av) != 0) { error("AuthorizedKeysCommand \"%s\" contains invalid quotes", - command); + options.authorized_keys_command); goto out; } if (ac == 0) { error("AuthorizedKeysCommand \"%s\" yielded no arguments", - command); + options.authorized_keys_command); goto out; } snprintf(uidstr, sizeof(uidstr), "%llu", From 06fbb386bed666581095cb9cbc7a900e02bfe1b7 Mon Sep 17 00:00:00 2001 From: "tobhe@openbsd.org" Date: Sat, 19 Dec 2020 22:09:21 +0000 Subject: [PATCH 0114/1788] upstream: Print client kem key with correct length. ok markus@ OpenBSD-Commit-ID: 91689e14a4fc6c270e265a32d1c8faba63a45755 --- kexsntrup4591761x25519.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kexsntrup4591761x25519.c b/kexsntrup4591761x25519.c index 3b9b664f8b1f..3a241fd41d00 100644 --- a/kexsntrup4591761x25519.c +++ b/kexsntrup4591761x25519.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexsntrup4591761x25519.c,v 1.3 2019/01/21 10:40:11 djm Exp $ */ +/* $OpenBSD: kexsntrup4591761x25519.c,v 1.4 2020/12/19 22:09:21 tobhe Exp $ */ /* * Copyright (c) 2019 Markus Friedl. All rights reserved. * @@ -195,7 +195,7 @@ kex_kem_sntrup4591761x25519_dec(struct kex *kex, if ((r = ssh_digest_buffer(kex->hash_alg, buf, hash, sizeof(hash))) != 0) goto out; #ifdef DEBUG_KEXECDH - dump_digest("client kem key:", kem_key, sizeof(kem_key)); + dump_digest("client kem key:", kem_key, crypto_kem_sntrup4591761_BYTES); dump_digest("concatenation of KEM key and ECDH shared key:", sshbuf_ptr(buf), sshbuf_len(buf)); #endif From b4c7cd1185c5dc0593d47eafcc1a34fda569dd1d Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 20 Dec 2020 23:36:51 +0000 Subject: [PATCH 0115/1788] upstream: load_hostkeys()/hostkeys_foreach() variants for FILE* Add load_hostkeys_file() and hostkeys_foreach_file() that accept a FILE* argument instead of opening the file directly. Original load_hostkeys() and hostkeys_foreach() are implemented using these new interfaces. Add a u_int note field to the hostkey_entry and hostkey_foreach_line structs that is passed directly from the load_hostkeys() and hostkeys_foreach() call. This is a lightweight way to annotate results between different invocations of load_hostkeys(). ok markus@ OpenBSD-Commit-ID: 6ff6db13ec9ee4edfa658b2c38baad0f505d8c20 --- auth.c | 6 +++--- clientloop.c | 6 +++--- hostfile.c | 54 ++++++++++++++++++++++++++++++++++++++++----------- hostfile.h | 17 ++++++++++++---- ssh-keygen.c | 4 ++-- sshconnect.c | 12 ++++++------ sshconnect2.c | 11 ++++++----- 7 files changed, 76 insertions(+), 34 deletions(-) diff --git a/auth.c b/auth.c index e82d7feadbff..e1bf4e75e1c1 100644 --- a/auth.c +++ b/auth.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth.c,v 1.149 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: auth.c,v 1.150 2020/12/20 23:36:51 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -468,7 +468,7 @@ check_key_in_hostfiles(struct passwd *pw, struct sshkey *key, const char *host, const struct hostkey_entry *found; hostkeys = init_hostkeys(); - load_hostkeys(hostkeys, host, sysfile); + load_hostkeys(hostkeys, host, sysfile, 0); if (userfile != NULL) { user_hostfile = tilde_expand_filename(userfile, pw->pw_uid); if (options.strict_modes && @@ -482,7 +482,7 @@ check_key_in_hostfiles(struct passwd *pw, struct sshkey *key, const char *host, user_hostfile); } else { temporarily_use_uid(pw); - load_hostkeys(hostkeys, host, user_hostfile); + load_hostkeys(hostkeys, host, user_hostfile, 0); restore_uid(); } free(user_hostfile); diff --git a/clientloop.c b/clientloop.c index c49eed3980af..63ba59f07138 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.355 2020/10/29 02:47:23 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.356 2020/12/20 23:36:51 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1984,7 +1984,7 @@ check_old_keys_othernames(struct hostkeys_update_ctx *ctx) ctx->ip_str ? ctx->ip_str : "(none)"); if ((r = hostkeys_foreach(options.user_hostfiles[i], hostkeys_check_old, ctx, ctx->host_str, ctx->ip_str, - HKF_WANT_PARSE_KEY)) != 0) { + HKF_WANT_PARSE_KEY, 0)) != 0) { if (r == SSH_ERR_SYSTEM_ERROR && errno == ENOENT) { debug_f("hostkeys file %s does not exist", options.user_hostfiles[i]); @@ -2298,7 +2298,7 @@ client_input_hostkeys(struct ssh *ssh) ctx->ip_str ? ctx->ip_str : "(none)"); if ((r = hostkeys_foreach(options.user_hostfiles[i], hostkeys_find, ctx, ctx->host_str, ctx->ip_str, - HKF_WANT_PARSE_KEY)) != 0) { + HKF_WANT_PARSE_KEY, 0)) != 0) { if (r == SSH_ERR_SYSTEM_ERROR && errno == ENOENT) { debug_f("hostkeys file %s does not exist", options.user_hostfiles[i]); diff --git a/hostfile.c b/hostfile.c index 4ec7b671147a..c3a2817832f2 100644 --- a/hostfile.c +++ b/hostfile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.c,v 1.86 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: hostfile.c,v 1.87 2020/12/20 23:36:51 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -260,6 +260,7 @@ record_hostkey(struct hostkey_foreach_line *l, void *_ctx) hostkeys->entries[hostkeys->num_entries].key = l->key; l->key = NULL; /* steal it */ hostkeys->entries[hostkeys->num_entries].marker = l->marker; + hostkeys->entries[hostkeys->num_entries].note = l->note; hostkeys->num_entries++; ctx->num_loaded++; @@ -267,7 +268,8 @@ record_hostkey(struct hostkey_foreach_line *l, void *_ctx) } void -load_hostkeys(struct hostkeys *hostkeys, const char *host, const char *path) +load_hostkeys_file(struct hostkeys *hostkeys, const char *host, + const char *path, FILE *f, u_int note) { int r; struct load_callback_ctx ctx; @@ -276,8 +278,8 @@ load_hostkeys(struct hostkeys *hostkeys, const char *host, const char *path) ctx.num_loaded = 0; ctx.hostkeys = hostkeys; - if ((r = hostkeys_foreach(path, record_hostkey, &ctx, host, NULL, - HKF_WANT_MATCH|HKF_WANT_PARSE_KEY)) != 0) { + if ((r = hostkeys_foreach_file(path, f, record_hostkey, &ctx, host, + NULL, HKF_WANT_MATCH|HKF_WANT_PARSE_KEY, note)) != 0) { if (r != SSH_ERR_SYSTEM_ERROR && errno != ENOENT) debug_fr(r, "hostkeys_foreach failed for %s", path); } @@ -285,6 +287,21 @@ load_hostkeys(struct hostkeys *hostkeys, const char *host, const char *path) debug3_f("loaded %lu keys from %s", ctx.num_loaded, host); } +void +load_hostkeys(struct hostkeys *hostkeys, const char *host, const char *path, + u_int note) +{ + FILE *f; + + if ((f = fopen(path, "r")) == NULL) { + debug_f("fopen %s: %s", path, strerror(errno)); + return; + } + + load_hostkeys_file(hostkeys, host, path, f, note); + fclose(f); +} + void free_hostkeys(struct hostkeys *hostkeys) { @@ -620,7 +637,7 @@ hostfile_replace_entries(const char *filename, const char *host, const char *ip, /* Remove stale/mismatching entries for the specified host */ if ((r = hostkeys_foreach(filename, host_delete, &ctx, host, ip, - HKF_WANT_PARSE_KEY)) != 0) { + HKF_WANT_PARSE_KEY, 0)) != 0) { oerrno = errno; error_fr(r, "hostkeys_foreach"); goto fail; @@ -733,10 +750,9 @@ match_maybe_hashed(const char *host, const char *names, int *was_hashed) } int -hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, - const char *host, const char *ip, u_int options) +hostkeys_foreach_file(const char *path, FILE *f, hostkeys_foreach_fn *callback, + void *ctx, const char *host, const char *ip, u_int options, u_int note) { - FILE *f; char *line = NULL, ktype[128]; u_long linenum = 0; char *cp, *cp2; @@ -749,10 +765,7 @@ hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, memset(&lineinfo, 0, sizeof(lineinfo)); if (host == NULL && (options & HKF_WANT_MATCH) != 0) return SSH_ERR_INVALID_ARGUMENT; - if ((f = fopen(path, "r")) == NULL) - return SSH_ERR_SYSTEM_ERROR; - debug3_f("reading file \"%s\"", path); while (getline(&line, &linesize, f) != -1) { linenum++; line[strcspn(line, "\n")] = '\0'; @@ -766,6 +779,7 @@ hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, lineinfo.marker = MRK_NONE; lineinfo.status = HKF_STATUS_OK; lineinfo.keytype = KEY_UNSPEC; + lineinfo.note = note; /* Skip any leading whitespace, comments and empty lines. */ for (cp = line; *cp == ' ' || *cp == '\t'; cp++) @@ -902,6 +916,24 @@ hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, sshkey_free(lineinfo.key); free(lineinfo.line); free(line); + return r; +} + +int +hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, + const char *host, const char *ip, u_int options, u_int note) +{ + FILE *f; + int r, oerrno; + + if ((f = fopen(path, "r")) == NULL) + return SSH_ERR_SYSTEM_ERROR; + + debug3_f("reading file \"%s\"", path); + r = hostkeys_foreach_file(path, f, callback, ctx, host, ip, + options, note); + oerrno = errno; fclose(f); + errno = oerrno; return r; } diff --git a/hostfile.h b/hostfile.h index 7ea31444db81..bc828eccf087 100644 --- a/hostfile.h +++ b/hostfile.h @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.h,v 1.27 2020/10/04 09:45:01 djm Exp $ */ +/* $OpenBSD: hostfile.h,v 1.28 2020/12/20 23:36:51 djm Exp $ */ /* * Author: Tatu Ylonen @@ -28,11 +28,15 @@ struct hostkey_entry { u_long line; struct sshkey *key; HostkeyMarker marker; + u_int note; /* caller-specific note/flag */ }; struct hostkeys; struct hostkeys *init_hostkeys(void); -void load_hostkeys(struct hostkeys *, const char *, const char *); +void load_hostkeys(struct hostkeys *, const char *, + const char *, u_int); +void load_hostkeys_file(struct hostkeys *, const char *, + const char *, FILE *, u_int note); void free_hostkeys(struct hostkeys *); HostStatus check_key_in_hostkeys(struct hostkeys *, struct sshkey *, @@ -93,6 +97,7 @@ struct hostkey_foreach_line { int keytype; /* Type of key; KEY_UNSPEC for invalid/comment lines */ struct sshkey *key; /* Key, if parsed ok and HKF_WANT_MATCH_HOST set */ const char *comment; /* Any comment following the key */ + u_int note; /* caller-specified note copied from arguments */ }; /* @@ -103,8 +108,12 @@ struct hostkey_foreach_line { typedef int hostkeys_foreach_fn(struct hostkey_foreach_line *l, void *ctx); /* Iterate over a hostkeys file */ -int hostkeys_foreach(const char *path, hostkeys_foreach_fn *callback, void *ctx, - const char *host, const char *ip, u_int options); +int hostkeys_foreach(const char *path, + hostkeys_foreach_fn *callback, void *ctx, + const char *host, const char *ip, u_int options, u_int note); +int hostkeys_foreach_file(const char *path, FILE *f, + hostkeys_foreach_fn *callback, void *ctx, + const char *host, const char *ip, u_int options, u_int note); void hostfile_create_user_ssh_dir(const char *, int); diff --git a/ssh-keygen.c b/ssh-keygen.c index 634e1ee348ac..cfb5f1151661 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.426 2020/11/28 12:52:32 dtucker Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.427 2020/12/20 23:36:51 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -1341,7 +1341,7 @@ do_known_hosts(struct passwd *pw, const char *name, int find_host, foreach_options |= print_fingerprint ? HKF_WANT_PARSE_KEY : 0; if ((r = hostkeys_foreach(identity_file, (find_host || !hash_hosts) ? known_hosts_find_delete : known_hosts_hash, &ctx, name, NULL, - foreach_options)) != 0) { + foreach_options, 0)) != 0) { if (inplace) unlink(tmp); fatal_fr(r, "hostkeys_foreach"); diff --git a/sshconnect.c b/sshconnect.c index 6b60ca0d3bc3..5921141666b7 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.345 2020/11/27 00:49:58 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.346 2020/12/20 23:36:51 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -773,7 +773,7 @@ hostkeys_find_by_key_hostfile(const char *file, const char *which, debug3_f("trying %s hostfile \"%s\"", which, file); if ((r = hostkeys_foreach(file, hostkeys_find_by_key_cb, ctx, - ctx->host, ctx->ip, HKF_WANT_PARSE_KEY)) != 0) { + ctx->host, ctx->ip, HKF_WANT_PARSE_KEY, 0)) != 0) { if (r == SSH_ERR_SYSTEM_ERROR && errno == ENOENT) { debug_f("hostkeys file %s does not exist", file); return 0; @@ -924,17 +924,17 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, host_hostkeys = init_hostkeys(); for (i = 0; i < num_user_hostfiles; i++) - load_hostkeys(host_hostkeys, host, user_hostfiles[i]); + load_hostkeys(host_hostkeys, host, user_hostfiles[i], 0); for (i = 0; i < num_system_hostfiles; i++) - load_hostkeys(host_hostkeys, host, system_hostfiles[i]); + load_hostkeys(host_hostkeys, host, system_hostfiles[i], 0); ip_hostkeys = NULL; if (!want_cert && options.check_host_ip) { ip_hostkeys = init_hostkeys(); for (i = 0; i < num_user_hostfiles; i++) - load_hostkeys(ip_hostkeys, ip, user_hostfiles[i]); + load_hostkeys(ip_hostkeys, ip, user_hostfiles[i], 0); for (i = 0; i < num_system_hostfiles; i++) - load_hostkeys(ip_hostkeys, ip, system_hostfiles[i]); + load_hostkeys(ip_hostkeys, ip, system_hostfiles[i], 0); } retry: diff --git a/sshconnect2.c b/sshconnect2.c index 149bb8d6e883..afbb8526bb81 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.336 2020/11/13 07:30:44 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.337 2020/12/20 23:36:51 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -129,10 +129,11 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) get_hostfile_hostname_ipaddr(host, hostaddr, port, &hostname, NULL); hostkeys = init_hostkeys(); for (i = 0; i < options.num_user_hostfiles; i++) - load_hostkeys(hostkeys, hostname, options.user_hostfiles[i]); - for (i = 0; i < options.num_system_hostfiles; i++) - load_hostkeys(hostkeys, hostname, options.system_hostfiles[i]); - + load_hostkeys(hostkeys, hostname, options.user_hostfiles[i], 0); + for (i = 0; i < options.num_system_hostfiles; i++) { + load_hostkeys(hostkeys, hostname, + options.system_hostfiles[i], 0); + } /* * If a plain public key exists that matches the type of the best * preference HostkeyAlgorithms, then use the whole list as is. From 729b05f59ded35483acef90a6f88aa03eae33b29 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 20 Dec 2020 23:38:00 +0000 Subject: [PATCH 0116/1788] upstream: allow UserKnownHostsFile=none; feedback and ok markus@ OpenBSD-Commit-ID: c46d515eac94a35a1d50d5fd71c4b1ca53334b48 --- ssh.c | 42 ++++++++++++++++++++++++++++++------------ sshconnect.c | 6 +++++- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/ssh.c b/ssh.c index 7cece4efc583..5d14ba442321 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.544 2020/12/17 23:26:11 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.545 2020/12/20 23:38:00 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1441,18 +1441,36 @@ main(int ac, char **av) options.forward_agent_sock_path = cp; } + if (options.num_system_hostfiles > 0 && + strcasecmp(options.system_hostfiles[0], "none") == 0) { + if (options.num_system_hostfiles > 1) + fatal("Invalid GlobalKnownHostsFiles: \"none\" " + "appears with other entries"); + free(options.system_hostfiles[0]); + options.system_hostfiles[0] = NULL; + options.num_system_hostfiles = 0; + } + + if (options.num_user_hostfiles > 0 && + strcasecmp(options.user_hostfiles[0], "none") == 0) { + if (options.num_user_hostfiles > 1) + fatal("Invalid UserKnownHostsFiles: \"none\" " + "appears with other entries"); + free(options.user_hostfiles[0]); + options.user_hostfiles[0] = NULL; + options.num_user_hostfiles = 0; + } for (j = 0; j < options.num_user_hostfiles; j++) { - if (options.user_hostfiles[j] != NULL) { - cp = tilde_expand_filename(options.user_hostfiles[j], - getuid()); - p = default_client_percent_dollar_expand(cp, cinfo); - if (strcmp(options.user_hostfiles[j], p) != 0) - debug3("expanded UserKnownHostsFile '%s' -> " - "'%s'", options.user_hostfiles[j], p); - free(options.user_hostfiles[j]); - free(cp); - options.user_hostfiles[j] = p; - } + if (options.user_hostfiles[j] == NULL) + continue; + cp = tilde_expand_filename(options.user_hostfiles[j], getuid()); + p = default_client_percent_dollar_expand(cp, cinfo); + if (strcmp(options.user_hostfiles[j], p) != 0) + debug3("expanded UserKnownHostsFile '%s' -> " + "'%s'", options.user_hostfiles[j], p); + free(options.user_hostfiles[j]); + free(cp); + options.user_hostfiles[j] = p; } for (i = 0; i < options.num_local_forwards; i++) { diff --git a/sshconnect.c b/sshconnect.c index 5921141666b7..c17e44ae22e0 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.346 2020/12/20 23:36:51 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.347 2020/12/20 23:38:00 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -949,6 +949,10 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, host_status = check_key_in_hostkeys(host_hostkeys, host_key, &host_found); + /* If no host files were specified, then don't try to touch them */ + if (!readonly && num_user_hostfiles == 0) + readonly = RDONLY; + /* * Also perform check for the ip address, skip the check if we are * localhost, looking for a certificate, or the hostname was an ip From 0f504f592d15d8047e466eb7453067a6880992a8 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 20 Dec 2020 23:40:19 +0000 Subject: [PATCH 0117/1788] upstream: plumb ssh_conn_info through to sshconnect.c; feedback/ok markus@ OpenBSD-Commit-ID: e8d14a09cda3f1dc55df08f8a4889beff74e68b0 --- ssh.c | 35 +++++------------------------------ sshconnect.c | 29 +++++++++++++++++------------ sshconnect.h | 27 +++++++++++++++++++++++---- sshconnect2.c | 19 ++++++++++++------- 4 files changed, 57 insertions(+), 53 deletions(-) diff --git a/ssh.c b/ssh.c index 5d14ba442321..06598c7e10b4 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.545 2020/12/20 23:38:00 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.546 2020/12/20 23:40:19 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -227,15 +227,6 @@ tilde_expand_paths(char **paths, u_int num_paths) } } -#define DEFAULT_CLIENT_PERCENT_EXPAND_ARGS \ - "C", cinfo->conn_hash_hex, \ - "L", cinfo->shorthost, \ - "i", cinfo->uidstr, \ - "k", cinfo->keyalias, \ - "l", cinfo->thishost, \ - "n", cinfo->host_arg, \ - "p", cinfo->portstr - /* * Expands the set of percent_expand options used by the majority of keywords * in the client that support percent expansion. @@ -246,13 +237,7 @@ default_client_percent_expand(const char *str, const struct ssh_conn_info *cinfo) { return percent_expand(str, - /* values from statics above */ - DEFAULT_CLIENT_PERCENT_EXPAND_ARGS, - /* values from arguments */ - "d", cinfo->homedir, - "h", cinfo->remhost, - "r", cinfo->remuser, - "u", cinfo->locuser, + DEFAULT_CLIENT_PERCENT_EXPAND_ARGS(cinfo), (char *)NULL); } @@ -268,13 +253,7 @@ default_client_percent_dollar_expand(const char *str, char *ret; ret = percent_dollar_expand(str, - /* values from statics above */ - DEFAULT_CLIENT_PERCENT_EXPAND_ARGS, - /* values from arguments */ - "d", cinfo->homedir, - "h", cinfo->remhost, - "r", cinfo->remuser, - "u", cinfo->locuser, + DEFAULT_CLIENT_PERCENT_EXPAND_ARGS(cinfo), (char *)NULL); if (ret == NULL) fatal("invalid environment variable expansion"); @@ -1670,7 +1649,7 @@ main(int ac, char **av) /* Log into the remote system. Never returns if the login fails. */ ssh_login(ssh, &sensitive_data, host, (struct sockaddr *)&hostaddr, - options.port, pw, timeout_ms); + options.port, pw, timeout_ms, cinfo); if (ssh_packet_connection_is_on_socket(ssh)) { verbose("Authenticated to %s ([%s]:%d).", host, @@ -2088,11 +2067,7 @@ ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo) debug3("expanding LocalCommand: %s", options.local_command); cp = options.local_command; options.local_command = percent_expand(cp, - DEFAULT_CLIENT_PERCENT_EXPAND_ARGS, - "d", cinfo->homedir, - "h", cinfo->remhost, - "r", cinfo->remuser, - "u", cinfo->locuser, + DEFAULT_CLIENT_PERCENT_EXPAND_ARGS(cinfo), "T", tun_fwd_ifname == NULL ? "NONE" : tun_fwd_ifname, (char *)NULL); debug3("expanded LocalCommand: %s", options.local_command); diff --git a/sshconnect.c b/sshconnect.c index c17e44ae22e0..6e7f83430fcf 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.347 2020/12/20 23:38:00 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.348 2020/12/20 23:40:19 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -873,8 +873,9 @@ other_hostkeys_message(const char *host, const char *ip, #define RDONLY 1 #define ROQUIET 2 static int -check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, - struct sshkey *host_key, int readonly, +check_host_key(char *hostname, const struct ssh_conn_info *cinfo, + struct sockaddr *hostaddr, u_short port, + struct sshkey *host_key, int readonly, int clobber_port, char **user_hostfiles, u_int num_user_hostfiles, char **system_hostfiles, u_int num_system_hostfiles) { @@ -912,7 +913,8 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, * Prepare the hostname and address strings used for hostkey lookup. * In some cases, these will have a port number appended. */ - get_hostfile_hostname_ipaddr(hostname, hostaddr, port, &host, &ip); + get_hostfile_hostname_ipaddr(hostname, hostaddr, + clobber_port ? 0 : port, &host, &ip); /* * Turn off check_host_ip if the connection is to localhost, via proxy @@ -1021,10 +1023,11 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, break; case HOST_NEW: if (options.host_key_alias == NULL && port != 0 && - port != SSH_DEFAULT_PORT) { + port != SSH_DEFAULT_PORT && !clobber_port) { debug("checking without port identifier"); - if (check_host_key(hostname, hostaddr, 0, host_key, - ROQUIET, user_hostfiles, num_user_hostfiles, + if (check_host_key(hostname, cinfo, hostaddr, 0, + host_key, ROQUIET, 1, + user_hostfiles, num_user_hostfiles, system_hostfiles, num_system_hostfiles) == 0) { debug("found matching key w/out port"); break; @@ -1338,7 +1341,8 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, /* returns 0 if key verifies or -1 if key does NOT verify */ int -verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) +verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key, + const struct ssh_conn_info *cinfo) { u_int i; int r = -1, flags = 0; @@ -1432,8 +1436,8 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) } } } - r = check_host_key(host, hostaddr, options.port, host_key, RDRW, - options.user_hostfiles, options.num_user_hostfiles, + r = check_host_key(host, cinfo, hostaddr, options.port, host_key, + RDRW, 0, options.user_hostfiles, options.num_user_hostfiles, options.system_hostfiles, options.num_system_hostfiles); out: @@ -1457,7 +1461,8 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key) */ void ssh_login(struct ssh *ssh, Sensitive *sensitive, const char *orighost, - struct sockaddr *hostaddr, u_short port, struct passwd *pw, int timeout_ms) + struct sockaddr *hostaddr, u_short port, struct passwd *pw, int timeout_ms, + const struct ssh_conn_info *cinfo) { char *host; char *server_user, *local_user; @@ -1480,7 +1485,7 @@ ssh_login(struct ssh *ssh, Sensitive *sensitive, const char *orighost, /* key exchange */ /* authenticate user */ debug("Authenticating to %s:%d as '%s'", host, port, server_user); - ssh_kex2(ssh, host, hostaddr, port); + ssh_kex2(ssh, host, hostaddr, port, cinfo); ssh_userauth2(ssh, local_user, server_user, host, sensitive); free(local_user); free(host); diff --git a/sshconnect.h b/sshconnect.h index 556b2537c75f..161056b4d9e4 100644 --- a/sshconnect.h +++ b/sshconnect.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.h,v 1.44 2020/12/17 23:26:11 djm Exp $ */ +/* $OpenBSD: sshconnect.h,v 1.45 2020/12/20 23:40:19 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -46,6 +46,22 @@ struct ssh_conn_info { struct addrinfo; struct ssh; +struct hostkeys; +struct ssh_conn_info; + +/* default argument for client percent expansions */ +#define DEFAULT_CLIENT_PERCENT_EXPAND_ARGS(conn_info) \ + "C", conn_info->conn_hash_hex, \ + "L", conn_info->shorthost, \ + "i", conn_info->uidstr, \ + "k", conn_info->keyalias, \ + "l", conn_info->thishost, \ + "n", conn_info->host_arg, \ + "p", conn_info->portstr, \ + "d", conn_info->homedir, \ + "h", conn_info->remhost, \ + "r", conn_info->remuser, \ + "u", conn_info->locuser int ssh_connect(struct ssh *, const char *, const char *, struct addrinfo *, struct sockaddr_storage *, u_short, @@ -53,14 +69,17 @@ int ssh_connect(struct ssh *, const char *, const char *, void ssh_kill_proxy_command(void); void ssh_login(struct ssh *, Sensitive *, const char *, - struct sockaddr *, u_short, struct passwd *, int); + struct sockaddr *, u_short, struct passwd *, int, + const struct ssh_conn_info *); -int verify_host_key(char *, struct sockaddr *, struct sshkey *); +int verify_host_key(char *, struct sockaddr *, struct sshkey *, + const struct ssh_conn_info *); void get_hostfile_hostname_ipaddr(char *, struct sockaddr *, u_short, char **, char **); -void ssh_kex2(struct ssh *ssh, char *, struct sockaddr *, u_short); +void ssh_kex2(struct ssh *ssh, char *, struct sockaddr *, u_short, + const struct ssh_conn_info *); void ssh_userauth2(struct ssh *ssh, const char *, const char *, char *, Sensitive *); diff --git a/sshconnect2.c b/sshconnect2.c index afbb8526bb81..4460bca85850 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.337 2020/12/20 23:36:51 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.338 2020/12/20 23:40:19 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -92,13 +92,15 @@ extern Options options; u_char *session_id2 = NULL; u_int session_id2_len = 0; -char *xxx_host; -struct sockaddr *xxx_hostaddr; +static char *xxx_host; +static struct sockaddr *xxx_hostaddr; +static const struct ssh_conn_info *xxx_conn_info; static int verify_host_key_callback(struct sshkey *hostkey, struct ssh *ssh) { - if (verify_host_key(xxx_host, xxx_hostaddr, hostkey) == -1) + if (verify_host_key(xxx_host, xxx_hostaddr, hostkey, + xxx_conn_info) == -1) fatal("Host key verification failed."); return 0; } @@ -116,7 +118,8 @@ first_alg(const char *algs) } static char * -order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) +order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port, + const struct ssh_conn_info *cinfo) { char *oavail = NULL, *avail = NULL, *first = NULL, *last = NULL; char *alg = NULL, *hostname = NULL, *ret = NULL, *best = NULL; @@ -208,7 +211,8 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) } void -ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port) +ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port, + const struct ssh_conn_info *cinfo) { char *myproposal[PROPOSAL_MAX] = { KEX_CLIENT }; char *s, *all_key; @@ -216,6 +220,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port) xxx_host = host; xxx_hostaddr = hostaddr; + xxx_conn_info = cinfo; /* * If the user has not specified HostkeyAlgorithms, or has only @@ -250,7 +255,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port) /* Query known_hosts and prefer algorithms that appear there */ myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = compat_pkalg_proposal( - order_hostkeyalgs(host, hostaddr, port)); + order_hostkeyalgs(host, hostaddr, port, cinfo)); } else { /* Use specified HostkeyAlgorithms exactly */ myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = From 2c64f24e27a5e72a7f59e515fc4f4985355237ae Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 21 Dec 2020 14:02:56 +1100 Subject: [PATCH 0118/1788] Pull in missing rev 1.2. --- regress/unittests/misc/Makefile | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/regress/unittests/misc/Makefile b/regress/unittests/misc/Makefile index 06e954cb8ee7..0c8ebc7d4265 100644 --- a/regress/unittests/misc/Makefile +++ b/regress/unittests/misc/Makefile @@ -1,12 +1,19 @@ -# $OpenBSD: Makefile,v 1.1 2019/04/28 22:53:26 dtucker Exp $ +# $OpenBSD: Makefile,v 1.2 2019/08/22 21:47:27 bluhm Exp $ PROG=test_misc SRCS=tests.c # From usr.bin/ssh/Makefile.inc -SRCS+=sshbuf.c sshbuf-getput-basic.c ssherr.c log.c xmalloc.c misc.c -# From usr/bin/ssh/sshd/Makefile -SRCS+=atomicio.c cleanup.c fatal.c +SRCS+= sshbuf.c +SRCS+= sshbuf-getput-basic.c +SRCS+= sshbuf-misc.c +SRCS+= ssherr.c +SRCS+= log.c +SRCS+= xmalloc.c +SRCS+= misc.c + +# From usr.bin/ssh/sshd/Makefile +SRCS+= atomicio.c cleanup.c fatal.c REGRESS_TARGETS=run-regress-${PROG} From bf7eb3c266b7fd4ddda108fcf72b860af2af6406 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 16 Oct 2020 14:02:24 +0000 Subject: [PATCH 0119/1788] upstream: few more things needs match.c and addrmatch.c now that log.c calls match_pattern_list() OpenBSD-Regress-ID: f7c95c76b150d0aeb00a67858b9579b7d1b2db74 --- regress/unittests/conversion/Makefile | 3 ++- regress/unittests/misc/Makefile | 4 +++- regress/unittests/sshbuf/Makefile | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/regress/unittests/conversion/Makefile b/regress/unittests/conversion/Makefile index 8b2a09cc39fe..5ec667bf8c05 100644 --- a/regress/unittests/conversion/Makefile +++ b/regress/unittests/conversion/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.2 2017/12/21 00:41:22 djm Exp $ +# $OpenBSD: Makefile,v 1.3 2020/10/16 14:02:24 djm Exp $ PROG=test_conversion SRCS=tests.c @@ -6,6 +6,7 @@ SRCS=tests.c # From usr.bin/ssh SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=atomicio.c misc.c xmalloc.c log.c uidswap.c cleanup.c fatal.c ssherr.c +SRCS+=match.c addrmatch.c REGRESS_TARGETS=run-regress-${PROG} diff --git a/regress/unittests/misc/Makefile b/regress/unittests/misc/Makefile index 0c8ebc7d4265..6f0df8ec949c 100644 --- a/regress/unittests/misc/Makefile +++ b/regress/unittests/misc/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.2 2019/08/22 21:47:27 bluhm Exp $ +# $OpenBSD: Makefile,v 1.3 2020/10/16 14:02:24 djm Exp $ PROG=test_misc SRCS=tests.c @@ -11,6 +11,8 @@ SRCS+= ssherr.c SRCS+= log.c SRCS+= xmalloc.c SRCS+= misc.c +SRCS+= match.c +SRCS+= addrmatch.c # From usr.bin/ssh/sshd/Makefile SRCS+= atomicio.c cleanup.c fatal.c diff --git a/regress/unittests/sshbuf/Makefile b/regress/unittests/sshbuf/Makefile index 5f6c4426a7b0..56d91cc26192 100644 --- a/regress/unittests/sshbuf/Makefile +++ b/regress/unittests/sshbuf/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.8 2020/01/26 00:09:50 djm Exp $ +# $OpenBSD: Makefile,v 1.9 2020/10/16 14:02:24 djm Exp $ # $OpenBSD: Makefile,v 1.8 2020/01/26 00:09:50 djm Exp $ @@ -15,6 +15,7 @@ SRCS+=test_sshbuf_fixed.c # From usr.bin/ssh SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=sshbuf-io.c atomicio.c misc.c xmalloc.c log.c fatal.c ssherr.c cleanup.c +SRCS+=match.c addrmatch.c run-regress-${PROG}: ${PROG} env ${TEST_ENV} ./${PROG} ${UNITTEST_ARGS} From d97fb879724f1670bf55d9adfea7278a93c33ae2 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Mon, 21 Dec 2020 01:31:06 +0000 Subject: [PATCH 0120/1788] upstream: adapt to API change in hostkeys_foreach()/load_hostkeys() OpenBSD-Regress-ID: dcb468514f32da49a446372453497dc6eeafdbf3 --- regress/unittests/hostkeys/test_iterate.c | 91 ++++++++++++++++++----- 1 file changed, 72 insertions(+), 19 deletions(-) diff --git a/regress/unittests/hostkeys/test_iterate.c b/regress/unittests/hostkeys/test_iterate.c index 5904121ef8f4..a5b17d7e4056 100644 --- a/regress/unittests/hostkeys/test_iterate.c +++ b/regress/unittests/hostkeys/test_iterate.c @@ -1,4 +1,4 @@ -/* $OpenBSD: test_iterate.c,v 1.6 2018/07/16 03:09:59 djm Exp $ */ +/* $OpenBSD: test_iterate.c,v 1.7 2020/12/21 01:31:06 djm Exp $ */ /* * Regress test for hostfile.h hostkeys_foreach() * @@ -194,6 +194,7 @@ struct expected expected_full[] = { KEY_UNSPEC, /* key type */ NULL, /* deserialised key */ NULL, /* comment */ + 0, /* note */ } }, { "dsa_1.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -207,6 +208,7 @@ struct expected expected_full[] = { KEY_DSA, NULL, /* filled at runtime */ "DSA #1", + 0, } }, { "ecdsa_1.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -220,6 +222,7 @@ struct expected expected_full[] = { KEY_ECDSA, NULL, /* filled at runtime */ "ECDSA #1", + 0, } }, { "ed25519_1.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -233,6 +236,7 @@ struct expected expected_full[] = { KEY_ED25519, NULL, /* filled at runtime */ "ED25519 #1", + 0, } }, { "rsa_1.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -246,6 +250,7 @@ struct expected expected_full[] = { KEY_RSA, NULL, /* filled at runtime */ "RSA #1", + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -259,6 +264,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -272,6 +278,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { "dsa_2.pub" , -1, -1, HKF_MATCH_HOST, 0, HKF_MATCH_IP, HKF_MATCH_IP, -1, { NULL, @@ -285,6 +292,7 @@ struct expected expected_full[] = { KEY_DSA, NULL, /* filled at runtime */ "DSA #2", + 0, } }, { "ecdsa_2.pub" , -1, -1, HKF_MATCH_HOST, 0, HKF_MATCH_IP, HKF_MATCH_IP, -1, { NULL, @@ -298,6 +306,7 @@ struct expected expected_full[] = { KEY_ECDSA, NULL, /* filled at runtime */ "ECDSA #2", + 0, } }, { "ed25519_2.pub" , -1, -1, HKF_MATCH_HOST, 0, HKF_MATCH_IP, HKF_MATCH_IP, -1, { NULL, @@ -311,6 +320,7 @@ struct expected expected_full[] = { KEY_ED25519, NULL, /* filled at runtime */ "ED25519 #2", + 0, } }, { "rsa_2.pub" , -1, -1, HKF_MATCH_HOST, 0, HKF_MATCH_IP, HKF_MATCH_IP, -1, { NULL, @@ -324,6 +334,7 @@ struct expected expected_full[] = { KEY_RSA, NULL, /* filled at runtime */ "RSA #2", + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -337,6 +348,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -350,6 +362,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { "dsa_3.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, HKF_MATCH_IP, HKF_MATCH_IP, -1, { NULL, @@ -363,6 +376,7 @@ struct expected expected_full[] = { KEY_DSA, NULL, /* filled at runtime */ "DSA #3", + 0, } }, { "ecdsa_3.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, HKF_MATCH_IP, HKF_MATCH_IP, -1, { NULL, @@ -376,6 +390,7 @@ struct expected expected_full[] = { KEY_ECDSA, NULL, /* filled at runtime */ "ECDSA #3", + 0, } }, { "ed25519_3.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, HKF_MATCH_IP, HKF_MATCH_IP, -1, { NULL, @@ -389,6 +404,7 @@ struct expected expected_full[] = { KEY_ED25519, NULL, /* filled at runtime */ "ED25519 #3", + 0, } }, { "rsa_3.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, HKF_MATCH_IP, HKF_MATCH_IP, -1, { NULL, @@ -402,6 +418,7 @@ struct expected expected_full[] = { KEY_RSA, NULL, /* filled at runtime */ "RSA #3", + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -415,6 +432,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -428,6 +446,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { "dsa_5.pub" , -1, -1, 0, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, -1, { NULL, @@ -441,6 +460,7 @@ struct expected expected_full[] = { KEY_DSA, NULL, /* filled at runtime */ "DSA #5", + 0, } }, { "ecdsa_5.pub" , -1, -1, 0, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, -1, { NULL, @@ -454,6 +474,7 @@ struct expected expected_full[] = { KEY_ECDSA, NULL, /* filled at runtime */ "ECDSA #5", + 0, } }, { "ed25519_5.pub" , -1, -1, 0, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, -1, { NULL, @@ -467,6 +488,7 @@ struct expected expected_full[] = { KEY_ED25519, NULL, /* filled at runtime */ "ED25519 #5", + 0, } }, { "rsa_5.pub" , -1, -1, 0, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, -1, { NULL, @@ -480,6 +502,7 @@ struct expected expected_full[] = { KEY_RSA, NULL, /* filled at runtime */ "RSA #5", + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -493,6 +516,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, /* * The next series have each key listed multiple times, as the @@ -511,6 +535,7 @@ struct expected expected_full[] = { KEY_DSA, NULL, /* filled at runtime */ "DSA #6", + 0, } }, { "dsa_6.pub" , -1, -1, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, 0, -1, { NULL, @@ -524,6 +549,7 @@ struct expected expected_full[] = { KEY_DSA, NULL, /* filled at runtime */ "DSA #6", + 0, } }, { "dsa_6.pub" , -1, -1, 0, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, -1, { NULL, @@ -537,6 +563,7 @@ struct expected expected_full[] = { KEY_DSA, NULL, /* filled at runtime */ "DSA #6", + 0, } }, { "ecdsa_6.pub" , -1, -1, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, 0, -1, { NULL, @@ -550,6 +577,7 @@ struct expected expected_full[] = { KEY_ECDSA, NULL, /* filled at runtime */ "ECDSA #6", + 0, } }, { "ecdsa_6.pub" , -1, -1, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, 0, -1, { NULL, @@ -563,6 +591,7 @@ struct expected expected_full[] = { KEY_ECDSA, NULL, /* filled at runtime */ "ECDSA #6", + 0, } }, { "ecdsa_6.pub" , -1, -1, 0, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, -1, { NULL, @@ -576,6 +605,7 @@ struct expected expected_full[] = { KEY_ECDSA, NULL, /* filled at runtime */ "ECDSA #6", + 0, } }, { "ed25519_6.pub" , -1, -1, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, 0, -1, { NULL, @@ -589,6 +619,7 @@ struct expected expected_full[] = { KEY_ED25519, NULL, /* filled at runtime */ "ED25519 #6", + 0, } }, { "ed25519_6.pub" , -1, -1, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, 0, -1, { NULL, @@ -602,6 +633,7 @@ struct expected expected_full[] = { KEY_ED25519, NULL, /* filled at runtime */ "ED25519 #6", + 0, } }, { "ed25519_6.pub" , -1, -1, 0, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, -1, { NULL, @@ -615,6 +647,7 @@ struct expected expected_full[] = { KEY_ED25519, NULL, /* filled at runtime */ "ED25519 #6", + 0, } }, { "rsa_6.pub" , -1, -1, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, 0, -1, { NULL, @@ -628,6 +661,7 @@ struct expected expected_full[] = { KEY_RSA, NULL, /* filled at runtime */ "RSA #6", + 0, } }, { "rsa_6.pub" , -1, -1, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, 0, -1, { NULL, @@ -641,6 +675,7 @@ struct expected expected_full[] = { KEY_RSA, NULL, /* filled at runtime */ "RSA #6", + 0, } }, { "rsa_6.pub" , -1, -1, 0, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, -1, { NULL, @@ -654,6 +689,7 @@ struct expected expected_full[] = { KEY_RSA, NULL, /* filled at runtime */ "RSA #6", + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -667,6 +703,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -680,6 +717,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -693,6 +731,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { "ed25519_4.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -706,6 +745,7 @@ struct expected expected_full[] = { KEY_ED25519, NULL, /* filled at runtime */ "ED25519 #4", + 0, } }, { "ecdsa_4.pub" , -1, -1, HKF_MATCH_HOST, 0, 0, 0, -1, { NULL, @@ -719,6 +759,7 @@ struct expected expected_full[] = { KEY_ECDSA, NULL, /* filled at runtime */ "ECDSA #4", + 0, } }, { "dsa_4.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -732,6 +773,7 @@ struct expected expected_full[] = { KEY_DSA, NULL, /* filled at runtime */ "DSA #4", + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -745,6 +787,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -758,6 +801,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, 0, 0, 0, -1, { NULL, @@ -771,6 +815,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -784,6 +829,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, HKF_MATCH_HOST, 0, 0, 0, -1, { NULL, @@ -797,6 +843,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -810,6 +857,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, NULL, + 0, } }, { NULL, -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, { NULL, @@ -823,6 +871,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, /* filled at runtime */ NULL, + 0, } }, { NULL, HKF_STATUS_OK, KEY_RSA, HKF_MATCH_HOST, 0, 0, 0, -1, { NULL, @@ -836,6 +885,7 @@ struct expected expected_full[] = { KEY_UNSPEC, NULL, /* filled at runtime */ NULL, + 0, } }, }; @@ -853,7 +903,7 @@ test_iterate(void) ctx.flags = HKF_WANT_PARSE_KEY; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, NULL, NULL, ctx.flags), 0); + check, &ctx, NULL, NULL, ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -864,7 +914,7 @@ test_iterate(void) ctx.flags = 0; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, NULL, NULL, ctx.flags), 0); + check, &ctx, NULL, NULL, ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -876,7 +926,7 @@ test_iterate(void) ctx.match_host_p = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "prometheus.example.com", NULL, ctx.flags), 0); + check, &ctx, "prometheus.example.com", NULL, ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -888,7 +938,7 @@ test_iterate(void) ctx.match_host_s = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "sisyphus.example.com", NULL, ctx.flags), 0); + check, &ctx, "sisyphus.example.com", NULL, ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -900,7 +950,7 @@ test_iterate(void) ctx.match_host_p = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "prometheus.example.com", NULL, ctx.flags), 0); + check, &ctx, "prometheus.example.com", NULL, ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -912,7 +962,7 @@ test_iterate(void) ctx.match_host_s = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "sisyphus.example.com", NULL, ctx.flags), 0); + check, &ctx, "sisyphus.example.com", NULL, ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -923,7 +973,7 @@ test_iterate(void) ctx.flags = 0; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "actaeon.example.org", NULL, ctx.flags), 0); + check, &ctx, "actaeon.example.org", NULL, ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -934,7 +984,7 @@ test_iterate(void) ctx.flags = HKF_WANT_MATCH; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "actaeon.example.org", NULL, ctx.flags), 0); + check, &ctx, "actaeon.example.org", NULL, ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -946,7 +996,7 @@ test_iterate(void) ctx.match_ipv4 = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "tiresias.example.org", "192.0.2.1", ctx.flags), 0); + check, &ctx, "tiresias.example.org", "192.0.2.1", ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -958,7 +1008,8 @@ test_iterate(void) ctx.match_ipv6 = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "tiresias.example.org", "2001:db8::1", ctx.flags), 0); + check, &ctx, "tiresias.example.org", "2001:db8::1", + ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -970,7 +1021,7 @@ test_iterate(void) ctx.match_ipv4 = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "tiresias.example.org", "192.0.2.1", ctx.flags), 0); + check, &ctx, "tiresias.example.org", "192.0.2.1", ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -982,7 +1033,8 @@ test_iterate(void) ctx.match_ipv6 = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "tiresias.example.org", "2001:db8::1", ctx.flags), 0); + check, &ctx, "tiresias.example.org", "2001:db8::1", + ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -993,7 +1045,8 @@ test_iterate(void) ctx.flags = 0; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "tiresias.example.org", "192.168.0.1", ctx.flags), 0); + check, &ctx, "tiresias.example.org", "192.168.0.1", + ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -1004,7 +1057,7 @@ test_iterate(void) ctx.flags = HKF_WANT_MATCH; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "tiresias.example.org", "::1", ctx.flags), 0); + check, &ctx, "tiresias.example.org", "::1", ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -1017,7 +1070,7 @@ test_iterate(void) ctx.match_ipv4 = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "sisyphus.example.com", "192.0.2.1", ctx.flags), 0); + check, &ctx, "sisyphus.example.com", "192.0.2.1", ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -1031,7 +1084,7 @@ test_iterate(void) prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), check, &ctx, "prometheus.example.com", - "2001:db8::1", ctx.flags), 0); + "2001:db8::1", ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -1044,7 +1097,7 @@ test_iterate(void) ctx.match_ipv4 = 1; prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), - check, &ctx, "sisyphus.example.com", "192.0.2.1", ctx.flags), 0); + check, &ctx, "sisyphus.example.com", "192.0.2.1", ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); @@ -1058,7 +1111,7 @@ test_iterate(void) prepare_expected(expected_full, ctx.nexpected); ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"), check, &ctx, "prometheus.example.com", - "2001:db8::1", ctx.flags), 0); + "2001:db8::1", ctx.flags, 0), 0); cleanup_expected(expected_full, ctx.nexpected); TEST_DONE(); } From a11ca015879eab941add8c6bdaaec7d41107c6f5 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Mon, 21 Dec 2020 09:19:53 +0000 Subject: [PATCH 0121/1788] upstream: properly fix ProxyJump parsing; Thanks to tb@ for pointing out my error (parse_ssh_uri() can return -1/0/1, that I missed). Reported by Raf Czlonka via bugs@ ok tb@ OpenBSD-Commit-ID: a2991a3794bcaf1ca2b025212cce11cdb5f6b7d6 --- readconf.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/readconf.c b/readconf.c index c8ba5ddb532b..12995a18458f 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.344 2020/12/17 23:10:27 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.345 2020/12/21 09:19:53 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2783,7 +2783,7 @@ parse_jump(const char *s, Options *o, int active) { char *orig, *sdup, *cp; char *host = NULL, *user = NULL; - int ret = -1, port = -1, first; + int r, ret = -1, port = -1, first; active &= o->proxy_command == NULL && o->jump_host == NULL; @@ -2799,14 +2799,19 @@ parse_jump(const char *s, Options *o, int active) if (first) { /* First argument and configuration is active */ - if (parse_ssh_uri(cp, &user, &host, &port) == -1 && - parse_user_host_port(cp, &user, &host, &port) != 0) + r = parse_ssh_uri(cp, &user, &host, &port); + if (r == -1 || (r == 1 && + parse_user_host_port(cp, &user, &host, &port) != 0)) goto out; } else { /* Subsequent argument or inactive configuration */ if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 && parse_user_host_port(cp, NULL, NULL, NULL) != 0) goto out; + r = parse_ssh_uri(cp, NULL, NULL, NULL); + if (r == -1 || (r == 1 && + parse_user_host_port(cp, NULL, NULL, NULL) != 0)) + goto out; } first = 0; /* only check syntax for subsequent hosts */ } while (cp != sdup); From 03e93c753d7c223063ad8acaf9a30aa511e5f931 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 21 Dec 2020 11:09:32 +0000 Subject: [PATCH 0122/1788] upstream: Remove the pre-standardization cipher rijndael-cbc@lysator.liu.se. It is an alias for aes256-cbc which was standardized in RFC4253 (2006), has been deprecated and disabled by default since OpenSSH 7.2 (2016) and was only briefly documented in ssh.1 in 2001. This will reduce the amount of work the cipher/kex regression tests need to do by a little bit. ok markus@ djm@ OpenBSD-Commit-ID: fb460acc18290a998fd70910b19c29b4e4f199ad --- cipher.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cipher.c b/cipher.c index 8195199b32a2..639511cfdb1e 100644 --- a/cipher.c +++ b/cipher.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cipher.c,v 1.117 2020/04/03 04:27:03 djm Exp $ */ +/* $OpenBSD: cipher.c,v 1.118 2020/12/21 11:09:32 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -91,8 +91,6 @@ static const struct sshcipher ciphers[] = { { "aes128-cbc", 16, 16, 0, 0, CFLAG_CBC, EVP_aes_128_cbc }, { "aes192-cbc", 16, 24, 0, 0, CFLAG_CBC, EVP_aes_192_cbc }, { "aes256-cbc", 16, 32, 0, 0, CFLAG_CBC, EVP_aes_256_cbc }, - { "rijndael-cbc@lysator.liu.se", - 16, 32, 0, 0, CFLAG_CBC, EVP_aes_256_cbc }, { "aes128-ctr", 16, 16, 0, 0, 0, EVP_aes_128_ctr }, { "aes192-ctr", 16, 24, 0, 0, 0, EVP_aes_192_ctr }, { "aes256-ctr", 16, 32, 0, 0, 0, EVP_aes_256_ctr }, From 649205fe388b56acb3481a1b2461f6b5b7c6efa6 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 21 Dec 2020 22:48:41 +0000 Subject: [PATCH 0123/1788] upstream: Remove explicit rijndael-cbc@lysator.liu.se test since the cipher was removed. OpenBSD-Regress-ID: aa93cddb4ecd9bc21446a79008a1a53050e64f17 --- regress/dhgex.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regress/dhgex.sh b/regress/dhgex.sh index ae64a9fb64ec..6dd4cfe3f94a 100644 --- a/regress/dhgex.sh +++ b/regress/dhgex.sh @@ -1,4 +1,4 @@ -# $OpenBSD: dhgex.sh,v 1.6 2019/10/06 11:49:50 dtucker Exp $ +# $OpenBSD: dhgex.sh,v 1.7 2020/12/21 22:48:41 dtucker Exp $ # Placed in the Public Domain. tid="dhgex" @@ -58,4 +58,4 @@ check 3072 3des-cbc # 112 bits. check 3072 `${SSH} -Q cipher | grep 128` check 7680 `${SSH} -Q cipher | grep 192` check 8192 `${SSH} -Q cipher | grep 256` -check 8192 rijndael-cbc@lysator.liu.se chacha20-poly1305@openssh.com +check 8192 chacha20-poly1305@openssh.com From a34e14a5a0071de2036826a00197ce38c8b4ba8b Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 22 Dec 2020 00:12:22 +0000 Subject: [PATCH 0124/1788] upstream: move subprocess() from auth.c to misc.c make privilege dropping optional but allow it via callbacks (to avoid need to link uidswap.c everywhere) add some other flags (keep environment, disable strict path safety check) that make this more useful for client-side use. feedback & ok markus@ OpenBSD-Commit-ID: a80ea9fdcc156f1a18e9c166122c759fae1637bf --- auth.c | 154 +------------------------------------------- auth.h | 8 +-- auth2-pubkey.c | 12 ++-- misc.c | 171 ++++++++++++++++++++++++++++++++++++++++++++++++- misc.h | 12 +++- 5 files changed, 190 insertions(+), 167 deletions(-) diff --git a/auth.c b/auth.c index e1bf4e75e1c1..2b77abcadcd9 100644 --- a/auth.c +++ b/auth.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth.c,v 1.150 2020/12/20 23:36:51 djm Exp $ */ +/* $OpenBSD: auth.c,v 1.151 2020/12/22 00:12:22 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -841,158 +841,6 @@ auth_get_canonical_hostname(struct ssh *ssh, int use_dns) } } -/* - * Runs command in a subprocess with a minimal environment. - * Returns pid on success, 0 on failure. - * The child stdout and stderr maybe captured, left attached or sent to - * /dev/null depending on the contents of flags. - * "tag" is prepended to log messages. - * NB. "command" is only used for logging; the actual command executed is - * av[0]. - */ -pid_t -subprocess(const char *tag, struct passwd *pw, const char *command, - int ac, char **av, FILE **child, u_int flags) -{ - FILE *f = NULL; - struct stat st; - int fd, devnull, p[2], i; - pid_t pid; - char *cp, errmsg[512]; - u_int envsize; - char **child_env; - - if (child != NULL) - *child = NULL; - - debug3_f("%s command \"%s\" running as %s (flags 0x%x)", - tag, command, pw->pw_name, flags); - - /* Check consistency */ - if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 && - (flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) { - error_f("inconsistent flags"); - return 0; - } - if (((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) != (child == NULL)) { - error_f("inconsistent flags/output"); - return 0; - } - - /* - * If executing an explicit binary, then verify the it exists - * and appears safe-ish to execute - */ - if (!path_absolute(av[0])) { - error("%s path is not absolute", tag); - return 0; - } - temporarily_use_uid(pw); - if (stat(av[0], &st) == -1) { - error("Could not stat %s \"%s\": %s", tag, - av[0], strerror(errno)); - restore_uid(); - return 0; - } - if (safe_path(av[0], &st, NULL, 0, errmsg, sizeof(errmsg)) != 0) { - error("Unsafe %s \"%s\": %s", tag, av[0], errmsg); - restore_uid(); - return 0; - } - /* Prepare to keep the child's stdout if requested */ - if (pipe(p) == -1) { - error("%s: pipe: %s", tag, strerror(errno)); - restore_uid(); - return 0; - } - restore_uid(); - - switch ((pid = fork())) { - case -1: /* error */ - error("%s: fork: %s", tag, strerror(errno)); - close(p[0]); - close(p[1]); - return 0; - case 0: /* child */ - /* Prepare a minimal environment for the child. */ - envsize = 5; - child_env = xcalloc(sizeof(*child_env), envsize); - child_set_env(&child_env, &envsize, "PATH", _PATH_STDPATH); - child_set_env(&child_env, &envsize, "USER", pw->pw_name); - child_set_env(&child_env, &envsize, "LOGNAME", pw->pw_name); - child_set_env(&child_env, &envsize, "HOME", pw->pw_dir); - if ((cp = getenv("LANG")) != NULL) - child_set_env(&child_env, &envsize, "LANG", cp); - - for (i = 0; i < NSIG; i++) - ssh_signal(i, SIG_DFL); - - if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) { - error("%s: open %s: %s", tag, _PATH_DEVNULL, - strerror(errno)); - _exit(1); - } - if (dup2(devnull, STDIN_FILENO) == -1) { - error("%s: dup2: %s", tag, strerror(errno)); - _exit(1); - } - - /* Set up stdout as requested; leave stderr in place for now. */ - fd = -1; - if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) - fd = p[1]; - else if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0) - fd = devnull; - if (fd != -1 && dup2(fd, STDOUT_FILENO) == -1) { - error("%s: dup2: %s", tag, strerror(errno)); - _exit(1); - } - closefrom(STDERR_FILENO + 1); - - /* Don't use permanently_set_uid() here to avoid fatal() */ - if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) == -1) { - error("%s: setresgid %u: %s", tag, (u_int)pw->pw_gid, - strerror(errno)); - _exit(1); - } - if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) == -1) { - error("%s: setresuid %u: %s", tag, (u_int)pw->pw_uid, - strerror(errno)); - _exit(1); - } - /* stdin is pointed to /dev/null at this point */ - if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 && - dup2(STDIN_FILENO, STDERR_FILENO) == -1) { - error("%s: dup2: %s", tag, strerror(errno)); - _exit(1); - } - - execve(av[0], av, child_env); - error("%s exec \"%s\": %s", tag, command, strerror(errno)); - _exit(127); - default: /* parent */ - break; - } - - close(p[1]); - if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) - close(p[0]); - else if ((f = fdopen(p[0], "r")) == NULL) { - error("%s: fdopen: %s", tag, strerror(errno)); - close(p[0]); - /* Don't leave zombie child */ - kill(pid, SIGTERM); - while (waitpid(pid, NULL, 0) == -1 && errno == EINTR) - ; - return 0; - } - /* Success */ - debug3_f("%s pid %ld", tag, (long)pid); - if (child != NULL) - *child = f; - return pid; -} - /* These functions link key/cert options to the auth framework */ /* Log sshauthopt options locally and (optionally) for remote transmission */ diff --git a/auth.h b/auth.h index becc672b53f2..43c7d3d4041d 100644 --- a/auth.h +++ b/auth.h @@ -1,4 +1,4 @@ -/* $OpenBSD: auth.h,v 1.100 2019/09/06 05:23:55 djm Exp $ */ +/* $OpenBSD: auth.h,v 1.101 2020/12/22 00:12:22 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -225,12 +225,6 @@ void auth_debug_reset(void); struct passwd *fakepw(void); -#define SSH_SUBPROCESS_STDOUT_DISCARD (1) /* Discard stdout */ -#define SSH_SUBPROCESS_STDOUT_CAPTURE (1<<1) /* Redirect stdout */ -#define SSH_SUBPROCESS_STDERR_DISCARD (1<<2) /* Discard stderr */ -pid_t subprocess(const char *, struct passwd *, - const char *, int, char **, FILE **, u_int flags); - int sys_auth_passwd(struct ssh *, const char *); #if defined(KRB5) && !defined(HEIMDAL) diff --git a/auth2-pubkey.c b/auth2-pubkey.c index 307afa5629d2..14863cbf94c2 100644 --- a/auth2-pubkey.c +++ b/auth2-pubkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-pubkey.c,v 1.102 2020/12/17 23:28:50 djm Exp $ */ +/* $OpenBSD: auth2-pubkey.c,v 1.103 2020/12/22 00:12:22 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -530,9 +530,10 @@ match_principals_command(struct ssh *ssh, struct passwd *user_pw, /* Prepare a printable command for logs, etc. */ command = argv_assemble(ac, av); - if ((pid = subprocess("AuthorizedPrincipalsCommand", runas_pw, command, + if ((pid = subprocess("AuthorizedPrincipalsCommand", command, ac, av, &f, - SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0) + SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD, + runas_pw, temporarily_use_uid, restore_uid)) == 0) goto out; uid_swapped = 1; @@ -968,9 +969,10 @@ user_key_command_allowed2(struct ssh *ssh, struct passwd *user_pw, xasprintf(&command, "%s %s", av[0], av[1]); } - if ((pid = subprocess("AuthorizedKeysCommand", runas_pw, command, + if ((pid = subprocess("AuthorizedKeysCommand", command, ac, av, &f, - SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0) + SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD, + runas_pw, temporarily_use_uid, restore_uid)) == 0) goto out; uid_swapped = 1; diff --git a/misc.c b/misc.c index 7c9460e8f186..68feebf749fc 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.156 2020/11/27 00:49:58 djm Exp $ */ +/* $OpenBSD: misc.c,v 1.157 2020/12/22 00:12:22 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -2479,3 +2479,172 @@ stdfd_devnull(int do_stdin, int do_stdout, int do_stderr) close(devnull); return ret; } + +/* + * Runs command in a subprocess with a minimal environment. + * Returns pid on success, 0 on failure. + * The child stdout and stderr maybe captured, left attached or sent to + * /dev/null depending on the contents of flags. + * "tag" is prepended to log messages. + * NB. "command" is only used for logging; the actual command executed is + * av[0]. + */ +pid_t +subprocess(const char *tag, const char *command, + int ac, char **av, FILE **child, u_int flags, + struct passwd *pw, privdrop_fn *drop_privs, privrestore_fn *restore_privs) +{ + FILE *f = NULL; + struct stat st; + int fd, devnull, p[2], i; + pid_t pid; + char *cp, errmsg[512]; + u_int nenv = 0; + char **env = NULL; + + /* If dropping privs, then must specify user and restore function */ + if (drop_privs != NULL && (pw == NULL || restore_privs == NULL)) { + error("%s: inconsistent arguments", tag); /* XXX fatal? */ + return 0; + } + if (pw == NULL && (pw = getpwuid(getuid())) == NULL) { + error("%s: no user for current uid", tag); + return 0; + } + if (child != NULL) + *child = NULL; + + debug3_f("%s command \"%s\" running as %s (flags 0x%x)", + tag, command, pw->pw_name, flags); + + /* Check consistency */ + if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 && + (flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) { + error_f("inconsistent flags"); + return 0; + } + if (((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) != (child == NULL)) { + error_f("inconsistent flags/output"); + return 0; + } + + /* + * If executing an explicit binary, then verify the it exists + * and appears safe-ish to execute + */ + if (!path_absolute(av[0])) { + error("%s path is not absolute", tag); + return 0; + } + if (drop_privs != NULL) + drop_privs(pw); + if (stat(av[0], &st) == -1) { + error("Could not stat %s \"%s\": %s", tag, + av[0], strerror(errno)); + goto restore_return; + } + if ((flags & SSH_SUBPROCESS_UNSAFE_PATH) == 0 && + safe_path(av[0], &st, NULL, 0, errmsg, sizeof(errmsg)) != 0) { + error("Unsafe %s \"%s\": %s", tag, av[0], errmsg); + goto restore_return; + } + /* Prepare to keep the child's stdout if requested */ + if (pipe(p) == -1) { + error("%s: pipe: %s", tag, strerror(errno)); + restore_return: + if (restore_privs != NULL) + restore_privs(); + return 0; + } + if (restore_privs != NULL) + restore_privs(); + + switch ((pid = fork())) { + case -1: /* error */ + error("%s: fork: %s", tag, strerror(errno)); + close(p[0]); + close(p[1]); + return 0; + case 0: /* child */ + /* Prepare a minimal environment for the child. */ + if ((flags & SSH_SUBPROCESS_PRESERVE_ENV) == 0) { + nenv = 5; + env = xcalloc(sizeof(*env), nenv); + child_set_env(&env, &nenv, "PATH", _PATH_STDPATH); + child_set_env(&env, &nenv, "USER", pw->pw_name); + child_set_env(&env, &nenv, "LOGNAME", pw->pw_name); + child_set_env(&env, &nenv, "HOME", pw->pw_dir); + if ((cp = getenv("LANG")) != NULL) + child_set_env(&env, &nenv, "LANG", cp); + } + + for (i = 0; i < NSIG; i++) + ssh_signal(i, SIG_DFL); + + if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) { + error("%s: open %s: %s", tag, _PATH_DEVNULL, + strerror(errno)); + _exit(1); + } + if (dup2(devnull, STDIN_FILENO) == -1) { + error("%s: dup2: %s", tag, strerror(errno)); + _exit(1); + } + + /* Set up stdout as requested; leave stderr in place for now. */ + fd = -1; + if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) + fd = p[1]; + else if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0) + fd = devnull; + if (fd != -1 && dup2(fd, STDOUT_FILENO) == -1) { + error("%s: dup2: %s", tag, strerror(errno)); + _exit(1); + } + closefrom(STDERR_FILENO + 1); + + if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) == -1) { + error("%s: setresgid %u: %s", tag, (u_int)pw->pw_gid, + strerror(errno)); + _exit(1); + } + if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) == -1) { + error("%s: setresuid %u: %s", tag, (u_int)pw->pw_uid, + strerror(errno)); + _exit(1); + } + /* stdin is pointed to /dev/null at this point */ + if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 && + dup2(STDIN_FILENO, STDERR_FILENO) == -1) { + error("%s: dup2: %s", tag, strerror(errno)); + _exit(1); + } + if (env != NULL) + execve(av[0], av, env); + else + execv(av[0], av); + error("%s %s \"%s\": %s", tag, env == NULL ? "execv" : "execve", + command, strerror(errno)); + _exit(127); + default: /* parent */ + break; + } + + close(p[1]); + if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) + close(p[0]); + else if ((f = fdopen(p[0], "r")) == NULL) { + error("%s: fdopen: %s", tag, strerror(errno)); + close(p[0]); + /* Don't leave zombie child */ + kill(pid, SIGTERM); + while (waitpid(pid, NULL, 0) == -1 && errno == EINTR) + ; + return 0; + } + /* Success */ + debug3_f("%s pid %ld", tag, (long)pid); + if (child != NULL) + *child = f; + return pid; +} diff --git a/misc.h b/misc.h index b8120a140525..c60fe202aa58 100644 --- a/misc.h +++ b/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.90 2020/11/27 00:49:58 djm Exp $ */ +/* $OpenBSD: misc.h,v 1.91 2020/12/22 00:12:22 djm Exp $ */ /* * Author: Tatu Ylonen @@ -99,6 +99,16 @@ void sock_set_v6only(int); struct passwd *pwcopy(struct passwd *); const char *ssh_gai_strerror(int); +typedef void privdrop_fn(struct passwd *); +typedef void privrestore_fn(void); +#define SSH_SUBPROCESS_STDOUT_DISCARD (1) /* Discard stdout */ +#define SSH_SUBPROCESS_STDOUT_CAPTURE (1<<1) /* Redirect stdout */ +#define SSH_SUBPROCESS_STDERR_DISCARD (1<<2) /* Discard stderr */ +#define SSH_SUBPROCESS_UNSAFE_PATH (1<<3) /* Don't check for safe cmd */ +#define SSH_SUBPROCESS_PRESERVE_ENV (1<<4) /* Keep parent environment */ +pid_t subprocess(const char *, const char *, int, char **, FILE **, u_int, + struct passwd *, privdrop_fn *, privrestore_fn *); + typedef struct arglist arglist; struct arglist { char **list; From da4bf0db942b5f0278f33238b86235e5813d7a5a Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 22 Dec 2020 00:15:22 +0000 Subject: [PATCH 0125/1788] upstream: add a ssh_config KnownHostsCommand that allows the client to obtain known_hosts data from a command in addition to the usual files. The command accepts bunch of %-expansions, including details of the connection and the offered server host key. Note that the command may be invoked up to three times per connection (see the manpage for details). ok markus@ OpenBSD-Commit-ID: 2433cff4fb323918ae968da6ff38feb99b4d33d0 --- readconf.c | 12 +++++- readconf.h | 4 +- ssh.1 | 5 ++- ssh_config.5 | 58 +++++++++++++++++++++++++- sshconnect.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++--- sshconnect.h | 6 ++- sshconnect2.c | 9 ++++- 7 files changed, 188 insertions(+), 16 deletions(-) diff --git a/readconf.c b/readconf.c index 12995a18458f..97c0d183dbe3 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.345 2020/12/21 09:19:53 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.346 2020/12/22 00:15:22 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -172,7 +172,7 @@ typedef enum { oStreamLocalBindMask, oStreamLocalBindUnlink, oRevokedHostKeys, oFingerprintHash, oUpdateHostkeys, oHostbasedKeyTypes, oPubkeyAcceptedKeyTypes, oCASignatureAlgorithms, oProxyJump, - oSecurityKeyProvider, + oSecurityKeyProvider, oKnownHostsCommand, oIgnore, oIgnoredUnknownOption, oDeprecated, oUnsupported } OpCodes; @@ -311,6 +311,7 @@ static struct { { "ignoreunknown", oIgnoreUnknown }, { "proxyjump", oProxyJump }, { "securitykeyprovider", oSecurityKeyProvider }, + { "knownhostscommand", oKnownHostsCommand }, { NULL, oBadOption } }; @@ -1254,6 +1255,10 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, charptr = &options->sk_provider; goto parse_string; + case oKnownHostsCommand: + charptr = &options->known_hosts_command; + goto parse_command; + case oProxyCommand: charptr = &options->proxy_command; /* Ignore ProxyCommand if ProxyJump already specified */ @@ -2217,6 +2222,7 @@ initialize_options(Options * options) options->update_hostkeys = -1; options->hostbased_key_types = NULL; options->pubkey_key_types = NULL; + options->known_hosts_command = NULL; } /* @@ -2452,6 +2458,7 @@ fill_default_options(Options * options) CLEAR_ON_NONE(options->revoked_host_keys); CLEAR_ON_NONE(options->pkcs11_provider); CLEAR_ON_NONE(options->sk_provider); + CLEAR_ON_NONE(options->known_hosts_command); if (options->jump_host != NULL && strcmp(options->jump_host, "none") == 0 && options->jump_port == 0 && options->jump_user == NULL) { @@ -3100,6 +3107,7 @@ dump_client_config(Options *o, const char *host) dump_cfg_string(oPubkeyAcceptedKeyTypes, o->pubkey_key_types); dump_cfg_string(oRevokedHostKeys, o->revoked_host_keys); dump_cfg_string(oXAuthLocation, o->xauth_location); + dump_cfg_string(oKnownHostsCommand, o->known_hosts_command); /* Forwards */ dump_cfg_forwards(oDynamicForward, o->num_local_forwards, o->local_forwards); diff --git a/readconf.h b/readconf.h index 268dbf179a9e..85ea2e112a43 100644 --- a/readconf.h +++ b/readconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.h,v 1.136 2020/12/17 23:10:27 djm Exp $ */ +/* $OpenBSD: readconf.h,v 1.137 2020/12/22 00:15:23 djm Exp $ */ /* * Author: Tatu Ylonen @@ -169,6 +169,8 @@ typedef struct { int jump_port; char *jump_extra; + char *known_hosts_command; + char *ignored_unknown; /* Pattern list of unknown tokens to ignore */ } Options; diff --git a/ssh.1 b/ssh.1 index 555317887e14..81e147c75048 100644 --- a/ssh.1 +++ b/ssh.1 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh.1,v 1.414 2020/07/15 05:40:05 jmc Exp $ -.Dd $Mdocdate: July 15 2020 $ +.\" $OpenBSD: ssh.1,v 1.415 2020/12/22 00:15:23 djm Exp $ +.Dd $Mdocdate: December 22 2020 $ .Dt SSH 1 .Os .Sh NAME @@ -521,6 +521,7 @@ For full details of the options listed below, and their possible values, see .It KbdInteractiveAuthentication .It KbdInteractiveDevices .It KexAlgorithms +.It KnownHostsCommand .It LocalCommand .It LocalForward .It LogLevel diff --git a/ssh_config.5 b/ssh_config.5 index 98035a2f40b9..d6d22f1dd28d 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.338 2020/10/16 14:34:33 jmc Exp $ -.Dd $Mdocdate: October 16 2020 $ +.\" $OpenBSD: ssh_config.5,v 1.339 2020/12/22 00:15:23 djm Exp $ +.Dd $Mdocdate: December 22 2020 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1120,6 +1120,31 @@ diffie-hellman-group14-sha256 .Pp The list of available key exchange algorithms may also be obtained using .Qq ssh -Q kex . +.It Cm KnownHostsCommand +Specifies a command to use to obtain a list of host keys, additional to +those listed in +.Cm UserKnownHostsFile +and +.Cm GlobalKnownHostsFile . +This command is executed after the files have been read. +It may write host keys lines to standard output in identical format to the +usual files (described in the +.Sx VERIFYING HOST KEYS +section in +.Xr ssh 1 ) . +Arguments to +.Cm KnownHostsCommand +accept the tokens described in the +.Sx TOKENS +section. +The command may be invoked multiple times per connection: when preparing +the preference list of host key algorithms to use, again to obtain the +host key for the requested host name and, if +.Cm CheckHostIP +is enabled, one more time to obtain the host key matching the server's +address. +If the command exits abnormally or returns a non-zero exit status then the +connection is terminated. .It Cm LocalCommand Specifies a command to execute on the local machine after successfully connecting to the server. @@ -1883,10 +1908,31 @@ A literal Hash of %l%h%p%r. .It %d Local user's home directory. +.It %f +The fingerprint of the server's host key. +.It %H +The +.Pa known_hosts +hostname or address that is being searched for. .It %h The remote hostname. +.It %I +A string describing the reason for a +.Cm KnownHostsCommand +execution; either +.Cm "ADDRESS" +when looking up a host by address (only when +.Cm CheckHostIP +is enabled), +.Cm "HOSTNAME" +when searching by hostname or +.Cm "ORDER" +when preparing the host key algorithm preference list to use for the +destination host. .It %i The local user ID. +.It %K +The base64 encoded host key. .It %k The host key alias if specified, otherwise the orignal remote hostname given on the command line. @@ -1909,6 +1955,9 @@ network interface assigned if tunnel forwarding was requested, or .Qq NONE otherwise. +.It %t +The type of the server host key, e.g. +.Cm ssh-ed25519 .It %u The local username. .El @@ -1917,6 +1966,7 @@ The local username. .Cm ControlPath , .Cm IdentityAgent , .Cm IdentityFile , +.Cm KnownHostsCommand , .Cm LocalForward , .Cm Match exec , .Cm RemoteCommand , @@ -1925,6 +1975,9 @@ and .Cm UserKnownHostsFile accept the tokens %%, %C, %d, %h, %i, %L, %l, %n, %p, %r, and %u. .Pp +.Cm KnownHostsCommand +additionally accepts the tokens %f, %H, %I, %K and %t. +.Pp .Cm Hostname accepts the tokens %% and %h. .Pp @@ -1948,6 +2001,7 @@ The keywords .Cm ControlPath , .Cm IdentityAgent , .Cm IdentityFile +.Cm KnownHostsCommand , and .Cm UserKnownHostsFile support environment variables. diff --git a/sshconnect.c b/sshconnect.c index 6e7f83430fcf..616ee37e8fb6 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.348 2020/12/20 23:40:19 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.349 2020/12/22 00:15:23 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -865,6 +865,84 @@ other_hostkeys_message(const char *host, const char *ip, return ret; } +void +load_hostkeys_command(struct hostkeys *hostkeys, const char *command_template, + const char *invocation, const struct ssh_conn_info *cinfo, + const struct sshkey *host_key, const char *hostfile_hostname) +{ + int r, i, ac = 0; + char *key_fp = NULL, *keytext = NULL, *tmp; + char *command = NULL, *tag = NULL, **av = NULL; + FILE *f = NULL; + pid_t pid; + void (*osigchld)(int); + + xasprintf(&tag, "KnownHostsCommand-%s", invocation); + + if (host_key != NULL) { + if ((key_fp = sshkey_fingerprint(host_key, + options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) + fatal_f("sshkey_fingerprint failed"); + if ((r = sshkey_to_base64(host_key, &keytext)) != 0) + fatal_fr(r, "sshkey_to_base64 failed"); + } + /* + * NB. all returns later this function should go via "out" to + * ensure the original SIGCHLD handler is restored properly. + */ + osigchld = ssh_signal(SIGCHLD, SIG_DFL); + + /* Turn the command into an argument vector */ + if (argv_split(command_template, &ac, &av) != 0) { + error("%s \"%s\" contains invalid quotes", tag, + command_template); + goto out; + } + if (ac == 0) { + error("%s \"%s\" yielded no arguments", tag, + command_template); + goto out; + } + for (i = 1; i < ac; i++) { + tmp = percent_dollar_expand(av[i], + DEFAULT_CLIENT_PERCENT_EXPAND_ARGS(cinfo), + "H", hostfile_hostname, + "I", invocation, + "t", host_key == NULL ? "NONE" : sshkey_ssh_name(host_key), + "f", key_fp == NULL ? "NONE" : key_fp, + "K", keytext == NULL ? "NONE" : keytext, + (char *)NULL); + if (tmp == NULL) + fatal_f("percent_expand failed"); + free(av[i]); + av[i] = tmp; + } + /* Prepare a printable command for logs, etc. */ + command = argv_assemble(ac, av); + + if ((pid = subprocess(tag, command, ac, av, &f, + SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_UNSAFE_PATH| + SSH_SUBPROCESS_PRESERVE_ENV, NULL, NULL, NULL)) == 0) + goto out; + + load_hostkeys_file(hostkeys, hostfile_hostname, tag, f, 1); + + if (exited_cleanly(pid, tag, command, 0) != 0) + fatal("KnownHostsCommand failed"); + + out: + if (f != NULL) + fclose(f); + ssh_signal(SIGCHLD, osigchld); + for (i = 0; i < ac; i++) + free(av[i]); + free(av); + free(tag); + free(command); + free(key_fp); + free(keytext); +} + /* * check whether the supplied host key is valid, return -1 if the key * is not valid. user_hostfile[0] will not be updated if 'readonly' is true. @@ -877,7 +955,8 @@ check_host_key(char *hostname, const struct ssh_conn_info *cinfo, struct sockaddr *hostaddr, u_short port, struct sshkey *host_key, int readonly, int clobber_port, char **user_hostfiles, u_int num_user_hostfiles, - char **system_hostfiles, u_int num_system_hostfiles) + char **system_hostfiles, u_int num_system_hostfiles, + const char *hostfile_command) { HostStatus host_status = -1, ip_status = -1; struct sshkey *raw_key = NULL; @@ -929,6 +1008,10 @@ check_host_key(char *hostname, const struct ssh_conn_info *cinfo, load_hostkeys(host_hostkeys, host, user_hostfiles[i], 0); for (i = 0; i < num_system_hostfiles; i++) load_hostkeys(host_hostkeys, host, system_hostfiles[i], 0); + if (hostfile_command != NULL && !clobber_port) { + load_hostkeys_command(host_hostkeys, hostfile_command, + "HOSTNAME", cinfo, host_key, host); + } ip_hostkeys = NULL; if (!want_cert && options.check_host_ip) { @@ -937,6 +1020,10 @@ check_host_key(char *hostname, const struct ssh_conn_info *cinfo, load_hostkeys(ip_hostkeys, ip, user_hostfiles[i], 0); for (i = 0; i < num_system_hostfiles; i++) load_hostkeys(ip_hostkeys, ip, system_hostfiles[i], 0); + if (hostfile_command != NULL && !clobber_port) { + load_hostkeys_command(ip_hostkeys, hostfile_command, + "ADDRESS", cinfo, host_key, ip); + } } retry: @@ -951,8 +1038,12 @@ check_host_key(char *hostname, const struct ssh_conn_info *cinfo, host_status = check_key_in_hostkeys(host_hostkeys, host_key, &host_found); - /* If no host files were specified, then don't try to touch them */ - if (!readonly && num_user_hostfiles == 0) + /* + * If there are no hostfiles, or if the hostkey was found via + * KnownHostsCommand, then don't try to touch the disk. + */ + if (!readonly && (num_user_hostfiles == 0 || + (host_found != NULL && host_found->note != 0))) readonly = RDONLY; /* @@ -993,6 +1084,11 @@ check_host_key(char *hostname, const struct ssh_conn_info *cinfo, debug3_f("host key found in GlobalKnownHostsFile; " "disabling UpdateHostkeys"); } + if (options.update_hostkeys != 0 && host_found->note) { + options.update_hostkeys = 0; + debug3_f("host key found via KnownHostsCommand; " + "disabling UpdateHostkeys"); + } if (options.check_host_ip && ip_status == HOST_NEW) { if (readonly || want_cert) logit("%s host key for IP address " @@ -1028,7 +1124,8 @@ check_host_key(char *hostname, const struct ssh_conn_info *cinfo, if (check_host_key(hostname, cinfo, hostaddr, 0, host_key, ROQUIET, 1, user_hostfiles, num_user_hostfiles, - system_hostfiles, num_system_hostfiles) == 0) { + system_hostfiles, num_system_hostfiles, + hostfile_command) == 0) { debug("found matching key w/out port"); break; } @@ -1438,7 +1535,8 @@ verify_host_key(char *host, struct sockaddr *hostaddr, struct sshkey *host_key, } r = check_host_key(host, cinfo, hostaddr, options.port, host_key, RDRW, 0, options.user_hostfiles, options.num_user_hostfiles, - options.system_hostfiles, options.num_system_hostfiles); + options.system_hostfiles, options.num_system_hostfiles, + options.known_hosts_command); out: sshkey_free(plain); diff --git a/sshconnect.h b/sshconnect.h index 161056b4d9e4..f518a9a1302f 100644 --- a/sshconnect.h +++ b/sshconnect.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.h,v 1.45 2020/12/20 23:40:19 djm Exp $ */ +/* $OpenBSD: sshconnect.h,v 1.46 2020/12/22 00:15:23 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -88,3 +88,7 @@ int ssh_local_cmd(const char *); void maybe_add_key_to_agent(const char *, struct sshkey *, const char *, const char *); + +void load_hostkeys_command(struct hostkeys *, const char *, + const char *, const struct ssh_conn_info *, + const struct sshkey *, const char *); diff --git a/sshconnect2.c b/sshconnect2.c index 4460bca85850..95813b9b85a4 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.338 2020/12/20 23:40:19 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.339 2020/12/22 00:15:23 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -137,6 +137,10 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port, load_hostkeys(hostkeys, hostname, options.system_hostfiles[i], 0); } + if (options.known_hosts_command != NULL) { + load_hostkeys_command(hostkeys, options.known_hosts_command, + "ORDER", cinfo, NULL, host); + } /* * If a plain public key exists that matches the type of the best * preference HostkeyAlgorithms, then use the whole list as is. @@ -198,7 +202,8 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port, (*first == '\0' || *last == '\0') ? "" : ",", last); if (*first != '\0') debug3_f("prefer hostkeyalgs: %s", first); - + else + debug3_f("no algorithms matched; accept original"); out: free(best); free(first); From 0121aa87bab9ad2365de2d07f2832b56d5ff9871 Mon Sep 17 00:00:00 2001 From: "tb@openbsd.org" Date: Tue, 22 Dec 2020 03:05:31 +0000 Subject: [PATCH 0126/1788] upstream: Remove lines accidentally left behind in the ProxyJump parsing fix r1.345. ok djm OpenBSD-Commit-ID: fe767c108c8117bea33767b080ff62eef2c55f5c --- readconf.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/readconf.c b/readconf.c index 97c0d183dbe3..2a7870a1d9df 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.346 2020/12/22 00:15:22 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.347 2020/12/22 03:05:31 tb Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2812,9 +2812,6 @@ parse_jump(const char *s, Options *o, int active) goto out; } else { /* Subsequent argument or inactive configuration */ - if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 && - parse_user_host_port(cp, NULL, NULL, NULL) != 0) - goto out; r = parse_ssh_uri(cp, NULL, NULL, NULL); if (r == -1 || (r == 1 && parse_user_host_port(cp, NULL, NULL, NULL) != 0)) From 2873f19570d4d8758be24dbf78332be9a779009b Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 22 Dec 2020 06:03:36 +0000 Subject: [PATCH 0127/1788] upstream: regress test for KnownHostsCommand OpenBSD-Regress-ID: ffc77464320b6dabdcfa0a72e0df02659233a38a --- regress/Makefile | 9 +++--- regress/knownhosts-command.sh | 53 +++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 regress/knownhosts-command.sh diff --git a/regress/Makefile b/regress/Makefile index 8b4ed9de398a..43da7c7db940 100644 --- a/regress/Makefile +++ b/regress/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.109 2020/06/19 05:07:09 dtucker Exp $ +# $OpenBSD: Makefile,v 1.110 2020/12/22 06:03:36 djm Exp $ tests: prep file-tests t-exec unit @@ -93,7 +93,8 @@ LTESTS= connect \ allow-deny-users \ authinfo \ sshsig \ - keygen-comment + keygen-comment \ + knownhosts-command INTEROP_TESTS= putty-transfer putty-ciphers putty-kex conch-ciphers @@ -122,9 +123,9 @@ CLEANFILES= *.core actual agent-key.* authorized_keys_${USERNAME} \ rsa_ssh2_crnl.prv scp-ssh-wrapper.exe \ scp-ssh-wrapper.scp setuid-allowed sftp-server.log \ sftp-server.sh sftp.log ssh-log-wrapper.sh ssh.log \ - ssh-rsa_oldfmt \ + ssh-rsa_oldfmt knownhosts_command \ ssh_config ssh_config.* ssh_proxy ssh_proxy_bak \ - ssh_proxy_envpass sshd.log sshd_config sshd_config_minimal \ + ssh_proxy_* sshd.log sshd_config sshd_config.* \ sshd_config.* sshd_proxy sshd_proxy.* sshd_proxy_bak \ sshd_proxy_orig t10.out t10.out.pub t12.out t12.out.pub \ t2.out t3.out t6.out1 t6.out2 t7.out t7.out.pub \ diff --git a/regress/knownhosts-command.sh b/regress/knownhosts-command.sh new file mode 100644 index 000000000000..6881d6079cfc --- /dev/null +++ b/regress/knownhosts-command.sh @@ -0,0 +1,53 @@ +# $OpenBSD: knownhosts-command.sh,v 1.1 2020/12/22 06:03:36 djm Exp $ +# Placed in the Public Domain. + +tid="known hosts command " + +rm -f $OBJ/knownhosts_command $OBJ/ssh_proxy_khc +cp $OBJ/ssh_proxy $OBJ/ssh_proxy_orig + +( grep -vi GlobalKnownHostsFile $OBJ/ssh_proxy_orig | \ + grep -vi UserKnownHostsFile; + echo "GlobalKnownHostsFile none" ; + echo "UserKnownHostsFile none" ; + echo "KnownHostsCommand $OBJ/knownhosts_command '%t' '%K' '%u'" ; +) > $OBJ/ssh_proxy + +verbose "simple connection" +cat > $OBJ/knownhosts_command << _EOF +#!/bin/sh +cat $OBJ/known_hosts +_EOF +chmod a+x $OBJ/knownhosts_command +${SSH} -F $OBJ/ssh_proxy x true || fail "ssh connect failed" + +verbose "no keys" +cat > $OBJ/knownhosts_command << _EOF +#!/bin/sh +exit 0 +_EOF +chmod a+x $OBJ/knownhosts_command +${SSH} -F $OBJ/ssh_proxy x true && fail "ssh connect succeeded with no keys" + +verbose "bad exit status" +cat > $OBJ/knownhosts_command << _EOF +#!/bin/sh +cat $OBJ/known_hosts +exit 1 +_EOF +chmod a+x $OBJ/knownhosts_command +${SSH} -F $OBJ/ssh_proxy x true && fail "ssh connect succeeded with bad exit" + +for keytype in ${SSH_HOSTKEY_TYPES} ; do + test "x$keytype" = "xssh-dss" && continue + verbose "keytype $keytype" + cat > $OBJ/knownhosts_command << _EOF +#!/bin/sh +die() { echo "\$@" 1>&2 ; exit 1; } +test "x\$1" = "x$keytype" || die "wrong keytype \$1" +test "x\$3" = "x$LOGNAME" || die "wrong username \$3" +grep -- "\$1.*\$2" $OBJ/known_hosts +_EOF + ${SSH} -F $OBJ/ssh_proxy -oHostKeyAlgorithms=$keytype x true || + fail "ssh connect failed for keytype $x" +done From 3eb647cbb34d87a063aa7714256c6e56103fffda Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 22 Dec 2020 06:47:24 +0000 Subject: [PATCH 0128/1788] upstream: more detail for failing tests OpenBSD-Regress-ID: c68c0e5a521cad7e7f68e54c54ebf86d6c10ee1d --- regress/knownhosts-command.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/regress/knownhosts-command.sh b/regress/knownhosts-command.sh index 6881d6079cfc..f15df670b0c8 100644 --- a/regress/knownhosts-command.sh +++ b/regress/knownhosts-command.sh @@ -1,4 +1,4 @@ -# $OpenBSD: knownhosts-command.sh,v 1.1 2020/12/22 06:03:36 djm Exp $ +# $OpenBSD: knownhosts-command.sh,v 1.2 2020/12/22 06:47:24 djm Exp $ # Placed in the Public Domain. tid="known hosts command " @@ -44,8 +44,8 @@ for keytype in ${SSH_HOSTKEY_TYPES} ; do cat > $OBJ/knownhosts_command << _EOF #!/bin/sh die() { echo "\$@" 1>&2 ; exit 1; } -test "x\$1" = "x$keytype" || die "wrong keytype \$1" -test "x\$3" = "x$LOGNAME" || die "wrong username \$3" +test "x\$1" = "x$keytype" || die "wrong keytype \$1 (expected $keytype)" +test "x\$3" = "x$LOGNAME" || die "wrong username \$3 (expected $LOGNAME)" grep -- "\$1.*\$2" $OBJ/known_hosts _EOF ${SSH} -F $OBJ/ssh_proxy -oHostKeyAlgorithms=$keytype x true || From 3e9811e57b57ee66b0f70d99d7258da3153b0e8a Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 22 Dec 2020 18:31:50 +1100 Subject: [PATCH 0129/1788] ensure $LOGNAME is set in tests --- regress/test-exec.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/regress/test-exec.sh b/regress/test-exec.sh index 5dc975d07d65..ee47f572c464 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -42,6 +42,10 @@ elif logname >/dev/null 2>&1; then else USER=`id -un` fi +if test -z "$LOGNAME"; then + LOGNAME="${USER}" + export LOGNAME +fi OBJ=$1 if [ "x$OBJ" = "x" ]; then From 0f2e21c9dca89598b694932b5b05848380a23ec0 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 22 Dec 2020 18:56:54 +1100 Subject: [PATCH 0130/1788] Include stdio.h for FILE in misc.h. Fixes build on at least OpenBSD. --- openbsd-compat/port-net.c | 1 + sshpty.c | 1 + 2 files changed, 2 insertions(+) diff --git a/openbsd-compat/port-net.c b/openbsd-compat/port-net.c index d7d8c6fa1aa1..da6d446787c9 100644 --- a/openbsd-compat/port-net.c +++ b/openbsd-compat/port-net.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include diff --git a/sshpty.c b/sshpty.c index bce09e255e0d..cae0b977a585 100644 --- a/sshpty.c +++ b/sshpty.c @@ -27,6 +27,7 @@ #endif #include #include +#include #include #include #ifdef HAVE_UTIL_H From 33fa3ac547e5349ca34681cce6727b2f933dff0a Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 22 Dec 2020 19:21:26 +1100 Subject: [PATCH 0131/1788] Improve AIX text. --- README.platform | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.platform b/README.platform index 9210e07c8c6e..7b754ba42a10 100644 --- a/README.platform +++ b/README.platform @@ -1,19 +1,19 @@ This file contains notes about OpenSSH on specific platforms. AIX ---- -As of OpenSSH 3.8p1, sshd will now honour an accounts password expiry -settings, where previously it did not. Because of this, it's possible for -sites that have used OpenSSH's sshd exclusively to have accounts which -have passwords expired longer than the inactive time (ie the "Weeks between -password EXPIRATION and LOCKOUT" setting in SMIT or the maxexpired -chuser attribute). + +Beginning with OpenSSH 3.8p1, sshd will honour an account's password +expiry settings, where prior to that it did not. Because of this, +it's possible for sites that have used OpenSSH's sshd exclusively to +have accounts which have passwords expired longer than the inactive time +(ie the "Weeks between password EXPIRATION and LOCKOUT" setting in SMIT +or the maxexpired chuser attribute). Accounts in this state must have their passwords reset manually by the administrator. As a precaution, it is recommended that the administrative passwords be reset before upgrading from OpenSSH <3.8. -As of OpenSSH 4.0, configure will attempt to detect if your version +As of OpenSSH 4.0p1, configure will attempt to detect if your version and maintenance level of AIX has a working getaddrinfo, and will use it if found. This will enable IPv6 support. If for some reason configure gets it wrong, or if you want to build binaries to work on earlier MLs From 397b1c4d393f97427283a4717e9015a2bd31b8a5 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 22 Dec 2020 19:42:37 +1100 Subject: [PATCH 0132/1788] whitespace at EOL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 28fb43d2aa1f..f6034713e6ba 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ make && make tests ``` See the [Build-time Customisation](#build-time-customisation) section below for configure options. If you plan on installing OpenSSH to your system, then you will usually want to specify destination paths. - + ### Building from git If building from git, you'll need [autoconf](https://www.gnu.org/software/autoconf/) installed to build the ``configure`` script. The following commands will check out and build portable OpenSSH from git: From 931c93389a80e32272712459b1102d303844453d Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 22 Dec 2020 19:43:55 +1100 Subject: [PATCH 0133/1788] whitespace at EOL --- buildpkg.sh.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/buildpkg.sh.in b/buildpkg.sh.in index 4ccc5f8d1419..15555cd7ed7e 100644 --- a/buildpkg.sh.in +++ b/buildpkg.sh.in @@ -268,7 +268,7 @@ then touch space else cat > space << _EOF -# extra space required by start/stop links added by installf +# extra space required by start/stop links added by installf # in postinstall $TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1 $TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME} 0 1 @@ -293,7 +293,7 @@ cat >> preinstall << _EOF # if [ "\${PRE_INS_STOP}" = "yes" ] then - if [ $DO_SMF -eq 1 ] + if [ $DO_SMF -eq 1 ] then svcadm disable $OPENSSH_FMRI else @@ -326,7 +326,7 @@ cat > postinstall << _EOF if [ $DO_SMF -eq 1 ] then - # Delete the existing service, if it exists, then import the + # Delete the existing service, if it exists, then import the # new one. if svcs $OPENSSH_FMRI > /dev/null 2>&1 then @@ -438,7 +438,7 @@ echo "Building preremove file..." cat > preremove << _EOF #! ${SCRIPT_SHELL} # -if [ $DO_SMF -eq 1 ] +if [ $DO_SMF -eq 1 ] then svcadm disable $OPENSSH_FMRI else From 09d070ccc3574ae0d7947d212ed53c7268ef7e1f Mon Sep 17 00:00:00 2001 From: "jmc@openbsd.org" Date: Tue, 22 Dec 2020 07:40:26 +0000 Subject: [PATCH 0134/1788] upstream: tweak the description of KnownHostsCommand in ssh_conf.5, and add entries for it to the -O list in scp.1 and sftp.1; ok djm OpenBSD-Commit-ID: aba31ebea03f38f8d218857f7ce16a500c3e4aff --- scp.1 | 5 +++-- sftp.1 | 5 +++-- ssh_config.5 | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/scp.1 b/scp.1 index 9cbc1e0def1b..a5bd723eb56e 100644 --- a/scp.1 +++ b/scp.1 @@ -8,9 +8,9 @@ .\" .\" Created: Sun May 7 00:14:37 1995 ylo .\" -.\" $OpenBSD: scp.1,v 1.91 2020/10/03 02:18:33 deraadt Exp $ +.\" $OpenBSD: scp.1,v 1.92 2020/12/22 07:40:26 jmc Exp $ .\" -.Dd $Mdocdate: October 3 2020 $ +.Dd $Mdocdate: December 22 2020 $ .Dt SCP 1 .Os .Sh NAME @@ -184,6 +184,7 @@ For full details of the options listed below, and their possible values, see .It KbdInteractiveAuthentication .It KbdInteractiveDevices .It KexAlgorithms +.It KnownHostsCommand .It LogLevel .It MACs .It NoHostAuthenticationForLocalhost diff --git a/sftp.1 b/sftp.1 index 1cfa5ec229e3..ea99aad13e73 100644 --- a/sftp.1 +++ b/sftp.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: sftp.1,v 1.132 2020/08/03 02:43:41 djm Exp $ +.\" $OpenBSD: sftp.1,v 1.133 2020/12/22 07:40:26 jmc Exp $ .\" .\" Copyright (c) 2001 Damien Miller. All rights reserved. .\" @@ -22,7 +22,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: August 3 2020 $ +.Dd $Mdocdate: December 22 2020 $ .Dt SFTP 1 .Os .Sh NAME @@ -258,6 +258,7 @@ For full details of the options listed below, and their possible values, see .It KbdInteractiveAuthentication .It KbdInteractiveDevices .It KexAlgorithms +.It KnownHostsCommand .It LogLevel .It MACs .It NoHostAuthenticationForLocalhost diff --git a/ssh_config.5 b/ssh_config.5 index d6d22f1dd28d..04da0575fa62 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.339 2020/12/22 00:15:23 djm Exp $ +.\" $OpenBSD: ssh_config.5,v 1.340 2020/12/22 07:40:26 jmc Exp $ .Dd $Mdocdate: December 22 2020 $ .Dt SSH_CONFIG 5 .Os @@ -1121,13 +1121,13 @@ diffie-hellman-group14-sha256 The list of available key exchange algorithms may also be obtained using .Qq ssh -Q kex . .It Cm KnownHostsCommand -Specifies a command to use to obtain a list of host keys, additional to +Specifies a command to use to obtain a list of host keys, in addition to those listed in .Cm UserKnownHostsFile and .Cm GlobalKnownHostsFile . This command is executed after the files have been read. -It may write host keys lines to standard output in identical format to the +It may write host key lines to standard output in identical format to the usual files (described in the .Sx VERIFYING HOST KEYS section in @@ -1137,7 +1137,7 @@ Arguments to accept the tokens described in the .Sx TOKENS section. -The command may be invoked multiple times per connection: when preparing +The command may be invoked multiple times per connection: once when preparing the preference list of host key algorithms to use, again to obtain the host key for the requested host name and, if .Cm CheckHostIP @@ -1916,17 +1916,17 @@ The hostname or address that is being searched for. .It %h The remote hostname. -.It %I +.It \%%I A string describing the reason for a .Cm KnownHostsCommand -execution; either -.Cm "ADDRESS" +execution: either +.Cm ADDRESS when looking up a host by address (only when .Cm CheckHostIP is enabled), -.Cm "HOSTNAME" -when searching by hostname or -.Cm "ORDER" +.Cm HOSTNAME +when searching by hostname, or +.Cm ORDER when preparing the host key algorithm preference list to use for the destination host. .It %i From 2c71cec020219d69df84055c59eba5799a1233ec Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 29 Dec 2020 00:59:15 +0000 Subject: [PATCH 0135/1788] upstream: Update/replace the experimental post-quantim hybrid key exchange method based on Streamlined NTRU Prime (coupled with X25519). The previous sntrup4591761x25519-sha512@tinyssh.org method is replaced with sntrup761x25519-sha512@openssh.com. Per the authors, sntrup4591761 was replaced almost two years ago by sntrup761. The sntrup761 implementaion, like sntrup4591761 before it, is public domain code extracted from the SUPERCOP cryptography benchmark suite (https://bench.cr.yp.to/supercop.html). Thanks for Daniel J Bernstein for guidance on algorithm selection. Patch from Tobias Heider; feedback & ok markus@ and myself (note this both the updated method and the one that it replaced are disabled by default) OpenBSD-Commit-ID: 2bf582b772d81ee24e911bb6f4b2aecfd39338ae --- .depend | 7 +- Makefile.in | 2 +- crypto_api.h | 16 +- kex.c | 4 +- kex.h | 14 +- kexgen.c | 18 +- ...rup4591761x25519.c => kexsntrup761x25519.c | 0 monitor.c | 4 +- sntrup4591761.c | 1083 ------------- sntrup4591761.sh | 57 - sntrup761.c | 1364 +++++++++++++++++ sntrup761.sh | 65 + ssh-keyscan.c | 4 +- ssh_api.c | 6 +- sshconnect2.c | 4 +- sshd.c | 4 +- sshd_config.5 | 6 +- 17 files changed, 1474 insertions(+), 1184 deletions(-) rename kexsntrup4591761x25519.c => kexsntrup761x25519.c (100%) delete mode 100644 sntrup4591761.c delete mode 100644 sntrup4591761.sh create mode 100644 sntrup761.c create mode 100644 sntrup761.sh diff --git a/.depend b/.depend index 03b73ea6814d..2333809726e3 100644 --- a/.depend +++ b/.depend @@ -70,7 +70,7 @@ kexgen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat kexgex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h kexgexc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h kexgexs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -kexsntrup4591761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ./ssherr.h +kexsntrup761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ./ssherr.h krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ./ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h utf8.h krl.h log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h match.h loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h ./ssherr.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h canohost.h auth.h auth-pam.h audit.h sshbuf.h @@ -124,7 +124,7 @@ sftp-server-main.o: includes.h config.h defines.h platform.h openbsd-compat/open sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h ./ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h sftp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h pathnames.h misc.h utf8.h sftp.h sshbuf.h sftp-common.h sftp-client.h openbsd-compat/glob.h sk-usbhid.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -sntrup4591761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h +sntrup761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h log.h ./ssherr.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h digest.h ssh-sk.h sk-api.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h compat.h log.h ./ssherr.h misc.h digest.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h @@ -132,7 +132,8 @@ ssh-ecdsa-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd- ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh-ed25519-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ./ssherr.h sshbuf.h sshkey.h ssh.h digest.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ./ssherr.h sshbuf.h sshkey.h ssh.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h sshbuf.h pathnames.h log.h ./ssherr.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h sshsig.h ssh-sk.h sk-api.h +ssh-keygen.o: cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h sshbuf.h pathnames.h log.h ./ssherr.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h sshsig.h ssh-sk.h sk-api.h cipher.h ssh-keyscan.o: ./ssherr.h atomicio.h misc.h hostfile.h ssh_api.h ssh2.h dns.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h compat.h myproposal.h packet.h dispatch.h log.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h diff --git a/Makefile.in b/Makefile.in index acfb919da83c..dd3869812a7f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -106,7 +106,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \ hmac.o sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o \ kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \ kexgexc.o kexgexs.o \ - sntrup4591761.o kexsntrup4591761x25519.o kexgen.o \ + kexsntrup761x25519.o sntrup761.o kexgen.o \ sftp-realpath.o platform-pledge.o platform-tracing.o platform-misc.o \ sshbuf-io.o diff --git a/crypto_api.h b/crypto_api.h index eb05251ff164..1827003e049b 100644 --- a/crypto_api.h +++ b/crypto_api.h @@ -1,4 +1,4 @@ -/* $OpenBSD: crypto_api.h,v 1.5 2019/01/21 10:20:12 djm Exp $ */ +/* $OpenBSD: crypto_api.h,v 1.6 2020/12/29 00:59:15 djm Exp $ */ /* * Assembled from generated headers and source files by Markus Friedl. @@ -42,15 +42,15 @@ int crypto_sign_ed25519_open(unsigned char *, unsigned long long *, const unsigned char *, unsigned long long, const unsigned char *); int crypto_sign_ed25519_keypair(unsigned char *, unsigned char *); -#define crypto_kem_sntrup4591761_PUBLICKEYBYTES 1218 -#define crypto_kem_sntrup4591761_SECRETKEYBYTES 1600 -#define crypto_kem_sntrup4591761_CIPHERTEXTBYTES 1047 -#define crypto_kem_sntrup4591761_BYTES 32 +#define crypto_kem_sntrup761_PUBLICKEYBYTES 1158 +#define crypto_kem_sntrup761_SECRETKEYBYTES 1763 +#define crypto_kem_sntrup761_CIPHERTEXTBYTES 1039 +#define crypto_kem_sntrup761_BYTES 32 -int crypto_kem_sntrup4591761_enc(unsigned char *cstr, unsigned char *k, +int crypto_kem_sntrup761_enc(unsigned char *cstr, unsigned char *k, const unsigned char *pk); -int crypto_kem_sntrup4591761_dec(unsigned char *k, +int crypto_kem_sntrup761_dec(unsigned char *k, const unsigned char *cstr, const unsigned char *sk); -int crypto_kem_sntrup4591761_keypair(unsigned char *pk, unsigned char *sk); +int crypto_kem_sntrup761_keypair(unsigned char *pk, unsigned char *sk); #endif /* crypto_api_h */ diff --git a/kex.c b/kex.c index 4a36310a377e..f08143a5daf5 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.162 2020/12/04 02:27:57 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.163 2020/12/29 00:59:15 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -110,7 +110,7 @@ static const struct kexalg kexalgs[] = { #if defined(HAVE_EVP_SHA256) || !defined(WITH_OPENSSL) { KEX_CURVE25519_SHA256, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, { KEX_CURVE25519_SHA256_OLD, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, - { KEX_SNTRUP4591761X25519_SHA512, KEX_KEM_SNTRUP4591761X25519_SHA512, 0, + { KEX_SNTRUP761X25519_SHA512, KEX_KEM_SNTRUP761X25519_SHA512, 0, SSH_DIGEST_SHA512 }, #endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */ { NULL, 0, -1, -1}, diff --git a/kex.h b/kex.h index 0c405e33c95b..5f59166a068d 100644 --- a/kex.h +++ b/kex.h @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.h,v 1.111 2020/10/07 02:22:23 djm Exp $ */ +/* $OpenBSD: kex.h,v 1.112 2020/12/29 00:59:15 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. @@ -62,7 +62,7 @@ #define KEX_ECDH_SHA2_NISTP521 "ecdh-sha2-nistp521" #define KEX_CURVE25519_SHA256 "curve25519-sha256" #define KEX_CURVE25519_SHA256_OLD "curve25519-sha256@libssh.org" -#define KEX_SNTRUP4591761X25519_SHA512 "sntrup4591761x25519-sha512@tinyssh.org" +#define KEX_SNTRUP761X25519_SHA512 "sntrup761x25519-sha512@openssh.com" #define COMP_NONE 0 /* pre-auth compression (COMP_ZLIB) is only supported in the client */ @@ -101,7 +101,7 @@ enum kex_exchange { KEX_DH_GEX_SHA256, KEX_ECDH_SHA2, KEX_C25519_SHA256, - KEX_KEM_SNTRUP4591761X25519_SHA512, + KEX_KEM_SNTRUP761X25519_SHA512, KEX_MAX }; @@ -168,7 +168,7 @@ struct kex { const EC_GROUP *ec_group; /* ECDH */ u_char c25519_client_key[CURVE25519_SIZE]; /* 25519 + KEM */ u_char c25519_client_pubkey[CURVE25519_SIZE]; /* 25519 */ - u_char sntrup4591761_client_key[crypto_kem_sntrup4591761_SECRETKEYBYTES]; /* KEM */ + u_char sntrup761_client_key[crypto_kem_sntrup761_SECRETKEYBYTES]; /* KEM */ struct sshbuf *client_pub; }; @@ -218,10 +218,10 @@ int kex_c25519_enc(struct kex *, const struct sshbuf *, struct sshbuf **, struct sshbuf **); int kex_c25519_dec(struct kex *, const struct sshbuf *, struct sshbuf **); -int kex_kem_sntrup4591761x25519_keypair(struct kex *); -int kex_kem_sntrup4591761x25519_enc(struct kex *, const struct sshbuf *, +int kex_kem_sntrup761x25519_keypair(struct kex *); +int kex_kem_sntrup761x25519_enc(struct kex *, const struct sshbuf *, struct sshbuf **, struct sshbuf **); -int kex_kem_sntrup4591761x25519_dec(struct kex *, const struct sshbuf *, +int kex_kem_sntrup761x25519_dec(struct kex *, const struct sshbuf *, struct sshbuf **); int kex_dh_keygen(struct kex *); diff --git a/kexgen.c b/kexgen.c index 69348b964df8..39a848f25952 100644 --- a/kexgen.c +++ b/kexgen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexgen.c,v 1.4 2019/11/25 00:51:37 djm Exp $ */ +/* $OpenBSD: kexgen.c,v 1.5 2020/12/29 00:59:15 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl. All rights reserved. * @@ -117,8 +117,8 @@ kex_gen_client(struct ssh *ssh) case KEX_C25519_SHA256: r = kex_c25519_keypair(kex); break; - case KEX_KEM_SNTRUP4591761X25519_SHA512: - r = kex_kem_sntrup4591761x25519_keypair(kex); + case KEX_KEM_SNTRUP761X25519_SHA512: + r = kex_kem_sntrup761x25519_keypair(kex); break; default: r = SSH_ERR_INVALID_ARGUMENT; @@ -185,8 +185,8 @@ input_kex_gen_reply(int type, u_int32_t seq, struct ssh *ssh) case KEX_C25519_SHA256: r = kex_c25519_dec(kex, server_blob, &shared_secret); break; - case KEX_KEM_SNTRUP4591761X25519_SHA512: - r = kex_kem_sntrup4591761x25519_dec(kex, server_blob, + case KEX_KEM_SNTRUP761X25519_SHA512: + r = kex_kem_sntrup761x25519_dec(kex, server_blob, &shared_secret); break; default: @@ -220,8 +220,8 @@ input_kex_gen_reply(int type, u_int32_t seq, struct ssh *ssh) out: explicit_bzero(hash, sizeof(hash)); explicit_bzero(kex->c25519_client_key, sizeof(kex->c25519_client_key)); - explicit_bzero(kex->sntrup4591761_client_key, - sizeof(kex->sntrup4591761_client_key)); + explicit_bzero(kex->sntrup761_client_key, + sizeof(kex->sntrup761_client_key)); sshbuf_free(server_host_key_blob); free(signature); sshbuf_free(tmp); @@ -282,8 +282,8 @@ input_kex_gen_init(int type, u_int32_t seq, struct ssh *ssh) r = kex_c25519_enc(kex, client_pubkey, &server_pubkey, &shared_secret); break; - case KEX_KEM_SNTRUP4591761X25519_SHA512: - r = kex_kem_sntrup4591761x25519_enc(kex, client_pubkey, + case KEX_KEM_SNTRUP761X25519_SHA512: + r = kex_kem_sntrup761x25519_enc(kex, client_pubkey, &server_pubkey, &shared_secret); break; default: diff --git a/kexsntrup4591761x25519.c b/kexsntrup761x25519.c similarity index 100% rename from kexsntrup4591761x25519.c rename to kexsntrup761x25519.c diff --git a/monitor.c b/monitor.c index 64a837f48efd..79d003ae9c71 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.218 2020/11/27 00:37:10 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.219 2020/12/29 00:59:15 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -1732,7 +1732,7 @@ monitor_apply_keystate(struct ssh *ssh, struct monitor *pmonitor) # endif #endif /* WITH_OPENSSL */ kex->kex[KEX_C25519_SHA256] = kex_gen_server; - kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_server; + kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server; kex->load_host_public_key=&get_hostkey_public_by_type; kex->load_host_private_key=&get_hostkey_private_by_type; kex->host_key_index=&get_hostkey_index; diff --git a/sntrup4591761.c b/sntrup4591761.c deleted file mode 100644 index 61fe2483f4fd..000000000000 --- a/sntrup4591761.c +++ /dev/null @@ -1,1083 +0,0 @@ -/* $OpenBSD: sntrup4591761.c,v 1.3 2019/01/30 19:51:15 markus Exp $ */ - -/* - * Public Domain, Authors: - * - Daniel J. Bernstein - * - Chitchanok Chuengsatiansup - * - Tanja Lange - * - Christine van Vredendaal - */ - -#include "includes.h" - -#include -#include "crypto_api.h" - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/int32_sort.h */ -#ifndef int32_sort_h -#define int32_sort_h - - -static void int32_sort(crypto_int32 *,int); - -#endif - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/int32_sort.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void minmax(crypto_int32 *x,crypto_int32 *y) -{ - crypto_uint32 xi = *x; - crypto_uint32 yi = *y; - crypto_uint32 xy = xi ^ yi; - crypto_uint32 c = yi - xi; - c ^= xy & (c ^ yi); - c >>= 31; - c = -c; - c &= xy; - *x = xi ^ c; - *y = yi ^ c; -} - -static void int32_sort(crypto_int32 *x,int n) -{ - int top,p,q,i; - - if (n < 2) return; - top = 1; - while (top < n - top) top += top; - - for (p = top;p > 0;p >>= 1) { - for (i = 0;i < n - p;++i) - if (!(i & p)) - minmax(x + i,x + i + p); - for (q = top;q > p;q >>= 1) - for (i = 0;i < n - q;++i) - if (!(i & p)) - minmax(x + i + p,x + i + q); - } -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/small.h */ -#ifndef small_h -#define small_h - - -typedef crypto_int8 small; - -static void small_encode(unsigned char *,const small *); - -static void small_decode(small *,const unsigned char *); - - -static void small_random(small *); - -static void small_random_weightw(small *); - -#endif - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/mod3.h */ -#ifndef mod3_h -#define mod3_h - - -/* -1 if x is nonzero, 0 otherwise */ -static inline int mod3_nonzero_mask(small x) -{ - return -x*x; -} - -/* input between -100000 and 100000 */ -/* output between -1 and 1 */ -static inline small mod3_freeze(crypto_int32 a) -{ - a -= 3 * ((10923 * a) >> 15); - a -= 3 * ((89478485 * a + 134217728) >> 28); - return a; -} - -static inline small mod3_minusproduct(small a,small b,small c) -{ - crypto_int32 A = a; - crypto_int32 B = b; - crypto_int32 C = c; - return mod3_freeze(A - B * C); -} - -static inline small mod3_plusproduct(small a,small b,small c) -{ - crypto_int32 A = a; - crypto_int32 B = b; - crypto_int32 C = c; - return mod3_freeze(A + B * C); -} - -static inline small mod3_product(small a,small b) -{ - return a * b; -} - -static inline small mod3_sum(small a,small b) -{ - crypto_int32 A = a; - crypto_int32 B = b; - return mod3_freeze(A + B); -} - -static inline small mod3_reciprocal(small a1) -{ - return a1; -} - -static inline small mod3_quotient(small num,small den) -{ - return mod3_product(num,mod3_reciprocal(den)); -} - -#endif - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/modq.h */ -#ifndef modq_h -#define modq_h - - -typedef crypto_int16 modq; - -/* -1 if x is nonzero, 0 otherwise */ -static inline int modq_nonzero_mask(modq x) -{ - crypto_int32 r = (crypto_uint16) x; - r = -r; - r >>= 30; - return r; -} - -/* input between -9000000 and 9000000 */ -/* output between -2295 and 2295 */ -static inline modq modq_freeze(crypto_int32 a) -{ - a -= 4591 * ((228 * a) >> 20); - a -= 4591 * ((58470 * a + 134217728) >> 28); - return a; -} - -static inline modq modq_minusproduct(modq a,modq b,modq c) -{ - crypto_int32 A = a; - crypto_int32 B = b; - crypto_int32 C = c; - return modq_freeze(A - B * C); -} - -static inline modq modq_plusproduct(modq a,modq b,modq c) -{ - crypto_int32 A = a; - crypto_int32 B = b; - crypto_int32 C = c; - return modq_freeze(A + B * C); -} - -static inline modq modq_product(modq a,modq b) -{ - crypto_int32 A = a; - crypto_int32 B = b; - return modq_freeze(A * B); -} - -static inline modq modq_square(modq a) -{ - crypto_int32 A = a; - return modq_freeze(A * A); -} - -static inline modq modq_sum(modq a,modq b) -{ - crypto_int32 A = a; - crypto_int32 B = b; - return modq_freeze(A + B); -} - -static inline modq modq_reciprocal(modq a1) -{ - modq a2 = modq_square(a1); - modq a3 = modq_product(a2,a1); - modq a4 = modq_square(a2); - modq a8 = modq_square(a4); - modq a16 = modq_square(a8); - modq a32 = modq_square(a16); - modq a35 = modq_product(a32,a3); - modq a70 = modq_square(a35); - modq a140 = modq_square(a70); - modq a143 = modq_product(a140,a3); - modq a286 = modq_square(a143); - modq a572 = modq_square(a286); - modq a1144 = modq_square(a572); - modq a1147 = modq_product(a1144,a3); - modq a2294 = modq_square(a1147); - modq a4588 = modq_square(a2294); - modq a4589 = modq_product(a4588,a1); - return a4589; -} - -static inline modq modq_quotient(modq num,modq den) -{ - return modq_product(num,modq_reciprocal(den)); -} - -#endif - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/params.h */ -#ifndef params_h -#define params_h - -#define q 4591 -/* XXX: also built into modq in various ways */ - -#define qshift 2295 -#define p 761 -#define w 286 - -#define rq_encode_len 1218 -#define small_encode_len 191 - -#endif - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3.h */ -#ifndef r3_h -#define r3_h - - -static void r3_mult(small *,const small *,const small *); - -extern int r3_recip(small *,const small *); - -#endif - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq.h */ -#ifndef rq_h -#define rq_h - - -static void rq_encode(unsigned char *,const modq *); - -static void rq_decode(modq *,const unsigned char *); - -static void rq_encoderounded(unsigned char *,const modq *); - -static void rq_decoderounded(modq *,const unsigned char *); - -static void rq_round3(modq *,const modq *); - -static void rq_mult(modq *,const modq *,const small *); - -int rq_recip3(modq *,const small *); - -#endif - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/swap.h */ -#ifndef swap_h -#define swap_h - -static void swap(void *,void *,int,int); - -#endif - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/dec.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - -#ifdef KAT -#endif - - -int crypto_kem_sntrup4591761_dec( - unsigned char *k, - const unsigned char *cstr, - const unsigned char *sk -) -{ - small f[p]; - modq h[p]; - small grecip[p]; - modq c[p]; - modq t[p]; - small t3[p]; - small r[p]; - modq hr[p]; - unsigned char rstr[small_encode_len]; - unsigned char hash[64]; - int i; - int result = 0; - int weight; - - small_decode(f,sk); - small_decode(grecip,sk + small_encode_len); - rq_decode(h,sk + 2 * small_encode_len); - - rq_decoderounded(c,cstr + 32); - - rq_mult(t,c,f); - for (i = 0;i < p;++i) t3[i] = mod3_freeze(modq_freeze(3*t[i])); - - r3_mult(r,t3,grecip); - -#ifdef KAT - { - int j; - printf("decrypt r:"); - for (j = 0;j < p;++j) - if (r[j] == 1) printf(" +%d",j); - else if (r[j] == -1) printf(" -%d",j); - printf("\n"); - } -#endif - - weight = 0; - for (i = 0;i < p;++i) weight += (1 & r[i]); - weight -= w; - result |= modq_nonzero_mask(weight); /* XXX: puts limit on p */ - - rq_mult(hr,h,r); - rq_round3(hr,hr); - for (i = 0;i < p;++i) result |= modq_nonzero_mask(hr[i] - c[i]); - - small_encode(rstr,r); - crypto_hash_sha512(hash,rstr,sizeof rstr); - result |= crypto_verify_32(hash,cstr); - - for (i = 0;i < 32;++i) k[i] = (hash[32 + i] & ~result); - return result; -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/enc.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - -#ifdef KAT -#endif - - -int crypto_kem_sntrup4591761_enc( - unsigned char *cstr, - unsigned char *k, - const unsigned char *pk -) -{ - small r[p]; - modq h[p]; - modq c[p]; - unsigned char rstr[small_encode_len]; - unsigned char hash[64]; - - small_random_weightw(r); - -#ifdef KAT - { - int i; - printf("encrypt r:"); - for (i = 0;i < p;++i) - if (r[i] == 1) printf(" +%d",i); - else if (r[i] == -1) printf(" -%d",i); - printf("\n"); - } -#endif - - small_encode(rstr,r); - crypto_hash_sha512(hash,rstr,sizeof rstr); - - rq_decode(h,pk); - rq_mult(c,h,r); - rq_round3(c,c); - - memcpy(k,hash + 32,32); - memcpy(cstr,hash,32); - rq_encoderounded(cstr + 32,c); - - return 0; -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/keypair.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -#if crypto_kem_sntrup4591761_PUBLICKEYBYTES != rq_encode_len -#error "crypto_kem_sntrup4591761_PUBLICKEYBYTES must match rq_encode_len" -#endif -#if crypto_kem_sntrup4591761_SECRETKEYBYTES != rq_encode_len + 2 * small_encode_len -#error "crypto_kem_sntrup4591761_SECRETKEYBYTES must match rq_encode_len + 2 * small_encode_len" -#endif - -int crypto_kem_sntrup4591761_keypair(unsigned char *pk,unsigned char *sk) -{ - small g[p]; - small grecip[p]; - small f[p]; - modq f3recip[p]; - modq h[p]; - - do - small_random(g); - while (r3_recip(grecip,g) != 0); - - small_random_weightw(f); - rq_recip3(f3recip,f); - - rq_mult(h,f3recip,g); - - rq_encode(pk,h); - small_encode(sk,f); - small_encode(sk + small_encode_len,grecip); - memcpy(sk + 2 * small_encode_len,pk,rq_encode_len); - - return 0; -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3_mult.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void r3_mult(small *h,const small *f,const small *g) -{ - small fg[p + p - 1]; - small result; - int i, j; - - for (i = 0;i < p;++i) { - result = 0; - for (j = 0;j <= i;++j) - result = mod3_plusproduct(result,f[j],g[i - j]); - fg[i] = result; - } - for (i = p;i < p + p - 1;++i) { - result = 0; - for (j = i - p + 1;j < p;++j) - result = mod3_plusproduct(result,f[j],g[i - j]); - fg[i] = result; - } - - for (i = p + p - 2;i >= p;--i) { - fg[i - p] = mod3_sum(fg[i - p],fg[i]); - fg[i - p + 1] = mod3_sum(fg[i - p + 1],fg[i]); - } - - for (i = 0;i < p;++i) - h[i] = fg[i]; -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3_recip.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -/* caller must ensure that x-y does not overflow */ -static int smaller_mask_r3_recip(int x,int y) -{ - return (x - y) >> 31; -} - -static void vectormod3_product(small *z,int len,const small *x,const small c) -{ - int i; - for (i = 0;i < len;++i) z[i] = mod3_product(x[i],c); -} - -static void vectormod3_minusproduct(small *z,int len,const small *x,const small *y,const small c) -{ - int i; - for (i = 0;i < len;++i) z[i] = mod3_minusproduct(x[i],y[i],c); -} - -static void vectormod3_shift(small *z,int len) -{ - int i; - for (i = len - 1;i > 0;--i) z[i] = z[i - 1]; - z[0] = 0; -} - -/* -r = s^(-1) mod m, returning 0, if s is invertible mod m -or returning -1 if s is not invertible mod m -r,s are polys of degree

= loops) break; - - c = mod3_quotient(g[p],f[p]); - - vectormod3_minusproduct(g,p + 1,g,f,c); - vectormod3_shift(g,p + 1); - -#ifdef SIMPLER - vectormod3_minusproduct(v,loops + 1,v,u,c); - vectormod3_shift(v,loops + 1); -#else - if (loop < p) { - vectormod3_minusproduct(v,loop + 1,v,u,c); - vectormod3_shift(v,loop + 2); - } else { - vectormod3_minusproduct(v + loop - p,p + 1,v + loop - p,u + loop - p,c); - vectormod3_shift(v + loop - p,p + 2); - } -#endif - - e -= 1; - - ++loop; - - swapmask = smaller_mask_r3_recip(e,d) & mod3_nonzero_mask(g[p]); - swap(&e,&d,sizeof e,swapmask); - swap(f,g,(p + 1) * sizeof(small),swapmask); - -#ifdef SIMPLER - swap(u,v,(loops + 1) * sizeof(small),swapmask); -#else - if (loop < p) { - swap(u,v,(loop + 1) * sizeof(small),swapmask); - } else { - swap(u + loop - p,v + loop - p,(p + 1) * sizeof(small),swapmask); - } -#endif - } - - c = mod3_reciprocal(f[p]); - vectormod3_product(r,p,u + p,c); - return smaller_mask_r3_recip(0,d); -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/randomsmall.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void small_random(small *g) -{ - int i; - - for (i = 0;i < p;++i) { - crypto_uint32 r = small_random32(); - g[i] = (small) (((1073741823 & r) * 3) >> 30) - 1; - } -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/randomweightw.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void small_random_weightw(small *f) -{ - crypto_int32 r[p]; - int i; - - for (i = 0;i < p;++i) r[i] = small_random32(); - for (i = 0;i < w;++i) r[i] &= -2; - for (i = w;i < p;++i) r[i] = (r[i] & -3) | 1; - int32_sort(r,p); - for (i = 0;i < p;++i) f[i] = ((small) (r[i] & 3)) - 1; -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void rq_encode(unsigned char *c,const modq *f) -{ - crypto_int32 f0, f1, f2, f3, f4; - int i; - - for (i = 0;i < p/5;++i) { - f0 = *f++ + qshift; - f1 = *f++ + qshift; - f2 = *f++ + qshift; - f3 = *f++ + qshift; - f4 = *f++ + qshift; - /* now want f0 + 6144*f1 + ... as a 64-bit integer */ - f1 *= 3; - f2 *= 9; - f3 *= 27; - f4 *= 81; - /* now want f0 + f1<<11 + f2<<22 + f3<<33 + f4<<44 */ - f0 += f1 << 11; - *c++ = f0; f0 >>= 8; - *c++ = f0; f0 >>= 8; - f0 += f2 << 6; - *c++ = f0; f0 >>= 8; - *c++ = f0; f0 >>= 8; - f0 += f3 << 1; - *c++ = f0; f0 >>= 8; - f0 += f4 << 4; - *c++ = f0; f0 >>= 8; - *c++ = f0; f0 >>= 8; - *c++ = f0; - } - /* XXX: using p mod 5 = 1 */ - f0 = *f++ + qshift; - *c++ = f0; f0 >>= 8; - *c++ = f0; -} - -static void rq_decode(modq *f,const unsigned char *c) -{ - crypto_uint32 c0, c1, c2, c3, c4, c5, c6, c7; - crypto_uint32 f0, f1, f2, f3, f4; - int i; - - for (i = 0;i < p/5;++i) { - c0 = *c++; - c1 = *c++; - c2 = *c++; - c3 = *c++; - c4 = *c++; - c5 = *c++; - c6 = *c++; - c7 = *c++; - - /* f0 + f1*6144 + f2*6144^2 + f3*6144^3 + f4*6144^4 */ - /* = c0 + c1*256 + ... + c6*256^6 + c7*256^7 */ - /* with each f between 0 and 4590 */ - - c6 += c7 << 8; - /* c6 <= 23241 = floor(4591*6144^4/2^48) */ - /* f4 = (16/81)c6 + (1/1296)(c5+[0,1]) - [0,0.75] */ - /* claim: 2^19 f4 < x < 2^19(f4+1) */ - /* where x = 103564 c6 + 405(c5+1) */ - /* proof: x - 2^19 f4 = (76/81)c6 + (37/81)c5 + 405 - (32768/81)[0,1] + 2^19[0,0.75] */ - /* at least 405 - 32768/81 > 0 */ - /* at most (76/81)23241 + (37/81)255 + 405 + 2^19 0.75 < 2^19 */ - f4 = (103564*c6 + 405*(c5+1)) >> 19; - - c5 += c6 << 8; - c5 -= (f4 * 81) << 4; - c4 += c5 << 8; - - /* f0 + f1*6144 + f2*6144^2 + f3*6144^3 */ - /* = c0 + c1*256 + c2*256^2 + c3*256^3 + c4*256^4 */ - /* c4 <= 247914 = floor(4591*6144^3/2^32) */ - /* f3 = (1/54)(c4+[0,1]) - [0,0.75] */ - /* claim: 2^19 f3 < x < 2^19(f3+1) */ - /* where x = 9709(c4+2) */ - /* proof: x - 2^19 f3 = 19418 - (1/27)c4 - (262144/27)[0,1] + 2^19[0,0.75] */ - /* at least 19418 - 247914/27 - 262144/27 > 0 */ - /* at most 19418 + 2^19 0.75 < 2^19 */ - f3 = (9709*(c4+2)) >> 19; - - c4 -= (f3 * 27) << 1; - c3 += c4 << 8; - /* f0 + f1*6144 + f2*6144^2 */ - /* = c0 + c1*256 + c2*256^2 + c3*256^3 */ - /* c3 <= 10329 = floor(4591*6144^2/2^24) */ - /* f2 = (4/9)c3 + (1/576)c2 + (1/147456)c1 + (1/37748736)c0 - [0,0.75] */ - /* claim: 2^19 f2 < x < 2^19(f2+1) */ - /* where x = 233017 c3 + 910(c2+2) */ - /* proof: x - 2^19 f2 = 1820 + (1/9)c3 - (2/9)c2 - (32/9)c1 - (1/72)c0 + 2^19[0,0.75] */ - /* at least 1820 - (2/9)255 - (32/9)255 - (1/72)255 > 0 */ - /* at most 1820 + (1/9)10329 + 2^19 0.75 < 2^19 */ - f2 = (233017*c3 + 910*(c2+2)) >> 19; - - c2 += c3 << 8; - c2 -= (f2 * 9) << 6; - c1 += c2 << 8; - /* f0 + f1*6144 */ - /* = c0 + c1*256 */ - /* c1 <= 110184 = floor(4591*6144/2^8) */ - /* f1 = (1/24)c1 + (1/6144)c0 - (1/6144)f0 */ - /* claim: 2^19 f1 < x < 2^19(f1+1) */ - /* where x = 21845(c1+2) + 85 c0 */ - /* proof: x - 2^19 f1 = 43690 - (1/3)c1 - (1/3)c0 + 2^19 [0,0.75] */ - /* at least 43690 - (1/3)110184 - (1/3)255 > 0 */ - /* at most 43690 + 2^19 0.75 < 2^19 */ - f1 = (21845*(c1+2) + 85*c0) >> 19; - - c1 -= (f1 * 3) << 3; - c0 += c1 << 8; - f0 = c0; - - *f++ = modq_freeze(f0 + q - qshift); - *f++ = modq_freeze(f1 + q - qshift); - *f++ = modq_freeze(f2 + q - qshift); - *f++ = modq_freeze(f3 + q - qshift); - *f++ = modq_freeze(f4 + q - qshift); - } - - c0 = *c++; - c1 = *c++; - c0 += c1 << 8; - *f++ = modq_freeze(c0 + q - qshift); -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_mult.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void rq_mult(modq *h,const modq *f,const small *g) -{ - modq fg[p + p - 1]; - modq result; - int i, j; - - for (i = 0;i < p;++i) { - result = 0; - for (j = 0;j <= i;++j) - result = modq_plusproduct(result,f[j],g[i - j]); - fg[i] = result; - } - for (i = p;i < p + p - 1;++i) { - result = 0; - for (j = i - p + 1;j < p;++j) - result = modq_plusproduct(result,f[j],g[i - j]); - fg[i] = result; - } - - for (i = p + p - 2;i >= p;--i) { - fg[i - p] = modq_sum(fg[i - p],fg[i]); - fg[i - p + 1] = modq_sum(fg[i - p + 1],fg[i]); - } - - for (i = 0;i < p;++i) - h[i] = fg[i]; -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_recip3.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -/* caller must ensure that x-y does not overflow */ -static int smaller_mask_rq_recip3(int x,int y) -{ - return (x - y) >> 31; -} - -static void vectormodq_product(modq *z,int len,const modq *x,const modq c) -{ - int i; - for (i = 0;i < len;++i) z[i] = modq_product(x[i],c); -} - -static void vectormodq_minusproduct(modq *z,int len,const modq *x,const modq *y,const modq c) -{ - int i; - for (i = 0;i < len;++i) z[i] = modq_minusproduct(x[i],y[i],c); -} - -static void vectormodq_shift(modq *z,int len) -{ - int i; - for (i = len - 1;i > 0;--i) z[i] = z[i - 1]; - z[0] = 0; -} - -/* -r = (3s)^(-1) mod m, returning 0, if s is invertible mod m -or returning -1 if s is not invertible mod m -r,s are polys of degree

= loops) break; - - c = modq_quotient(g[p],f[p]); - - vectormodq_minusproduct(g,p + 1,g,f,c); - vectormodq_shift(g,p + 1); - -#ifdef SIMPLER - vectormodq_minusproduct(v,loops + 1,v,u,c); - vectormodq_shift(v,loops + 1); -#else - if (loop < p) { - vectormodq_minusproduct(v,loop + 1,v,u,c); - vectormodq_shift(v,loop + 2); - } else { - vectormodq_minusproduct(v + loop - p,p + 1,v + loop - p,u + loop - p,c); - vectormodq_shift(v + loop - p,p + 2); - } -#endif - - e -= 1; - - ++loop; - - swapmask = smaller_mask_rq_recip3(e,d) & modq_nonzero_mask(g[p]); - swap(&e,&d,sizeof e,swapmask); - swap(f,g,(p + 1) * sizeof(modq),swapmask); - -#ifdef SIMPLER - swap(u,v,(loops + 1) * sizeof(modq),swapmask); -#else - if (loop < p) { - swap(u,v,(loop + 1) * sizeof(modq),swapmask); - } else { - swap(u + loop - p,v + loop - p,(p + 1) * sizeof(modq),swapmask); - } -#endif - } - - c = modq_reciprocal(f[p]); - vectormodq_product(r,p,u + p,c); - return smaller_mask_rq_recip3(0,d); -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_round3.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void rq_round3(modq *h,const modq *f) -{ - int i; - - for (i = 0;i < p;++i) - h[i] = ((21846 * (f[i] + 2295) + 32768) >> 16) * 3 - 2295; -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_rounded.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void rq_encoderounded(unsigned char *c,const modq *f) -{ - crypto_int32 f0, f1, f2; - int i; - - for (i = 0;i < p/3;++i) { - f0 = *f++ + qshift; - f1 = *f++ + qshift; - f2 = *f++ + qshift; - f0 = (21846 * f0) >> 16; - f1 = (21846 * f1) >> 16; - f2 = (21846 * f2) >> 16; - /* now want f0 + f1*1536 + f2*1536^2 as a 32-bit integer */ - f2 *= 3; - f1 += f2 << 9; - f1 *= 3; - f0 += f1 << 9; - *c++ = f0; f0 >>= 8; - *c++ = f0; f0 >>= 8; - *c++ = f0; f0 >>= 8; - *c++ = f0; - } - /* XXX: using p mod 3 = 2 */ - f0 = *f++ + qshift; - f1 = *f++ + qshift; - f0 = (21846 * f0) >> 16; - f1 = (21846 * f1) >> 16; - f1 *= 3; - f0 += f1 << 9; - *c++ = f0; f0 >>= 8; - *c++ = f0; f0 >>= 8; - *c++ = f0; -} - -static void rq_decoderounded(modq *f,const unsigned char *c) -{ - crypto_uint32 c0, c1, c2, c3; - crypto_uint32 f0, f1, f2; - int i; - - for (i = 0;i < p/3;++i) { - c0 = *c++; - c1 = *c++; - c2 = *c++; - c3 = *c++; - - /* f0 + f1*1536 + f2*1536^2 */ - /* = c0 + c1*256 + c2*256^2 + c3*256^3 */ - /* with each f between 0 and 1530 */ - - /* f2 = (64/9)c3 + (1/36)c2 + (1/9216)c1 + (1/2359296)c0 - [0,0.99675] */ - /* claim: 2^21 f2 < x < 2^21(f2+1) */ - /* where x = 14913081*c3 + 58254*c2 + 228*(c1+2) */ - /* proof: x - 2^21 f2 = 456 - (8/9)c0 + (4/9)c1 - (2/9)c2 + (1/9)c3 + 2^21 [0,0.99675] */ - /* at least 456 - (8/9)255 - (2/9)255 > 0 */ - /* at most 456 + (4/9)255 + (1/9)255 + 2^21 0.99675 < 2^21 */ - f2 = (14913081*c3 + 58254*c2 + 228*(c1+2)) >> 21; - - c2 += c3 << 8; - c2 -= (f2 * 9) << 2; - /* f0 + f1*1536 */ - /* = c0 + c1*256 + c2*256^2 */ - /* c2 <= 35 = floor((1530+1530*1536)/256^2) */ - /* f1 = (128/3)c2 + (1/6)c1 + (1/1536)c0 - (1/1536)f0 */ - /* claim: 2^21 f1 < x < 2^21(f1+1) */ - /* where x = 89478485*c2 + 349525*c1 + 1365*(c0+1) */ - /* proof: x - 2^21 f1 = 1365 - (1/3)c2 - (1/3)c1 - (1/3)c0 + (4096/3)f0 */ - /* at least 1365 - (1/3)35 - (1/3)255 - (1/3)255 > 0 */ - /* at most 1365 + (4096/3)1530 < 2^21 */ - f1 = (89478485*c2 + 349525*c1 + 1365*(c0+1)) >> 21; - - c1 += c2 << 8; - c1 -= (f1 * 3) << 1; - - c0 += c1 << 8; - f0 = c0; - - *f++ = modq_freeze(f0 * 3 + q - qshift); - *f++ = modq_freeze(f1 * 3 + q - qshift); - *f++ = modq_freeze(f2 * 3 + q - qshift); - } - - c0 = *c++; - c1 = *c++; - c2 = *c++; - - f1 = (89478485*c2 + 349525*c1 + 1365*(c0+1)) >> 21; - - c1 += c2 << 8; - c1 -= (f1 * 3) << 1; - - c0 += c1 << 8; - f0 = c0; - - *f++ = modq_freeze(f0 * 3 + q - qshift); - *f++ = modq_freeze(f1 * 3 + q - qshift); -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/small.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -/* XXX: these functions rely on p mod 4 = 1 */ - -/* all coefficients in -1, 0, 1 */ -static void small_encode(unsigned char *c,const small *f) -{ - small c0; - int i; - - for (i = 0;i < p/4;++i) { - c0 = *f++ + 1; - c0 += (*f++ + 1) << 2; - c0 += (*f++ + 1) << 4; - c0 += (*f++ + 1) << 6; - *c++ = c0; - } - c0 = *f++ + 1; - *c++ = c0; -} - -static void small_decode(small *f,const unsigned char *c) -{ - unsigned char c0; - int i; - - for (i = 0;i < p/4;++i) { - c0 = *c++; - *f++ = ((small) (c0 & 3)) - 1; c0 >>= 2; - *f++ = ((small) (c0 & 3)) - 1; c0 >>= 2; - *f++ = ((small) (c0 & 3)) - 1; c0 >>= 2; - *f++ = ((small) (c0 & 3)) - 1; - } - c0 = *c++; - *f++ = ((small) (c0 & 3)) - 1; -} - -/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/swap.c */ -/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */ - - -static void swap(void *x,void *y,int bytes,int mask) -{ - int i; - char xi, yi, c, t; - - c = mask; - - for (i = 0;i < bytes;++i) { - xi = i[(char *) x]; - yi = i[(char *) y]; - t = c & (xi ^ yi); - xi ^= t; - yi ^= t; - i[(char *) x] = xi; - i[(char *) y] = yi; - } -} - diff --git a/sntrup4591761.sh b/sntrup4591761.sh deleted file mode 100644 index e684c3329c2e..000000000000 --- a/sntrup4591761.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh -# $OpenBSD: sntrup4591761.sh,v 1.3 2019/01/30 19:51:15 markus Exp $ -# Placed in the Public Domain. -# -AUTHOR="libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/implementors" -FILES=" - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/int32_sort.h - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/int32_sort.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/small.h - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/mod3.h - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/modq.h - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/params.h - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3.h - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq.h - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/swap.h - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/dec.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/enc.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/keypair.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3_mult.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3_recip.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/randomsmall.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/randomweightw.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_mult.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_recip3.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_round3.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_rounded.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/small.c - libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/swap.c -" -### - -set -e -cd $1 -echo -n '/* $' -echo 'OpenBSD: $ */' -echo -echo '/*' -echo ' * Public Domain, Authors:' -sed -e '/Alphabetical order:/d' -e 's/^/ * - /' < $AUTHOR -echo ' */' -echo -echo '#include ' -echo '#include "crypto_api.h"' -echo -for i in $FILES; do - echo "/* from $i */" - b=$(basename $i .c) - grep \ - -v '#include' $i | \ - grep -v "extern crypto_int32 small_random32" | - sed -e "s/crypto_kem_/crypto_kem_sntrup4591761_/g" \ - -e "s/smaller_mask/smaller_mask_${b}/g" \ - -e "s/^extern void /static void /" \ - -e "s/^void /static void /" - echo -done diff --git a/sntrup761.c b/sntrup761.c new file mode 100644 index 000000000000..21b59bd4bb27 --- /dev/null +++ b/sntrup761.c @@ -0,0 +1,1364 @@ +/* $OpenBSD: sntrup761.c,v 1.1 2020/12/29 00:59:15 djm Exp $ */ + +/* + * Public Domain, Authors: + * - Daniel J. Bernstein + * - Chitchanok Chuengsatiansup + * - Tanja Lange + * - Christine van Vredendaal + */ + +#include "includes.h" + +#include +#include "crypto_api.h" + +#define CRYPTO_NAMESPACE(s) s + +/* from supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc */ +#define int32_MINMAX(a,b) \ +do { \ + int32 ab = b ^ a; \ + int32 c = b - a; \ + c ^= ab & (c ^ b); \ + c >>= 31; \ + c &= ab; \ + a ^= c; \ + b ^= c; \ +} while(0) + +/* from supercop-20201130/crypto_sort/int32/portable4/sort.c */ +#define int32 crypto_int32 + + +static void crypto_sort_int32(void *array,long long n) +{ + long long top,p,q,r,i,j; + int32 *x = array; + + if (n < 2) return; + top = 1; + while (top < n - top) top += top; + + for (p = top;p >= 1;p >>= 1) { + i = 0; + while (i + 2 * p <= n) { + for (j = i;j < i + p;++j) + int32_MINMAX(x[j],x[j+p]); + i += 2 * p; + } + for (j = i;j < n - p;++j) + int32_MINMAX(x[j],x[j+p]); + + i = 0; + j = 0; + for (q = top;q > p;q >>= 1) { + if (j != i) for (;;) { + if (j == n - q) goto done; + int32 a = x[j + p]; + for (r = q;r > p;r >>= 1) + int32_MINMAX(a,x[j + r]); + x[j + p] = a; + ++j; + if (j == i + p) { + i += 2 * p; + break; + } + } + while (i + p <= n - q) { + for (j = i;j < i + p;++j) { + int32 a = x[j + p]; + for (r = q;r > p;r >>= 1) + int32_MINMAX(a,x[j+r]); + x[j + p] = a; + } + i += 2 * p; + } + /* now i + p > n - q */ + j = i; + while (j < n - q) { + int32 a = x[j + p]; + for (r = q;r > p;r >>= 1) + int32_MINMAX(a,x[j+r]); + x[j + p] = a; + ++j; + } + + done: ; + } + } +} + +/* from supercop-20201130/crypto_sort/uint32/useint32/sort.c */ + +/* can save time by vectorizing xor loops */ +/* can save time by integrating xor loops with int32_sort */ + +static void crypto_sort_uint32(void *array,long long n) +{ + crypto_uint32 *x = array; + long long j; + for (j = 0;j < n;++j) x[j] ^= 0x80000000; + crypto_sort_int32(array,n); + for (j = 0;j < n;++j) x[j] ^= 0x80000000; +} + +/* from supercop-20201130/crypto_kem/sntrup761/ref/uint64.h */ +#ifndef UINT64_H +#define UINT64_H + + +typedef uint64_t uint64; + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/uint16.h */ +#ifndef UINT16_H +#define UINT16_H + +typedef uint16_t uint16; + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/uint32.h */ +#ifndef UINT32_H +#define UINT32_H + +#define uint32_div_uint14 CRYPTO_NAMESPACE(uint32_div_uint14) +#define uint32_mod_uint14 CRYPTO_NAMESPACE(uint32_mod_uint14) +#define uint32_divmod_uint14 CRYPTO_NAMESPACE(uint32_divmod_uint14) + + +typedef uint32_t uint32; + +/* +assuming 1 <= m < 16384: +q = uint32_div_uint14(x,m) means q = x/m +r = uint32_mod_uint14(x,m) means r = x/m +uint32_moddiv_uint14(&q,&r,x,m) means q = x/m, r = x%m +*/ + +extern uint32 uint32_div_uint14(uint32,uint16); +extern uint16 uint32_mod_uint14(uint32,uint16); +static void uint32_divmod_uint14(uint32 *,uint16 *,uint32,uint16); + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/int8.h */ +#ifndef INT8_H +#define INT8_H + +typedef int8_t int8; + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/int16.h */ +#ifndef INT16_H +#define INT16_H + +typedef int16_t int16; + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/int32.h */ +#ifndef INT32_H +#define INT32_H + +#define int32_div_uint14 CRYPTO_NAMESPACE(int32_div_uint14) +#define int32_mod_uint14 CRYPTO_NAMESPACE(int32_mod_uint14) +#define int32_divmod_uint14 CRYPTO_NAMESPACE(int32_divmod_uint14) + + +typedef int32_t int32; + +/* +assuming 1 <= m < 16384: +q = int32_div_uint14(x,m) means q = x/m +r = int32_mod_uint14(x,m) means r = x/m +int32_moddiv_uint14(&q,&r,x,m) means q = x/m, r = x%m +*/ + +extern int32 int32_div_uint14(int32,uint16); +extern uint16 int32_mod_uint14(int32,uint16); +static void int32_divmod_uint14(int32 *,uint16 *,int32,uint16); + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/uint32.c */ + +/* +CPU division instruction typically takes time depending on x. +This software is designed to take time independent of x. +Time still varies depending on m; user must ensure that m is constant. +Time also varies on CPUs where multiplication is variable-time. +There could be more CPU issues. +There could also be compiler issues. +*/ + +static void uint32_divmod_uint14(uint32 *q,uint16 *r,uint32 x,uint16 m) +{ + uint32 v = 0x80000000; + uint32 qpart; + uint32 mask; + + v /= m; + + /* caller guarantees m > 0 */ + /* caller guarantees m < 16384 */ + /* vm <= 2^31 <= vm+m-1 */ + /* xvm <= 2^31 x <= xvm+x(m-1) */ + + *q = 0; + + qpart = (x*(uint64)v)>>31; + /* 2^31 qpart <= xv <= 2^31 qpart + 2^31-1 */ + /* 2^31 qpart m <= xvm <= 2^31 qpart m + (2^31-1)m */ + /* 2^31 qpart m <= 2^31 x <= 2^31 qpart m + (2^31-1)m + x(m-1) */ + /* 0 <= 2^31 newx <= (2^31-1)m + x(m-1) */ + /* 0 <= newx <= (1-1/2^31)m + x(m-1)/2^31 */ + /* 0 <= newx <= (1-1/2^31)(2^14-1) + (2^32-1)((2^14-1)-1)/2^31 */ + + x -= qpart*m; *q += qpart; + /* x <= 49146 */ + + qpart = (x*(uint64)v)>>31; + /* 0 <= newx <= (1-1/2^31)m + x(m-1)/2^31 */ + /* 0 <= newx <= m + 49146(2^14-1)/2^31 */ + /* 0 <= newx <= m + 0.4 */ + /* 0 <= newx <= m */ + + x -= qpart*m; *q += qpart; + /* x <= m */ + + x -= m; *q += 1; + mask = -(x>>31); + x += mask&(uint32)m; *q += mask; + /* x < m */ + + *r = x; +} + +uint32 uint32_div_uint14(uint32 x,uint16 m) +{ + uint32 q; + uint16 r; + uint32_divmod_uint14(&q,&r,x,m); + return q; +} + +uint16 uint32_mod_uint14(uint32 x,uint16 m) +{ + uint32 q; + uint16 r; + uint32_divmod_uint14(&q,&r,x,m); + return r; +} + +/* from supercop-20201130/crypto_kem/sntrup761/ref/int32.c */ + +static void int32_divmod_uint14(int32 *q,uint16 *r,int32 x,uint16 m) +{ + uint32 uq,uq2; + uint16 ur,ur2; + uint32 mask; + + uint32_divmod_uint14(&uq,&ur,0x80000000+(uint32)x,m); + uint32_divmod_uint14(&uq2,&ur2,0x80000000,m); + ur -= ur2; uq -= uq2; + mask = -(uint32)(ur>>15); + ur += mask&m; uq += mask; + *r = ur; *q = uq; +} + +int32 int32_div_uint14(int32 x,uint16 m) +{ + int32 q; + uint16 r; + int32_divmod_uint14(&q,&r,x,m); + return q; +} + +uint16 int32_mod_uint14(int32 x,uint16 m) +{ + int32 q; + uint16 r; + int32_divmod_uint14(&q,&r,x,m); + return r; +} + +/* from supercop-20201130/crypto_kem/sntrup761/ref/paramsmenu.h */ +/* pick one of these three: */ +#define SIZE761 +#undef SIZE653 +#undef SIZE857 + +/* pick one of these two: */ +#define SNTRUP /* Streamlined NTRU Prime */ +#undef LPR /* NTRU LPRime */ + +/* from supercop-20201130/crypto_kem/sntrup761/ref/params.h */ +#ifndef params_H +#define params_H + +/* menu of parameter choices: */ + + +/* what the menu means: */ + +#if defined(SIZE761) +#define p 761 +#define q 4591 +#define Rounded_bytes 1007 +#ifndef LPR +#define Rq_bytes 1158 +#define w 286 +#else +#define w 250 +#define tau0 2156 +#define tau1 114 +#define tau2 2007 +#define tau3 287 +#endif + +#elif defined(SIZE653) +#define p 653 +#define q 4621 +#define Rounded_bytes 865 +#ifndef LPR +#define Rq_bytes 994 +#define w 288 +#else +#define w 252 +#define tau0 2175 +#define tau1 113 +#define tau2 2031 +#define tau3 290 +#endif + +#elif defined(SIZE857) +#define p 857 +#define q 5167 +#define Rounded_bytes 1152 +#ifndef LPR +#define Rq_bytes 1322 +#define w 322 +#else +#define w 281 +#define tau0 2433 +#define tau1 101 +#define tau2 2265 +#define tau3 324 +#endif + +#else +#error "no parameter set defined" +#endif + +#ifdef LPR +#define I 256 +#endif + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/Decode.h */ +#ifndef Decode_H +#define Decode_H + +#define Decode CRYPTO_NAMESPACE(Decode) + +/* Decode(R,s,M,len) */ +/* assumes 0 < M[i] < 16384 */ +/* produces 0 <= R[i] < M[i] */ +static void Decode(uint16 *,const unsigned char *,const uint16 *,long long); + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/Decode.c */ + +static void Decode(uint16 *out,const unsigned char *S,const uint16 *M,long long len) +{ + if (len == 1) { + if (M[0] == 1) + *out = 0; + else if (M[0] <= 256) + *out = uint32_mod_uint14(S[0],M[0]); + else + *out = uint32_mod_uint14(S[0]+(((uint16)S[1])<<8),M[0]); + } + if (len > 1) { + uint16 R2[(len+1)/2]; + uint16 M2[(len+1)/2]; + uint16 bottomr[len/2]; + uint32 bottomt[len/2]; + long long i; + for (i = 0;i < len-1;i += 2) { + uint32 m = M[i]*(uint32) M[i+1]; + if (m > 256*16383) { + bottomt[i/2] = 256*256; + bottomr[i/2] = S[0]+256*S[1]; + S += 2; + M2[i/2] = (((m+255)>>8)+255)>>8; + } else if (m >= 16384) { + bottomt[i/2] = 256; + bottomr[i/2] = S[0]; + S += 1; + M2[i/2] = (m+255)>>8; + } else { + bottomt[i/2] = 1; + bottomr[i/2] = 0; + M2[i/2] = m; + } + } + if (i < len) + M2[i/2] = M[i]; + Decode(R2,S,M2,(len+1)/2); + for (i = 0;i < len-1;i += 2) { + uint32 r = bottomr[i/2]; + uint32 r1; + uint16 r0; + r += bottomt[i/2]*R2[i/2]; + uint32_divmod_uint14(&r1,&r0,r,M[i]); + r1 = uint32_mod_uint14(r1,M[i+1]); /* only needed for invalid inputs */ + *out++ = r0; + *out++ = r1; + } + if (i < len) + *out++ = R2[i/2]; + } +} + +/* from supercop-20201130/crypto_kem/sntrup761/ref/Encode.h */ +#ifndef Encode_H +#define Encode_H + +#define Encode CRYPTO_NAMESPACE(Encode) + +/* Encode(s,R,M,len) */ +/* assumes 0 <= R[i] < M[i] < 16384 */ +static void Encode(unsigned char *,const uint16 *,const uint16 *,long long); + +#endif + +/* from supercop-20201130/crypto_kem/sntrup761/ref/Encode.c */ + +/* 0 <= R[i] < M[i] < 16384 */ +static void Encode(unsigned char *out,const uint16 *R,const uint16 *M,long long len) +{ + if (len == 1) { + uint16 r = R[0]; + uint16 m = M[0]; + while (m > 1) { + *out++ = r; + r >>= 8; + m = (m+255)>>8; + } + } + if (len > 1) { + uint16 R2[(len+1)/2]; + uint16 M2[(len+1)/2]; + long long i; + for (i = 0;i < len-1;i += 2) { + uint32 m0 = M[i]; + uint32 r = R[i]+R[i+1]*m0; + uint32 m = M[i+1]*m0; + while (m >= 16384) { + *out++ = r; + r >>= 8; + m = (m+255)>>8; + } + R2[i/2] = r; + M2[i/2] = m; + } + if (i < len) { + R2[i/2] = R[i]; + M2[i/2] = M[i]; + } + Encode(out,R2,M2,(len+1)/2); + } +} + +/* from supercop-20201130/crypto_kem/sntrup761/ref/kem.c */ + +#ifdef LPR +#endif + + +/* ----- masks */ + +#ifndef LPR + +/* return -1 if x!=0; else return 0 */ +static int int16_nonzero_mask(int16 x) +{ + uint16 u = x; /* 0, else 1...65535 */ + uint32 v = u; /* 0, else 1...65535 */ + v = -v; /* 0, else 2^32-65535...2^32-1 */ + v >>= 31; /* 0, else 1 */ + return -v; /* 0, else -1 */ +} + +#endif + +/* return -1 if x<0; otherwise return 0 */ +static int int16_negative_mask(int16 x) +{ + uint16 u = x; + u >>= 15; + return -(int) u; + /* alternative with gcc -fwrapv: */ + /* x>>15 compiles to CPU's arithmetic right shift */ +} + +/* ----- arithmetic mod 3 */ + +typedef int8 small; + +/* F3 is always represented as -1,0,1 */ +/* so ZZ_fromF3 is a no-op */ + +/* x must not be close to top int16 */ +static small F3_freeze(int16 x) +{ + return int32_mod_uint14(x+1,3)-1; +} + +/* ----- arithmetic mod q */ + +#define q12 ((q-1)/2) +typedef int16 Fq; +/* always represented as -q12...q12 */ +/* so ZZ_fromFq is a no-op */ + +/* x must not be close to top int32 */ +static Fq Fq_freeze(int32 x) +{ + return int32_mod_uint14(x+q12,q)-q12; +} + +#ifndef LPR + +static Fq Fq_recip(Fq a1) +{ + int i = 1; + Fq ai = a1; + + while (i < q-2) { + ai = Fq_freeze(a1*(int32)ai); + i += 1; + } + return ai; +} + +#endif + +/* ----- Top and Right */ + +#ifdef LPR +#define tau 16 + +static int8 Top(Fq C) +{ + return (tau1*(int32)(C+tau0)+16384)>>15; +} + +static Fq Right(int8 T) +{ + return Fq_freeze(tau3*(int32)T-tau2); +} +#endif + +/* ----- small polynomials */ + +#ifndef LPR + +/* 0 if Weightw_is(r), else -1 */ +static int Weightw_mask(small *r) +{ + int weight = 0; + int i; + + for (i = 0;i < p;++i) weight += r[i]&1; + return int16_nonzero_mask(weight-w); +} + +/* R3_fromR(R_fromRq(r)) */ +static void R3_fromRq(small *out,const Fq *r) +{ + int i; + for (i = 0;i < p;++i) out[i] = F3_freeze(r[i]); +} + +/* h = f*g in the ring R3 */ +static void R3_mult(small *h,const small *f,const small *g) +{ + small fg[p+p-1]; + small result; + int i,j; + + for (i = 0;i < p;++i) { + result = 0; + for (j = 0;j <= i;++j) result = F3_freeze(result+f[j]*g[i-j]); + fg[i] = result; + } + for (i = p;i < p+p-1;++i) { + result = 0; + for (j = i-p+1;j < p;++j) result = F3_freeze(result+f[j]*g[i-j]); + fg[i] = result; + } + + for (i = p+p-2;i >= p;--i) { + fg[i-p] = F3_freeze(fg[i-p]+fg[i]); + fg[i-p+1] = F3_freeze(fg[i-p+1]+fg[i]); + } + + for (i = 0;i < p;++i) h[i] = fg[i]; +} + +/* returns 0 if recip succeeded; else -1 */ +static int R3_recip(small *out,const small *in) +{ + small f[p+1],g[p+1],v[p+1],r[p+1]; + int i,loop,delta; + int sign,swap,t; + + for (i = 0;i < p+1;++i) v[i] = 0; + for (i = 0;i < p+1;++i) r[i] = 0; + r[0] = 1; + for (i = 0;i < p;++i) f[i] = 0; + f[0] = 1; f[p-1] = f[p] = -1; + for (i = 0;i < p;++i) g[p-1-i] = in[i]; + g[p] = 0; + + delta = 1; + + for (loop = 0;loop < 2*p-1;++loop) { + for (i = p;i > 0;--i) v[i] = v[i-1]; + v[0] = 0; + + sign = -g[0]*f[0]; + swap = int16_negative_mask(-delta) & int16_nonzero_mask(g[0]); + delta ^= swap&(delta^-delta); + delta += 1; + + for (i = 0;i < p+1;++i) { + t = swap&(f[i]^g[i]); f[i] ^= t; g[i] ^= t; + t = swap&(v[i]^r[i]); v[i] ^= t; r[i] ^= t; + } + + for (i = 0;i < p+1;++i) g[i] = F3_freeze(g[i]+sign*f[i]); + for (i = 0;i < p+1;++i) r[i] = F3_freeze(r[i]+sign*v[i]); + + for (i = 0;i < p;++i) g[i] = g[i+1]; + g[p] = 0; + } + + sign = f[0]; + for (i = 0;i < p;++i) out[i] = sign*v[p-1-i]; + + return int16_nonzero_mask(delta); +} + +#endif + +/* ----- polynomials mod q */ + +/* h = f*g in the ring Rq */ +static void Rq_mult_small(Fq *h,const Fq *f,const small *g) +{ + Fq fg[p+p-1]; + Fq result; + int i,j; + + for (i = 0;i < p;++i) { + result = 0; + for (j = 0;j <= i;++j) result = Fq_freeze(result+f[j]*(int32)g[i-j]); + fg[i] = result; + } + for (i = p;i < p+p-1;++i) { + result = 0; + for (j = i-p+1;j < p;++j) result = Fq_freeze(result+f[j]*(int32)g[i-j]); + fg[i] = result; + } + + for (i = p+p-2;i >= p;--i) { + fg[i-p] = Fq_freeze(fg[i-p]+fg[i]); + fg[i-p+1] = Fq_freeze(fg[i-p+1]+fg[i]); + } + + for (i = 0;i < p;++i) h[i] = fg[i]; +} + +#ifndef LPR + +/* h = 3f in Rq */ +static void Rq_mult3(Fq *h,const Fq *f) +{ + int i; + + for (i = 0;i < p;++i) h[i] = Fq_freeze(3*f[i]); +} + +/* out = 1/(3*in) in Rq */ +/* returns 0 if recip succeeded; else -1 */ +static int Rq_recip3(Fq *out,const small *in) +{ + Fq f[p+1],g[p+1],v[p+1],r[p+1]; + int i,loop,delta; + int swap,t; + int32 f0,g0; + Fq scale; + + for (i = 0;i < p+1;++i) v[i] = 0; + for (i = 0;i < p+1;++i) r[i] = 0; + r[0] = Fq_recip(3); + for (i = 0;i < p;++i) f[i] = 0; + f[0] = 1; f[p-1] = f[p] = -1; + for (i = 0;i < p;++i) g[p-1-i] = in[i]; + g[p] = 0; + + delta = 1; + + for (loop = 0;loop < 2*p-1;++loop) { + for (i = p;i > 0;--i) v[i] = v[i-1]; + v[0] = 0; + + swap = int16_negative_mask(-delta) & int16_nonzero_mask(g[0]); + delta ^= swap&(delta^-delta); + delta += 1; + + for (i = 0;i < p+1;++i) { + t = swap&(f[i]^g[i]); f[i] ^= t; g[i] ^= t; + t = swap&(v[i]^r[i]); v[i] ^= t; r[i] ^= t; + } + + f0 = f[0]; + g0 = g[0]; + for (i = 0;i < p+1;++i) g[i] = Fq_freeze(f0*g[i]-g0*f[i]); + for (i = 0;i < p+1;++i) r[i] = Fq_freeze(f0*r[i]-g0*v[i]); + + for (i = 0;i < p;++i) g[i] = g[i+1]; + g[p] = 0; + } + + scale = Fq_recip(f[0]); + for (i = 0;i < p;++i) out[i] = Fq_freeze(scale*(int32)v[p-1-i]); + + return int16_nonzero_mask(delta); +} + +#endif + +/* ----- rounded polynomials mod q */ + +static void Round(Fq *out,const Fq *a) +{ + int i; + for (i = 0;i < p;++i) out[i] = a[i]-F3_freeze(a[i]); +} + +/* ----- sorting to generate short polynomial */ + +static void Short_fromlist(small *out,const uint32 *in) +{ + uint32 L[p]; + int i; + + for (i = 0;i < w;++i) L[i] = in[i]&(uint32)-2; + for (i = w;i < p;++i) L[i] = (in[i]&(uint32)-3)|1; + crypto_sort_uint32(L,p); + for (i = 0;i < p;++i) out[i] = (L[i]&3)-1; +} + +/* ----- underlying hash function */ + +#define Hash_bytes 32 + +/* e.g., b = 0 means out = Hash0(in) */ +static void Hash_prefix(unsigned char *out,int b,const unsigned char *in,int inlen) +{ + unsigned char x[inlen+1]; + unsigned char h[64]; + int i; + + x[0] = b; + for (i = 0;i < inlen;++i) x[i+1] = in[i]; + crypto_hash_sha512(h,x,inlen+1); + for (i = 0;i < 32;++i) out[i] = h[i]; +} + +/* ----- higher-level randomness */ + +static uint32 urandom32(void) +{ + unsigned char c[4]; + uint32 out[4]; + + randombytes(c,4); + out[0] = (uint32)c[0]; + out[1] = ((uint32)c[1])<<8; + out[2] = ((uint32)c[2])<<16; + out[3] = ((uint32)c[3])<<24; + return out[0]+out[1]+out[2]+out[3]; +} + +static void Short_random(small *out) +{ + uint32 L[p]; + int i; + + for (i = 0;i < p;++i) L[i] = urandom32(); + Short_fromlist(out,L); +} + +#ifndef LPR + +static void Small_random(small *out) +{ + int i; + + for (i = 0;i < p;++i) out[i] = (((urandom32()&0x3fffffff)*3)>>30)-1; +} + +#endif + +/* ----- Streamlined NTRU Prime Core */ + +#ifndef LPR + +/* h,(f,ginv) = KeyGen() */ +static void KeyGen(Fq *h,small *f,small *ginv) +{ + small g[p]; + Fq finv[p]; + + for (;;) { + Small_random(g); + if (R3_recip(ginv,g) == 0) break; + } + Short_random(f); + Rq_recip3(finv,f); /* always works */ + Rq_mult_small(h,finv,g); +} + +/* c = Encrypt(r,h) */ +static void Encrypt(Fq *c,const small *r,const Fq *h) +{ + Fq hr[p]; + + Rq_mult_small(hr,h,r); + Round(c,hr); +} + +/* r = Decrypt(c,(f,ginv)) */ +static void Decrypt(small *r,const Fq *c,const small *f,const small *ginv) +{ + Fq cf[p]; + Fq cf3[p]; + small e[p]; + small ev[p]; + int mask; + int i; + + Rq_mult_small(cf,c,f); + Rq_mult3(cf3,cf); + R3_fromRq(e,cf3); + R3_mult(ev,e,ginv); + + mask = Weightw_mask(ev); /* 0 if weight w, else -1 */ + for (i = 0;i < w;++i) r[i] = ((ev[i]^1)&~mask)^1; + for (i = w;i < p;++i) r[i] = ev[i]&~mask; +} + +#endif + +/* ----- NTRU LPRime Core */ + +#ifdef LPR + +/* (G,A),a = KeyGen(G); leaves G unchanged */ +static void KeyGen(Fq *A,small *a,const Fq *G) +{ + Fq aG[p]; + + Short_random(a); + Rq_mult_small(aG,G,a); + Round(A,aG); +} + +/* B,T = Encrypt(r,(G,A),b) */ +static void Encrypt(Fq *B,int8 *T,const int8 *r,const Fq *G,const Fq *A,const small *b) +{ + Fq bG[p]; + Fq bA[p]; + int i; + + Rq_mult_small(bG,G,b); + Round(B,bG); + Rq_mult_small(bA,A,b); + for (i = 0;i < I;++i) T[i] = Top(Fq_freeze(bA[i]+r[i]*q12)); +} + +/* r = Decrypt((B,T),a) */ +static void Decrypt(int8 *r,const Fq *B,const int8 *T,const small *a) +{ + Fq aB[p]; + int i; + + Rq_mult_small(aB,B,a); + for (i = 0;i < I;++i) + r[i] = -int16_negative_mask(Fq_freeze(Right(T[i])-aB[i]+4*w+1)); +} + +#endif + +/* ----- encoding I-bit inputs */ + +#ifdef LPR + +#define Inputs_bytes (I/8) +typedef int8 Inputs[I]; /* passed by reference */ + +static void Inputs_encode(unsigned char *s,const Inputs r) +{ + int i; + for (i = 0;i < Inputs_bytes;++i) s[i] = 0; + for (i = 0;i < I;++i) s[i>>3] |= r[i]<<(i&7); +} + +#endif + +/* ----- Expand */ + +#ifdef LPR + +static const unsigned char aes_nonce[16] = {0}; + +static void Expand(uint32 *L,const unsigned char *k) +{ + int i; + crypto_stream_aes256ctr((unsigned char *) L,4*p,aes_nonce,k); + for (i = 0;i < p;++i) { + uint32 L0 = ((unsigned char *) L)[4*i]; + uint32 L1 = ((unsigned char *) L)[4*i+1]; + uint32 L2 = ((unsigned char *) L)[4*i+2]; + uint32 L3 = ((unsigned char *) L)[4*i+3]; + L[i] = L0+(L1<<8)+(L2<<16)+(L3<<24); + } +} + +#endif + +/* ----- Seeds */ + +#ifdef LPR + +#define Seeds_bytes 32 + +static void Seeds_random(unsigned char *s) +{ + randombytes(s,Seeds_bytes); +} + +#endif + +/* ----- Generator, HashShort */ + +#ifdef LPR + +/* G = Generator(k) */ +static void Generator(Fq *G,const unsigned char *k) +{ + uint32 L[p]; + int i; + + Expand(L,k); + for (i = 0;i < p;++i) G[i] = uint32_mod_uint14(L[i],q)-q12; +} + +/* out = HashShort(r) */ +static void HashShort(small *out,const Inputs r) +{ + unsigned char s[Inputs_bytes]; + unsigned char h[Hash_bytes]; + uint32 L[p]; + + Inputs_encode(s,r); + Hash_prefix(h,5,s,sizeof s); + Expand(L,h); + Short_fromlist(out,L); +} + +#endif + +/* ----- NTRU LPRime Expand */ + +#ifdef LPR + +/* (S,A),a = XKeyGen() */ +static void XKeyGen(unsigned char *S,Fq *A,small *a) +{ + Fq G[p]; + + Seeds_random(S); + Generator(G,S); + KeyGen(A,a,G); +} + +/* B,T = XEncrypt(r,(S,A)) */ +static void XEncrypt(Fq *B,int8 *T,const int8 *r,const unsigned char *S,const Fq *A) +{ + Fq G[p]; + small b[p]; + + Generator(G,S); + HashShort(b,r); + Encrypt(B,T,r,G,A,b); +} + +#define XDecrypt Decrypt + +#endif + +/* ----- encoding small polynomials (including short polynomials) */ + +#define Small_bytes ((p+3)/4) + +/* these are the only functions that rely on p mod 4 = 1 */ + +static void Small_encode(unsigned char *s,const small *f) +{ + small x; + int i; + + for (i = 0;i < p/4;++i) { + x = *f++ + 1; + x += (*f++ + 1)<<2; + x += (*f++ + 1)<<4; + x += (*f++ + 1)<<6; + *s++ = x; + } + x = *f++ + 1; + *s++ = x; +} + +static void Small_decode(small *f,const unsigned char *s) +{ + unsigned char x; + int i; + + for (i = 0;i < p/4;++i) { + x = *s++; + *f++ = ((small)(x&3))-1; x >>= 2; + *f++ = ((small)(x&3))-1; x >>= 2; + *f++ = ((small)(x&3))-1; x >>= 2; + *f++ = ((small)(x&3))-1; + } + x = *s++; + *f++ = ((small)(x&3))-1; +} + +/* ----- encoding general polynomials */ + +#ifndef LPR + +static void Rq_encode(unsigned char *s,const Fq *r) +{ + uint16 R[p],M[p]; + int i; + + for (i = 0;i < p;++i) R[i] = r[i]+q12; + for (i = 0;i < p;++i) M[i] = q; + Encode(s,R,M,p); +} + +static void Rq_decode(Fq *r,const unsigned char *s) +{ + uint16 R[p],M[p]; + int i; + + for (i = 0;i < p;++i) M[i] = q; + Decode(R,s,M,p); + for (i = 0;i < p;++i) r[i] = ((Fq)R[i])-q12; +} + +#endif + +/* ----- encoding rounded polynomials */ + +static void Rounded_encode(unsigned char *s,const Fq *r) +{ + uint16 R[p],M[p]; + int i; + + for (i = 0;i < p;++i) R[i] = ((r[i]+q12)*10923)>>15; + for (i = 0;i < p;++i) M[i] = (q+2)/3; + Encode(s,R,M,p); +} + +static void Rounded_decode(Fq *r,const unsigned char *s) +{ + uint16 R[p],M[p]; + int i; + + for (i = 0;i < p;++i) M[i] = (q+2)/3; + Decode(R,s,M,p); + for (i = 0;i < p;++i) r[i] = R[i]*3-q12; +} + +/* ----- encoding top polynomials */ + +#ifdef LPR + +#define Top_bytes (I/2) + +static void Top_encode(unsigned char *s,const int8 *T) +{ + int i; + for (i = 0;i < Top_bytes;++i) + s[i] = T[2*i]+(T[2*i+1]<<4); +} + +static void Top_decode(int8 *T,const unsigned char *s) +{ + int i; + for (i = 0;i < Top_bytes;++i) { + T[2*i] = s[i]&15; + T[2*i+1] = s[i]>>4; + } +} + +#endif + +/* ----- Streamlined NTRU Prime Core plus encoding */ + +#ifndef LPR + +typedef small Inputs[p]; /* passed by reference */ +#define Inputs_random Short_random +#define Inputs_encode Small_encode +#define Inputs_bytes Small_bytes + +#define Ciphertexts_bytes Rounded_bytes +#define SecretKeys_bytes (2*Small_bytes) +#define PublicKeys_bytes Rq_bytes + +/* pk,sk = ZKeyGen() */ +static void ZKeyGen(unsigned char *pk,unsigned char *sk) +{ + Fq h[p]; + small f[p],v[p]; + + KeyGen(h,f,v); + Rq_encode(pk,h); + Small_encode(sk,f); sk += Small_bytes; + Small_encode(sk,v); +} + +/* C = ZEncrypt(r,pk) */ +static void ZEncrypt(unsigned char *C,const Inputs r,const unsigned char *pk) +{ + Fq h[p]; + Fq c[p]; + Rq_decode(h,pk); + Encrypt(c,r,h); + Rounded_encode(C,c); +} + +/* r = ZDecrypt(C,sk) */ +static void ZDecrypt(Inputs r,const unsigned char *C,const unsigned char *sk) +{ + small f[p],v[p]; + Fq c[p]; + + Small_decode(f,sk); sk += Small_bytes; + Small_decode(v,sk); + Rounded_decode(c,C); + Decrypt(r,c,f,v); +} + +#endif + +/* ----- NTRU LPRime Expand plus encoding */ + +#ifdef LPR + +#define Ciphertexts_bytes (Rounded_bytes+Top_bytes) +#define SecretKeys_bytes Small_bytes +#define PublicKeys_bytes (Seeds_bytes+Rounded_bytes) + +static void Inputs_random(Inputs r) +{ + unsigned char s[Inputs_bytes]; + int i; + + randombytes(s,sizeof s); + for (i = 0;i < I;++i) r[i] = 1&(s[i>>3]>>(i&7)); +} + +/* pk,sk = ZKeyGen() */ +static void ZKeyGen(unsigned char *pk,unsigned char *sk) +{ + Fq A[p]; + small a[p]; + + XKeyGen(pk,A,a); pk += Seeds_bytes; + Rounded_encode(pk,A); + Small_encode(sk,a); +} + +/* c = ZEncrypt(r,pk) */ +static void ZEncrypt(unsigned char *c,const Inputs r,const unsigned char *pk) +{ + Fq A[p]; + Fq B[p]; + int8 T[I]; + + Rounded_decode(A,pk+Seeds_bytes); + XEncrypt(B,T,r,pk,A); + Rounded_encode(c,B); c += Rounded_bytes; + Top_encode(c,T); +} + +/* r = ZDecrypt(C,sk) */ +static void ZDecrypt(Inputs r,const unsigned char *c,const unsigned char *sk) +{ + small a[p]; + Fq B[p]; + int8 T[I]; + + Small_decode(a,sk); + Rounded_decode(B,c); + Top_decode(T,c+Rounded_bytes); + XDecrypt(r,B,T,a); +} + +#endif + +/* ----- confirmation hash */ + +#define Confirm_bytes 32 + +/* h = HashConfirm(r,pk,cache); cache is Hash4(pk) */ +static void HashConfirm(unsigned char *h,const unsigned char *r,const unsigned char *pk,const unsigned char *cache) +{ +#ifndef LPR + unsigned char x[Hash_bytes*2]; + int i; + + Hash_prefix(x,3,r,Inputs_bytes); + for (i = 0;i < Hash_bytes;++i) x[Hash_bytes+i] = cache[i]; +#else + unsigned char x[Inputs_bytes+Hash_bytes]; + int i; + + for (i = 0;i < Inputs_bytes;++i) x[i] = r[i]; + for (i = 0;i < Hash_bytes;++i) x[Inputs_bytes+i] = cache[i]; +#endif + Hash_prefix(h,2,x,sizeof x); +} + +/* ----- session-key hash */ + +/* k = HashSession(b,y,z) */ +static void HashSession(unsigned char *k,int b,const unsigned char *y,const unsigned char *z) +{ +#ifndef LPR + unsigned char x[Hash_bytes+Ciphertexts_bytes+Confirm_bytes]; + int i; + + Hash_prefix(x,3,y,Inputs_bytes); + for (i = 0;i < Ciphertexts_bytes+Confirm_bytes;++i) x[Hash_bytes+i] = z[i]; +#else + unsigned char x[Inputs_bytes+Ciphertexts_bytes+Confirm_bytes]; + int i; + + for (i = 0;i < Inputs_bytes;++i) x[i] = y[i]; + for (i = 0;i < Ciphertexts_bytes+Confirm_bytes;++i) x[Inputs_bytes+i] = z[i]; +#endif + Hash_prefix(k,b,x,sizeof x); +} + +/* ----- Streamlined NTRU Prime and NTRU LPRime */ + +/* pk,sk = KEM_KeyGen() */ +static void KEM_KeyGen(unsigned char *pk,unsigned char *sk) +{ + int i; + + ZKeyGen(pk,sk); sk += SecretKeys_bytes; + for (i = 0;i < PublicKeys_bytes;++i) *sk++ = pk[i]; + randombytes(sk,Inputs_bytes); sk += Inputs_bytes; + Hash_prefix(sk,4,pk,PublicKeys_bytes); +} + +/* c,r_enc = Hide(r,pk,cache); cache is Hash4(pk) */ +static void Hide(unsigned char *c,unsigned char *r_enc,const Inputs r,const unsigned char *pk,const unsigned char *cache) +{ + Inputs_encode(r_enc,r); + ZEncrypt(c,r,pk); c += Ciphertexts_bytes; + HashConfirm(c,r_enc,pk,cache); +} + +/* c,k = Encap(pk) */ +static void Encap(unsigned char *c,unsigned char *k,const unsigned char *pk) +{ + Inputs r; + unsigned char r_enc[Inputs_bytes]; + unsigned char cache[Hash_bytes]; + + Hash_prefix(cache,4,pk,PublicKeys_bytes); + Inputs_random(r); + Hide(c,r_enc,r,pk,cache); + HashSession(k,1,r_enc,c); +} + +/* 0 if matching ciphertext+confirm, else -1 */ +static int Ciphertexts_diff_mask(const unsigned char *c,const unsigned char *c2) +{ + uint16 differentbits = 0; + int len = Ciphertexts_bytes+Confirm_bytes; + + while (len-- > 0) differentbits |= (*c++)^(*c2++); + return (1&((differentbits-1)>>8))-1; +} + +/* k = Decap(c,sk) */ +static void Decap(unsigned char *k,const unsigned char *c,const unsigned char *sk) +{ + const unsigned char *pk = sk + SecretKeys_bytes; + const unsigned char *rho = pk + PublicKeys_bytes; + const unsigned char *cache = rho + Inputs_bytes; + Inputs r; + unsigned char r_enc[Inputs_bytes]; + unsigned char cnew[Ciphertexts_bytes+Confirm_bytes]; + int mask; + int i; + + ZDecrypt(r,c,sk); + Hide(cnew,r_enc,r,pk,cache); + mask = Ciphertexts_diff_mask(c,cnew); + for (i = 0;i < Inputs_bytes;++i) r_enc[i] ^= mask&(r_enc[i]^rho[i]); + HashSession(k,1+mask,r_enc,c); +} + +/* ----- crypto_kem API */ + + +int crypto_kem_sntrup761_keypair(unsigned char *pk,unsigned char *sk) +{ + KEM_KeyGen(pk,sk); + return 0; +} + +int crypto_kem_sntrup761_enc(unsigned char *c,unsigned char *k,const unsigned char *pk) +{ + Encap(c,k,pk); + return 0; +} + +int crypto_kem_sntrup761_dec(unsigned char *k,const unsigned char *c,const unsigned char *sk) +{ + Decap(k,c,sk); + return 0; +} + diff --git a/sntrup761.sh b/sntrup761.sh new file mode 100644 index 000000000000..7fa9e3249047 --- /dev/null +++ b/sntrup761.sh @@ -0,0 +1,65 @@ +#!/bin/sh +# $OpenBSD: sntrup761.sh,v 1.1 2020/12/29 00:59:15 djm Exp $ +# Placed in the Public Domain. +# +AUTHOR="supercop-20201130/crypto_kem/sntrup761/ref/implementors" +FILES=" + supercop-20201130/crypto_kem/sntrup761/ref/uint64.h + supercop-20201130/crypto_kem/sntrup761/ref/uint16.h + supercop-20201130/crypto_kem/sntrup761/ref/uint32.h + supercop-20201130/crypto_kem/sntrup761/ref/int8.h + supercop-20201130/crypto_kem/sntrup761/ref/int16.h + supercop-20201130/crypto_kem/sntrup761/ref/int32.h + supercop-20201130/crypto_kem/sntrup761/ref/uint32.c + supercop-20201130/crypto_kem/sntrup761/ref/int32.c + supercop-20201130/crypto_kem/sntrup761/ref/paramsmenu.h + supercop-20201130/crypto_kem/sntrup761/ref/params.h + supercop-20201130/crypto_kem/sntrup761/ref/Decode.h + supercop-20201130/crypto_kem/sntrup761/ref/Decode.c + supercop-20201130/crypto_kem/sntrup761/ref/Encode.h + supercop-20201130/crypto_kem/sntrup761/ref/Encode.c + supercop-20201130/crypto_kem/sntrup761/ref/kem.c +" +SORT_I32=" + supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc + supercop-20201130/crypto_sort/int32/portable4/sort.c +" +SORT_U32="supercop-20201130/crypto_sort/uint32/useint32/sort.c" +### + +set -e +cd $1 +echo -n '/* $' +echo 'OpenBSD: $ */' +echo +echo '/*' +echo ' * Public Domain, Authors:' +sed -e '/Alphabetical order:/d' -e 's/^/ * - /' < $AUTHOR +echo ' */' +echo +echo '#include ' +echo '#include "crypto_api.h"' +echo +echo '#define CRYPTO_NAMESPACE(s) s' +echo +for i in $SORT_I32; do + echo "/* from $i */" + grep \ + -v '#include' $i | \ + sed -e "s/void crypto_sort/static void crypto_sort_int32/g" + echo +done +echo "/* from $SORT_U32 */" +grep \ + -v '#include' $SORT_U32 | \ + sed -e "s/void crypto_sort/static void crypto_sort_uint32/g" +echo +for i in $FILES; do + echo "/* from $i */" + grep \ + -v '#include' $i | \ + sed -e "s/crypto_kem_/crypto_kem_sntrup761_/g" \ + -e "s/^extern void /static void /" \ + -e "s/^void /static void /" + echo +done diff --git a/ssh-keyscan.c b/ssh-keyscan.c index e01b6dd4d113..ab71adf9f828 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.137 2020/10/19 08:07:08 djm Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.138 2020/12/29 00:59:15 djm Exp $ */ /* * Copyright 1995, 1996 by David Mazieres . * @@ -293,7 +293,7 @@ keygrab_ssh2(con *c) # endif #endif c->c_ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client; - c->c_ssh->kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_client; + c->c_ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client; ssh_set_verify_host_key_callback(c->c_ssh, key_print_wrapper); /* * do the key-exchange until an error occurs or until diff --git a/ssh_api.c b/ssh_api.c index f1fd2d77ffa2..a65b1fa85d3f 100644 --- a/ssh_api.c +++ b/ssh_api.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh_api.c,v 1.23 2020/12/04 02:29:56 djm Exp $ */ +/* $OpenBSD: ssh_api.c,v 1.24 2020/12/29 00:59:15 djm Exp $ */ /* * Copyright (c) 2012 Markus Friedl. All rights reserved. * @@ -122,7 +122,7 @@ ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params) # endif #endif /* WITH_OPENSSL */ ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_server; - ssh->kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_server; + ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server; ssh->kex->load_host_public_key=&_ssh_host_public_key; ssh->kex->load_host_private_key=&_ssh_host_private_key; ssh->kex->sign=&_ssh_host_key_sign; @@ -140,7 +140,7 @@ ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params) # endif #endif /* WITH_OPENSSL */ ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client; - ssh->kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_client; + ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client; ssh->kex->verify_host_key =&_ssh_verify_host_key; } *sshp = ssh; diff --git a/sshconnect2.c b/sshconnect2.c index 95813b9b85a4..08e984f9292e 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.339 2020/12/22 00:15:23 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.340 2020/12/29 00:59:15 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -287,7 +287,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port, # endif #endif ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client; - ssh->kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_client; + ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client; ssh->kex->verify_host_key=&verify_host_key_callback; ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &ssh->kex->done); diff --git a/sshd.c b/sshd.c index 173fadd86c56..7e0087309949 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.565 2020/11/08 11:46:12 dtucker Exp $ */ +/* $OpenBSD: sshd.c,v 1.566 2020/12/29 00:59:15 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2380,7 +2380,7 @@ do_ssh2_kex(struct ssh *ssh) # endif #endif kex->kex[KEX_C25519_SHA256] = kex_gen_server; - kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_server; + kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server; kex->load_host_public_key=&get_hostkey_public_by_type; kex->load_host_private_key=&get_hostkey_private_by_type; kex->host_key_index=&get_hostkey_index; diff --git a/sshd_config.5 b/sshd_config.5 index a35c8d8cd5d5..2b872fcfa507 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.318 2020/10/16 14:34:33 jmc Exp $ -.Dd $Mdocdate: October 16 2020 $ +.\" $OpenBSD: sshd_config.5,v 1.319 2020/12/29 00:59:15 djm Exp $ +.Dd $Mdocdate: December 29 2020 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -949,7 +949,7 @@ ecdh-sha2-nistp384 .It ecdh-sha2-nistp521 .It -sntrup4591761x25519-sha512@tinyssh.org +sntrup761x25519-sha512@openssh.com .El .Pp The default is: From 659864fe81dbc57eeed3769c462679d83e026640 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 29 Dec 2020 01:02:15 +0000 Subject: [PATCH 0136/1788] upstream: Adapt to replacement of sntrup4591761x25519-sha512@tinyssh.org with sntrup761x25519-sha512@openssh.com. Also test sntrup761x25519-sha512@openssh.com in unittests/kex OpenBSD-Regress-ID: cfa3506b2b077a9cac1877fb521efd2641b6030c --- kexsntrup761x25519.c | 52 ++++++++++++++++---------------- regress/misc/kexfuzz/Makefile | 6 ++-- regress/unittests/kex/Makefile | 6 ++-- regress/unittests/kex/test_kex.c | 4 ++- 4 files changed, 35 insertions(+), 33 deletions(-) diff --git a/kexsntrup761x25519.c b/kexsntrup761x25519.c index 3a241fd41d00..3d5c6bdf04a5 100644 --- a/kexsntrup761x25519.c +++ b/kexsntrup761x25519.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexsntrup4591761x25519.c,v 1.4 2020/12/19 22:09:21 tobhe Exp $ */ +/* $OpenBSD: kexsntrup761x25519.c,v 1.1 2020/12/29 00:59:15 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl. All rights reserved. * @@ -38,7 +38,7 @@ #include "ssherr.h" int -kex_kem_sntrup4591761x25519_keypair(struct kex *kex) +kex_kem_sntrup761x25519_keypair(struct kex *kex) { struct sshbuf *buf = NULL; u_char *cp = NULL; @@ -47,15 +47,15 @@ kex_kem_sntrup4591761x25519_keypair(struct kex *kex) if ((buf = sshbuf_new()) == NULL) return SSH_ERR_ALLOC_FAIL; - need = crypto_kem_sntrup4591761_PUBLICKEYBYTES + CURVE25519_SIZE; + need = crypto_kem_sntrup761_PUBLICKEYBYTES + CURVE25519_SIZE; if ((r = sshbuf_reserve(buf, need, &cp)) != 0) goto out; - crypto_kem_sntrup4591761_keypair(cp, kex->sntrup4591761_client_key); + crypto_kem_sntrup761_keypair(cp, kex->sntrup761_client_key); #ifdef DEBUG_KEXECDH - dump_digest("client public key sntrup4591761:", cp, - crypto_kem_sntrup4591761_PUBLICKEYBYTES); + dump_digest("client public key sntrup761:", cp, + crypto_kem_sntrup761_PUBLICKEYBYTES); #endif - cp += crypto_kem_sntrup4591761_PUBLICKEYBYTES; + cp += crypto_kem_sntrup761_PUBLICKEYBYTES; kexc25519_keygen(kex->c25519_client_key, cp); #ifdef DEBUG_KEXECDH dump_digest("client public key c25519:", cp, CURVE25519_SIZE); @@ -68,7 +68,7 @@ kex_kem_sntrup4591761x25519_keypair(struct kex *kex) } int -kex_kem_sntrup4591761x25519_enc(struct kex *kex, +kex_kem_sntrup761x25519_enc(struct kex *kex, const struct sshbuf *client_blob, struct sshbuf **server_blobp, struct sshbuf **shared_secretp) { @@ -85,17 +85,17 @@ kex_kem_sntrup4591761x25519_enc(struct kex *kex, *shared_secretp = NULL; /* client_blob contains both KEM and ECDH client pubkeys */ - need = crypto_kem_sntrup4591761_PUBLICKEYBYTES + CURVE25519_SIZE; + need = crypto_kem_sntrup761_PUBLICKEYBYTES + CURVE25519_SIZE; if (sshbuf_len(client_blob) != need) { r = SSH_ERR_SIGNATURE_INVALID; goto out; } client_pub = sshbuf_ptr(client_blob); #ifdef DEBUG_KEXECDH - dump_digest("client public key sntrup4591761:", client_pub, - crypto_kem_sntrup4591761_PUBLICKEYBYTES); + dump_digest("client public key sntrup761:", client_pub, + crypto_kem_sntrup761_PUBLICKEYBYTES); dump_digest("client public key 25519:", - client_pub + crypto_kem_sntrup4591761_PUBLICKEYBYTES, + client_pub + crypto_kem_sntrup761_PUBLICKEYBYTES, CURVE25519_SIZE); #endif /* allocate buffer for concatenation of KEM key and ECDH shared key */ @@ -104,7 +104,7 @@ kex_kem_sntrup4591761x25519_enc(struct kex *kex, r = SSH_ERR_ALLOC_FAIL; goto out; } - if ((r = sshbuf_reserve(buf, crypto_kem_sntrup4591761_BYTES, + if ((r = sshbuf_reserve(buf, crypto_kem_sntrup761_BYTES, &kem_key)) != 0) goto out; /* allocate space for encrypted KEM key and ECDH pub key */ @@ -112,16 +112,16 @@ kex_kem_sntrup4591761x25519_enc(struct kex *kex, r = SSH_ERR_ALLOC_FAIL; goto out; } - need = crypto_kem_sntrup4591761_CIPHERTEXTBYTES + CURVE25519_SIZE; + need = crypto_kem_sntrup761_CIPHERTEXTBYTES + CURVE25519_SIZE; if ((r = sshbuf_reserve(server_blob, need, &ciphertext)) != 0) goto out; /* generate and encrypt KEM key with client key */ - crypto_kem_sntrup4591761_enc(ciphertext, kem_key, client_pub); + crypto_kem_sntrup761_enc(ciphertext, kem_key, client_pub); /* generate ECDH key pair, store server pubkey after ciphertext */ - server_pub = ciphertext + crypto_kem_sntrup4591761_CIPHERTEXTBYTES; + server_pub = ciphertext + crypto_kem_sntrup761_CIPHERTEXTBYTES; kexc25519_keygen(server_key, server_pub); /* append ECDH shared key */ - client_pub += crypto_kem_sntrup4591761_PUBLICKEYBYTES; + client_pub += crypto_kem_sntrup761_PUBLICKEYBYTES; if ((r = kexc25519_shared_key_ext(server_key, client_pub, buf, 1)) < 0) goto out; if ((r = ssh_digest_buffer(kex->hash_alg, buf, hash, sizeof(hash))) != 0) @@ -129,7 +129,7 @@ kex_kem_sntrup4591761x25519_enc(struct kex *kex, #ifdef DEBUG_KEXECDH dump_digest("server public key 25519:", server_pub, CURVE25519_SIZE); dump_digest("server cipher text:", ciphertext, - crypto_kem_sntrup4591761_CIPHERTEXTBYTES); + crypto_kem_sntrup761_CIPHERTEXTBYTES); dump_digest("server kem key:", kem_key, sizeof(kem_key)); dump_digest("concatenation of KEM key and ECDH shared key:", sshbuf_ptr(buf), sshbuf_len(buf)); @@ -155,7 +155,7 @@ kex_kem_sntrup4591761x25519_enc(struct kex *kex, } int -kex_kem_sntrup4591761x25519_dec(struct kex *kex, +kex_kem_sntrup761x25519_dec(struct kex *kex, const struct sshbuf *server_blob, struct sshbuf **shared_secretp) { struct sshbuf *buf = NULL; @@ -167,16 +167,16 @@ kex_kem_sntrup4591761x25519_dec(struct kex *kex, *shared_secretp = NULL; - need = crypto_kem_sntrup4591761_CIPHERTEXTBYTES + CURVE25519_SIZE; + need = crypto_kem_sntrup761_CIPHERTEXTBYTES + CURVE25519_SIZE; if (sshbuf_len(server_blob) != need) { r = SSH_ERR_SIGNATURE_INVALID; goto out; } ciphertext = sshbuf_ptr(server_blob); - server_pub = ciphertext + crypto_kem_sntrup4591761_CIPHERTEXTBYTES; + server_pub = ciphertext + crypto_kem_sntrup761_CIPHERTEXTBYTES; #ifdef DEBUG_KEXECDH dump_digest("server cipher text:", ciphertext, - crypto_kem_sntrup4591761_CIPHERTEXTBYTES); + crypto_kem_sntrup761_CIPHERTEXTBYTES); dump_digest("server public key c25519:", server_pub, CURVE25519_SIZE); #endif /* hash concatenation of KEM key and ECDH shared key */ @@ -184,18 +184,18 @@ kex_kem_sntrup4591761x25519_dec(struct kex *kex, r = SSH_ERR_ALLOC_FAIL; goto out; } - if ((r = sshbuf_reserve(buf, crypto_kem_sntrup4591761_BYTES, + if ((r = sshbuf_reserve(buf, crypto_kem_sntrup761_BYTES, &kem_key)) != 0) goto out; - decoded = crypto_kem_sntrup4591761_dec(kem_key, ciphertext, - kex->sntrup4591761_client_key); + decoded = crypto_kem_sntrup761_dec(kem_key, ciphertext, + kex->sntrup761_client_key); if ((r = kexc25519_shared_key_ext(kex->c25519_client_key, server_pub, buf, 1)) < 0) goto out; if ((r = ssh_digest_buffer(kex->hash_alg, buf, hash, sizeof(hash))) != 0) goto out; #ifdef DEBUG_KEXECDH - dump_digest("client kem key:", kem_key, crypto_kem_sntrup4591761_BYTES); + dump_digest("client kem key:", kem_key, crypto_kem_sntrup761_BYTES); dump_digest("concatenation of KEM key and ECDH shared key:", sshbuf_ptr(buf), sshbuf_len(buf)); #endif diff --git a/regress/misc/kexfuzz/Makefile b/regress/misc/kexfuzz/Makefile index ede5e2fb4bcf..733558d57077 100644 --- a/regress/misc/kexfuzz/Makefile +++ b/regress/misc/kexfuzz/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.8 2020/04/03 04:07:48 djm Exp $ +# $OpenBSD: Makefile,v 1.9 2020/12/29 01:02:15 djm Exp $ .include .include @@ -32,8 +32,8 @@ SRCS+= kexgexs.c SRCS+= kexc25519.c SRCS+= smult_curve25519_ref.c SRCS+= kexgen.c -SRCS+= kexsntrup4591761x25519.c -SRCS+= sntrup4591761.c +SRCS+= kexsntrup761x25519.c +SRCS+= sntrup761.c SRCS+=digest-openssl.c #SRCS+=digest-libc.c diff --git a/regress/unittests/kex/Makefile b/regress/unittests/kex/Makefile index 1c5d68ce8704..bff16ab4ef87 100644 --- a/regress/unittests/kex/Makefile +++ b/regress/unittests/kex/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.10 2020/04/06 09:43:56 dtucker Exp $ +# $OpenBSD: Makefile,v 1.11 2020/12/29 01:02:15 djm Exp $ PROG=test_kex SRCS=tests.c test_kex.c @@ -23,8 +23,8 @@ SRCS+= kexgexs.c SRCS+= kexc25519.c SRCS+= smult_curve25519_ref.c SRCS+= kexgen.c -SRCS+= kexsntrup4591761x25519.c -SRCS+= sntrup4591761.c +SRCS+= kexsntrup761x25519.c +SRCS+= sntrup761.c SRCS+= utf8.c SRCS+=digest-openssl.c diff --git a/regress/unittests/kex/test_kex.c b/regress/unittests/kex/test_kex.c index 0e7cd9e07a6c..06bd001aeaed 100644 --- a/regress/unittests/kex/test_kex.c +++ b/regress/unittests/kex/test_kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: test_kex.c,v 1.4 2019/01/21 12:35:20 djm Exp $ */ +/* $OpenBSD: test_kex.c,v 1.5 2020/12/29 01:02:15 djm Exp $ */ /* * Regress test KEX * @@ -152,6 +152,7 @@ do_kex_with_key(char *kex, int keytype, int bits) #endif /* OPENSSL_HAS_ECC */ #endif /* WITH_OPENSSL */ server2->kex->kex[KEX_C25519_SHA256] = kex_gen_server; + server2->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server; server2->kex->load_host_public_key = server->kex->load_host_public_key; server2->kex->load_host_private_key = server->kex->load_host_private_key; server2->kex->sign = server->kex->sign; @@ -201,5 +202,6 @@ kex_tests(void) do_kex("diffie-hellman-group-exchange-sha1"); do_kex("diffie-hellman-group14-sha1"); do_kex("diffie-hellman-group1-sha1"); + do_kex("sntrup761x25519-sha512@openssh.com"); #endif /* WITH_OPENSSL */ } From 5c1953bf98732da5a76c706714ac066dbfa015ac Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 29 Dec 2020 12:40:54 +1100 Subject: [PATCH 0137/1788] adapt KEX fuzzer to PQ kex change --- regress/misc/fuzz-harness/kex_fuzz.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regress/misc/fuzz-harness/kex_fuzz.cc b/regress/misc/fuzz-harness/kex_fuzz.cc index c1e2a2009076..c463cebac3d4 100644 --- a/regress/misc/fuzz-harness/kex_fuzz.cc +++ b/regress/misc/fuzz-harness/kex_fuzz.cc @@ -469,7 +469,7 @@ do_kex(struct shared_state *st, struct test_state *ts, const char *kex) static void kex_tests(struct shared_state *st, struct test_state *ts) { - do_kex(st, ts, "sntrup4591761x25519-sha512@tinyssh.org"); + do_kex(st, ts, "sntrup761x25519-sha512@openssh.com"); do_kex(st, ts, "curve25519-sha256@libssh.org"); do_kex(st, ts, "ecdh-sha2-nistp256"); do_kex(st, ts, "diffie-hellman-group1-sha1"); From 3d999be7b987c848feda718cfcfcdc005ddf670d Mon Sep 17 00:00:00 2001 From: "tobhe@openbsd.org" Date: Wed, 30 Dec 2020 14:13:28 +0000 Subject: [PATCH 0138/1788] upstream: Use int64_t for intermediate values in int32_MINMAX to prevent signed 32-bit integer overflow. Found by and ok djm@ ok markus@ OpenBSD-Commit-ID: 4f0704768e34cf45fdd792bac4011c6971881bb3 --- int32_minmax.inc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 int32_minmax.inc diff --git a/int32_minmax.inc b/int32_minmax.inc new file mode 100644 index 000000000000..2f6ff519518b --- /dev/null +++ b/int32_minmax.inc @@ -0,0 +1,20 @@ +/* $OpenBSD: int32_minmax.inc,v 1.1 2020/12/30 14:13:28 tobhe Exp $ */ + +/* + * Public Domain, Authors: + * - Daniel J. Bernstein + * - Chitchanok Chuengsatiansup + * - Tanja Lange + * - Christine van Vredendaal + */ + +#define int32_MINMAX(a,b) \ +do { \ + int64_t ab = (int64_t)b ^ (int64_t)a; \ + int64_t c = (int64_t)b - (int64_t)a; \ + c ^= ab & (c ^ b); \ + c >>= 31; \ + c &= ab; \ + a ^= c; \ + b ^= c; \ +} while(0) From 148b8a661c3f93e4b6d049ee902de3d521261fbc Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Thu, 31 Dec 2020 12:47:22 +1100 Subject: [PATCH 0139/1788] fix: missing pieces of previous commit --- sntrup761.c | 15 ++------------- sntrup761.sh | 4 ++-- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/sntrup761.c b/sntrup761.c index 21b59bd4bb27..db5aaacab7a7 100644 --- a/sntrup761.c +++ b/sntrup761.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sntrup761.c,v 1.1 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: sntrup761.c,v 1.2 2020/12/30 14:13:28 tobhe Exp $ */ /* * Public Domain, Authors: @@ -12,21 +12,10 @@ #include #include "crypto_api.h" +#include "int32_minmax.inc" #define CRYPTO_NAMESPACE(s) s -/* from supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc */ -#define int32_MINMAX(a,b) \ -do { \ - int32 ab = b ^ a; \ - int32 c = b - a; \ - c ^= ab & (c ^ b); \ - c >>= 31; \ - c &= ab; \ - a ^= c; \ - b ^= c; \ -} while(0) - /* from supercop-20201130/crypto_sort/int32/portable4/sort.c */ #define int32 crypto_int32 diff --git a/sntrup761.sh b/sntrup761.sh index 7fa9e3249047..5ddea77a05a0 100644 --- a/sntrup761.sh +++ b/sntrup761.sh @@ -1,5 +1,5 @@ #!/bin/sh -# $OpenBSD: sntrup761.sh,v 1.1 2020/12/29 00:59:15 djm Exp $ +# $OpenBSD: sntrup761.sh,v 1.2 2020/12/30 14:13:28 tobhe Exp $ # Placed in the Public Domain. # AUTHOR="supercop-20201130/crypto_kem/sntrup761/ref/implementors" @@ -21,7 +21,6 @@ FILES=" supercop-20201130/crypto_kem/sntrup761/ref/kem.c " SORT_I32=" - supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc supercop-20201130/crypto_sort/int32/portable4/sort.c " SORT_U32="supercop-20201130/crypto_sort/uint32/useint32/sort.c" @@ -39,6 +38,7 @@ echo ' */' echo echo '#include ' echo '#include "crypto_api.h"' +echo '#include "int32_minmax.inc"' echo echo '#define CRYPTO_NAMESPACE(s) s' echo From a23954eeb930ccc8a66a2710153730769dba31b6 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 1 Jan 2021 22:00:49 +1100 Subject: [PATCH 0140/1788] Undef int32 after sort routines. This prevents typedef'ing crypto_int32 twice, in sntrup761.c and crypto_api.h, which some compilers (at least some GCCs) don't accept. --- sntrup761.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sntrup761.c b/sntrup761.c index db5aaacab7a7..5b2456ad2a8d 100644 --- a/sntrup761.c +++ b/sntrup761.c @@ -92,6 +92,8 @@ static void crypto_sort_uint32(void *array,long long n) for (j = 0;j < n;++j) x[j] ^= 0x80000000; } +#undef int32 + /* from supercop-20201130/crypto_kem/sntrup761/ref/uint64.h */ #ifndef UINT64_H #define UINT64_H From 4d96a3ebab2224f17e639a15078e03be1ad3736d Mon Sep 17 00:00:00 2001 From: "tobhe@openbsd.org" Date: Sun, 3 Jan 2021 18:05:21 +0000 Subject: [PATCH 0141/1788] upstream: Prevent redefinition of `crypto_int32' error with gcc3. Fixes compilation on luna88k. Feedback millert@ Found by and ok aoyama@ OpenBSD-Commit-ID: f305ddfe575a26cc53431af3fde3f4aeebed9ba6 --- sntrup761.c | 3 +-- sntrup761.sh | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sntrup761.c b/sntrup761.c index 5b2456ad2a8d..c7ef95c7790e 100644 --- a/sntrup761.c +++ b/sntrup761.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sntrup761.c,v 1.2 2020/12/30 14:13:28 tobhe Exp $ */ +/* $OpenBSD: sntrup761.c,v 1.3 2021/01/03 18:05:21 tobhe Exp $ */ /* * Public Domain, Authors: @@ -160,7 +160,6 @@ typedef int16_t int16; #define int32_divmod_uint14 CRYPTO_NAMESPACE(int32_divmod_uint14) -typedef int32_t int32; /* assuming 1 <= m < 16384: diff --git a/sntrup761.sh b/sntrup761.sh index 5ddea77a05a0..3ab303ab7c23 100644 --- a/sntrup761.sh +++ b/sntrup761.sh @@ -1,5 +1,5 @@ #!/bin/sh -# $OpenBSD: sntrup761.sh,v 1.2 2020/12/30 14:13:28 tobhe Exp $ +# $OpenBSD: sntrup761.sh,v 1.3 2021/01/03 18:05:21 tobhe Exp $ # Placed in the Public Domain. # AUTHOR="supercop-20201130/crypto_kem/sntrup761/ref/implementors" @@ -60,6 +60,7 @@ for i in $FILES; do -v '#include' $i | \ sed -e "s/crypto_kem_/crypto_kem_sntrup761_/g" \ -e "s/^extern void /static void /" \ - -e "s/^void /static void /" + -e "s/^void /static void /" \ + -e "/^typedef int32_t int32;$/d" echo done From 91bac5e95b1b0debf9b2b4f05c20dcfa96b368b9 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 4 Jan 2021 21:58:58 +0000 Subject: [PATCH 0142/1788] upstream: estructure sntrup761.sh to process all files in a single list, which will make it easier to reorder. Re-inline int32_MINMAX. ok tobhe@ OpenBSD-Commit-ID: d145c6c19b08bb93c9e14bfaa7af589d90f144c0 --- int32_minmax.inc | 20 -------------------- sntrup761.c | 15 +++++++++++++-- sntrup761.sh | 39 ++++++++++++++++++++------------------- 3 files changed, 33 insertions(+), 41 deletions(-) diff --git a/int32_minmax.inc b/int32_minmax.inc index 2f6ff519518b..e69de29bb2d1 100644 --- a/int32_minmax.inc +++ b/int32_minmax.inc @@ -1,20 +0,0 @@ -/* $OpenBSD: int32_minmax.inc,v 1.1 2020/12/30 14:13:28 tobhe Exp $ */ - -/* - * Public Domain, Authors: - * - Daniel J. Bernstein - * - Chitchanok Chuengsatiansup - * - Tanja Lange - * - Christine van Vredendaal - */ - -#define int32_MINMAX(a,b) \ -do { \ - int64_t ab = (int64_t)b ^ (int64_t)a; \ - int64_t c = (int64_t)b - (int64_t)a; \ - c ^= ab & (c ^ b); \ - c >>= 31; \ - c &= ab; \ - a ^= c; \ - b ^= c; \ -} while(0) diff --git a/sntrup761.c b/sntrup761.c index c7ef95c7790e..de18ca9537ac 100644 --- a/sntrup761.c +++ b/sntrup761.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sntrup761.c,v 1.3 2021/01/03 18:05:21 tobhe Exp $ */ +/* $OpenBSD: sntrup761.c,v 1.4 2021/01/04 21:58:58 dtucker Exp $ */ /* * Public Domain, Authors: @@ -12,10 +12,21 @@ #include #include "crypto_api.h" -#include "int32_minmax.inc" #define CRYPTO_NAMESPACE(s) s +/* from supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc */ +#define int32_MINMAX(a,b) \ +do { \ + int64_t ab = (int64_t)b ^ (int64_t)a; \ + int64_t c = (int64_t)b - (int64_t)a; \ + c ^= ab & (c ^ b); \ + c >>= 31; \ + c &= ab; \ + a ^= c; \ + b ^= c; \ +} while(0) + /* from supercop-20201130/crypto_sort/int32/portable4/sort.c */ #define int32 crypto_int32 diff --git a/sntrup761.sh b/sntrup761.sh index 3ab303ab7c23..e7c5eed1415c 100644 --- a/sntrup761.sh +++ b/sntrup761.sh @@ -1,9 +1,12 @@ #!/bin/sh -# $OpenBSD: sntrup761.sh,v 1.3 2021/01/03 18:05:21 tobhe Exp $ +# $OpenBSD: sntrup761.sh,v 1.4 2021/01/04 21:58:58 dtucker Exp $ # Placed in the Public Domain. # AUTHOR="supercop-20201130/crypto_kem/sntrup761/ref/implementors" FILES=" + supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc + supercop-20201130/crypto_sort/int32/portable4/sort.c + supercop-20201130/crypto_sort/uint32/useint32/sort.c supercop-20201130/crypto_kem/sntrup761/ref/uint64.h supercop-20201130/crypto_kem/sntrup761/ref/uint16.h supercop-20201130/crypto_kem/sntrup761/ref/uint32.h @@ -20,10 +23,6 @@ FILES=" supercop-20201130/crypto_kem/sntrup761/ref/Encode.c supercop-20201130/crypto_kem/sntrup761/ref/kem.c " -SORT_I32=" - supercop-20201130/crypto_sort/int32/portable4/sort.c -" -SORT_U32="supercop-20201130/crypto_sort/uint32/useint32/sort.c" ### set -e @@ -38,29 +37,31 @@ echo ' */' echo echo '#include ' echo '#include "crypto_api.h"' -echo '#include "int32_minmax.inc"' echo echo '#define CRYPTO_NAMESPACE(s) s' echo -for i in $SORT_I32; do - echo "/* from $i */" - grep \ - -v '#include' $i | \ - sed -e "s/void crypto_sort/static void crypto_sort_int32/g" - echo -done -echo "/* from $SORT_U32 */" -grep \ - -v '#include' $SORT_U32 | \ - sed -e "s/void crypto_sort/static void crypto_sort_uint32/g" -echo for i in $FILES; do echo "/* from $i */" grep \ -v '#include' $i | \ - sed -e "s/crypto_kem_/crypto_kem_sntrup761_/g" \ + case "$i" in + # Use int64_t for intermediate values in int32_MINMAX to prevent signed + # 32-bit integer overflow when called by crypto_sort_uint32. + */int32_minmax.inc) + sed -e "s/int32 ab = b ^ a/int64_t ab = (int64_t)b ^ (int64_t)a/" \ + -e "s/int32 c = b - a/int64_t c = (int64_t)b - (int64_t)a/" + ;; + */int32/portable4/sort.c) + sed -e "s/void crypto_sort/static void crypto_sort_int32/g" + ;; + */uint32/useint32/sort.c) + sed -e "s/void crypto_sort/static void crypto_sort_uint32/g" + ;; + *) + sed -e "s/crypto_kem_/crypto_kem_sntrup761_/g" \ -e "s/^extern void /static void /" \ -e "s/^void /static void /" \ -e "/^typedef int32_t int32;$/d" + esac echo done From 16448ff529affda7e2a15ee7c3200793abde0759 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 8 Jan 2021 02:19:24 +0000 Subject: [PATCH 0143/1788] upstream: mention that DisableForwarding is valid in a sshd_config Match block reported by Fredrik Eriksson in bz3239 OpenBSD-Commit-ID: 3a71c3d84b597f5e43e4b40d5232797daf0993f6 --- sshd_config.5 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sshd_config.5 b/sshd_config.5 index 2b872fcfa507..ee9ff02f2dbb 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.319 2020/12/29 00:59:15 djm Exp $ -.Dd $Mdocdate: December 29 2020 $ +.\" $OpenBSD: sshd_config.5,v 1.320 2021/01/08 02:19:24 djm Exp $ +.Dd $Mdocdate: January 8 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -1186,6 +1186,7 @@ Available keywords are .Cm ClientAliveInterval , .Cm DenyGroups , .Cm DenyUsers , +.Cm DisableForwarding , .Cm ForceCommand , .Cm GatewayPorts , .Cm GSSAPIAuthentication , From 599df78f3008cf78af21f8977be3e1dd085f8e2e Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 8 Jan 2021 02:33:13 +0000 Subject: [PATCH 0144/1788] upstream: Update the sntrup761 creation script and generated code: - remove unneeded header files and typedefs and rely on crypto_api.h - add defines to map types used to the crypto_api ones instead of typedefs. This prevents typedef name collisions in -portable. - remove CRYPTO_NAMESPACE entirely instead of making it a no-op - delete unused functions and make the remaining ones that aren't exported static. ok djm@ OpenBSD-Commit-ID: 7b9d0cf3acd5a3c1091da8afe00c904d38cf5783 --- crypto_api.h | 4 +- sntrup761.c | 116 +++++---------------------------------------------- sntrup761.sh | 52 +++++++++++++++-------- 3 files changed, 49 insertions(+), 123 deletions(-) diff --git a/crypto_api.h b/crypto_api.h index 1827003e049b..5c3d97eaa401 100644 --- a/crypto_api.h +++ b/crypto_api.h @@ -1,4 +1,4 @@ -/* $OpenBSD: crypto_api.h,v 1.6 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: crypto_api.h,v 1.7 2021/01/08 02:33:13 dtucker Exp $ */ /* * Assembled from generated headers and source files by Markus Friedl. @@ -21,6 +21,8 @@ typedef int16_t crypto_int16; typedef uint16_t crypto_uint16; typedef int32_t crypto_int32; typedef uint32_t crypto_uint32; +typedef int64_t crypto_int64; +typedef uint64_t crypto_uint64; #define randombytes(buf, buf_len) arc4random_buf((buf), (buf_len)) #define small_random32() arc4random() diff --git a/sntrup761.c b/sntrup761.c index de18ca9537ac..01f1bc3445a1 100644 --- a/sntrup761.c +++ b/sntrup761.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sntrup761.c,v 1.4 2021/01/04 21:58:58 dtucker Exp $ */ +/* $OpenBSD: sntrup761.c,v 1.5 2021/01/08 02:33:13 dtucker Exp $ */ /* * Public Domain, Authors: @@ -13,7 +13,14 @@ #include #include "crypto_api.h" -#define CRYPTO_NAMESPACE(s) s +#define int8 crypto_int8 +#define uint8 crypto_uint8 +#define int16 crypto_int16 +#define uint16 crypto_uint16 +#define int32 crypto_int32 +#define uint32 crypto_uint32 +#define int64 crypto_int64 +#define uint64 crypto_uint64 /* from supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc */ #define int32_MINMAX(a,b) \ @@ -28,7 +35,6 @@ do { \ } while(0) /* from supercop-20201130/crypto_sort/int32/portable4/sort.c */ -#define int32 crypto_int32 static void crypto_sort_int32(void *array,long long n) @@ -103,88 +109,6 @@ static void crypto_sort_uint32(void *array,long long n) for (j = 0;j < n;++j) x[j] ^= 0x80000000; } -#undef int32 - -/* from supercop-20201130/crypto_kem/sntrup761/ref/uint64.h */ -#ifndef UINT64_H -#define UINT64_H - - -typedef uint64_t uint64; - -#endif - -/* from supercop-20201130/crypto_kem/sntrup761/ref/uint16.h */ -#ifndef UINT16_H -#define UINT16_H - -typedef uint16_t uint16; - -#endif - -/* from supercop-20201130/crypto_kem/sntrup761/ref/uint32.h */ -#ifndef UINT32_H -#define UINT32_H - -#define uint32_div_uint14 CRYPTO_NAMESPACE(uint32_div_uint14) -#define uint32_mod_uint14 CRYPTO_NAMESPACE(uint32_mod_uint14) -#define uint32_divmod_uint14 CRYPTO_NAMESPACE(uint32_divmod_uint14) - - -typedef uint32_t uint32; - -/* -assuming 1 <= m < 16384: -q = uint32_div_uint14(x,m) means q = x/m -r = uint32_mod_uint14(x,m) means r = x/m -uint32_moddiv_uint14(&q,&r,x,m) means q = x/m, r = x%m -*/ - -extern uint32 uint32_div_uint14(uint32,uint16); -extern uint16 uint32_mod_uint14(uint32,uint16); -static void uint32_divmod_uint14(uint32 *,uint16 *,uint32,uint16); - -#endif - -/* from supercop-20201130/crypto_kem/sntrup761/ref/int8.h */ -#ifndef INT8_H -#define INT8_H - -typedef int8_t int8; - -#endif - -/* from supercop-20201130/crypto_kem/sntrup761/ref/int16.h */ -#ifndef INT16_H -#define INT16_H - -typedef int16_t int16; - -#endif - -/* from supercop-20201130/crypto_kem/sntrup761/ref/int32.h */ -#ifndef INT32_H -#define INT32_H - -#define int32_div_uint14 CRYPTO_NAMESPACE(int32_div_uint14) -#define int32_mod_uint14 CRYPTO_NAMESPACE(int32_mod_uint14) -#define int32_divmod_uint14 CRYPTO_NAMESPACE(int32_divmod_uint14) - - - -/* -assuming 1 <= m < 16384: -q = int32_div_uint14(x,m) means q = x/m -r = int32_mod_uint14(x,m) means r = x/m -int32_moddiv_uint14(&q,&r,x,m) means q = x/m, r = x%m -*/ - -extern int32 int32_div_uint14(int32,uint16); -extern uint16 int32_mod_uint14(int32,uint16); -static void int32_divmod_uint14(int32 *,uint16 *,int32,uint16); - -#endif - /* from supercop-20201130/crypto_kem/sntrup761/ref/uint32.c */ /* @@ -239,15 +163,8 @@ static void uint32_divmod_uint14(uint32 *q,uint16 *r,uint32 x,uint16 m) *r = x; } -uint32 uint32_div_uint14(uint32 x,uint16 m) -{ - uint32 q; - uint16 r; - uint32_divmod_uint14(&q,&r,x,m); - return q; -} -uint16 uint32_mod_uint14(uint32 x,uint16 m) +static uint16 uint32_mod_uint14(uint32 x,uint16 m) { uint32 q; uint16 r; @@ -271,15 +188,8 @@ static void int32_divmod_uint14(int32 *q,uint16 *r,int32 x,uint16 m) *r = ur; *q = uq; } -int32 int32_div_uint14(int32 x,uint16 m) -{ - int32 q; - uint16 r; - int32_divmod_uint14(&q,&r,x,m); - return q; -} -uint16 int32_mod_uint14(int32 x,uint16 m) +static uint16 int32_mod_uint14(int32 x,uint16 m) { int32 q; uint16 r; @@ -365,12 +275,10 @@ uint16 int32_mod_uint14(int32 x,uint16 m) #ifndef Decode_H #define Decode_H -#define Decode CRYPTO_NAMESPACE(Decode) /* Decode(R,s,M,len) */ /* assumes 0 < M[i] < 16384 */ /* produces 0 <= R[i] < M[i] */ -static void Decode(uint16 *,const unsigned char *,const uint16 *,long long); #endif @@ -432,11 +340,9 @@ static void Decode(uint16 *out,const unsigned char *S,const uint16 *M,long long #ifndef Encode_H #define Encode_H -#define Encode CRYPTO_NAMESPACE(Encode) /* Encode(s,R,M,len) */ /* assumes 0 <= R[i] < M[i] < 16384 */ -static void Encode(unsigned char *,const uint16 *,const uint16 *,long long); #endif diff --git a/sntrup761.sh b/sntrup761.sh index e7c5eed1415c..5cd5f92c31d7 100644 --- a/sntrup761.sh +++ b/sntrup761.sh @@ -1,5 +1,5 @@ #!/bin/sh -# $OpenBSD: sntrup761.sh,v 1.4 2021/01/04 21:58:58 dtucker Exp $ +# $OpenBSD: sntrup761.sh,v 1.5 2021/01/08 02:33:13 dtucker Exp $ # Placed in the Public Domain. # AUTHOR="supercop-20201130/crypto_kem/sntrup761/ref/implementors" @@ -7,12 +7,6 @@ FILES=" supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc supercop-20201130/crypto_sort/int32/portable4/sort.c supercop-20201130/crypto_sort/uint32/useint32/sort.c - supercop-20201130/crypto_kem/sntrup761/ref/uint64.h - supercop-20201130/crypto_kem/sntrup761/ref/uint16.h - supercop-20201130/crypto_kem/sntrup761/ref/uint32.h - supercop-20201130/crypto_kem/sntrup761/ref/int8.h - supercop-20201130/crypto_kem/sntrup761/ref/int16.h - supercop-20201130/crypto_kem/sntrup761/ref/int32.h supercop-20201130/crypto_kem/sntrup761/ref/uint32.c supercop-20201130/crypto_kem/sntrup761/ref/int32.c supercop-20201130/crypto_kem/sntrup761/ref/paramsmenu.h @@ -38,30 +32,54 @@ echo echo '#include ' echo '#include "crypto_api.h"' echo -echo '#define CRYPTO_NAMESPACE(s) s' +# Map the types used in this code to the ones in crypto_api.h. We use #define +# instead of typedef since some systems have existing intXX types and do not +# permit multiple typedefs even if they do not conflict. +for t in int8 uint8 int16 uint16 int32 uint32 int64 uint64; do + echo "#define $t crypto_${t}" +done echo for i in $FILES; do echo "/* from $i */" - grep \ - -v '#include' $i | \ + # Changes to all files: + # - remove all includes, we inline everything required. + # - make functions not required elsewhere static. + # - rename the functions we do use. + # - remove unneccesary defines and externs. + sed -e "/#include/d" \ + -e "s/crypto_kem_/crypto_kem_sntrup761_/g" \ + -e "s/^void /static void /g" \ + -e "s/^int16 /static int16 /g" \ + -e "s/^uint16 /static uint16 /g" \ + -e "/^extern /d" \ + -e '/CRYPTO_NAMESPACE/d' \ + -e "/^#define int32 crypto_int32/d" \ + $i | \ case "$i" in # Use int64_t for intermediate values in int32_MINMAX to prevent signed # 32-bit integer overflow when called by crypto_sort_uint32. */int32_minmax.inc) sed -e "s/int32 ab = b ^ a/int64_t ab = (int64_t)b ^ (int64_t)a/" \ - -e "s/int32 c = b - a/int64_t c = (int64_t)b - (int64_t)a/" + -e "s/int32 c = b - a/int64_t c = (int64_t)b - (int64_t)a/" ;; */int32/portable4/sort.c) - sed -e "s/void crypto_sort/static void crypto_sort_int32/g" + sed -e "s/void crypto_sort/void crypto_sort_int32/g" ;; */uint32/useint32/sort.c) - sed -e "s/void crypto_sort/static void crypto_sort_uint32/g" + sed -e "s/void crypto_sort/void crypto_sort_uint32/g" + ;; + # Remove unused function to prevent warning. + */crypto_kem/sntrup761/ref/int32.c) + sed -e '/ int32_div_uint14/,/^}$/d' ;; + # Remove unused function to prevent warning. + */crypto_kem/sntrup761/ref/uint32.c) + sed -e '/ uint32_div_uint14/,/^}$/d' + ;; + # Default: pass through. *) - sed -e "s/crypto_kem_/crypto_kem_sntrup761_/g" \ - -e "s/^extern void /static void /" \ - -e "s/^void /static void /" \ - -e "/^typedef int32_t int32;$/d" + cat + ;; esac echo done From 64ddd0fe68c4a7acf99b78624f8af45e919cd317 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 8 Jan 2021 02:44:14 +0000 Subject: [PATCH 0145/1788] upstream: don't try to use timespeccmp(3) directly as a qsort(3) comparison function - it returns 0/1 and not the -1/0/1 that qsort expectes. fixes sftp "ls -ltr" under some circumstances. Based on patch by Masahiro Matsuya via bz3248. OpenBSD-Commit-ID: 65b5e9f18bb0d10573868c3516de6e5170adb163 --- sftp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sftp.c b/sftp.c index 248d452100d8..fb3c08d1958e 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.205 2020/12/04 02:41:10 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.206 2021/01/08 02:44:14 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -891,7 +891,10 @@ sglob_comp(const void *aa, const void *bb) return (rmul * strcmp(ap, bp)); else if (sort_flag & LS_TIME_SORT) { #if defined(HAVE_STRUCT_STAT_ST_MTIM) - return (rmul * timespeccmp(&as->st_mtim, &bs->st_mtim, <)); + if (timespeccmp(&as->st_mtim, &bs->st_mtim, ==)) + return 0; + return timespeccmp(&as->st_mtim, &bs->st_mtim, <) ? + rmul : -rmul; #elif defined(HAVE_STRUCT_STAT_ST_MTIME) return (rmul * NCMP(as->st_mtime, bs->st_mtime)); #else From 4c7af01f9dcc1606dec033e7665a042cb0d8ec52 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 8 Jan 2021 02:57:24 +0000 Subject: [PATCH 0146/1788] upstream: If a signature operation on a FIDO key fails with a "incorrect PIN" reason and no PIN was initially requested from the user, then request a PIN and retry the operation. This smoothes over a few corner cases including FIDO devices that require PINs for all hosted credentials, biometric FIDO devices that fall back to requiring PIN when reading the biometric failed, devices that don't implement reading credProtect status for downloaded keys and probably a few more cases that I haven't though of yet. ok dtucker@ OpenBSD-Commit-ID: 176db8518933d6a5bbf81a2e3cf62447158dc878 --- sshconnect2.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sshconnect2.c b/sshconnect2.c index 08e984f9292e..108fd9707128 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.340 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.341 2021/01/08 02:57:24 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -1221,7 +1221,7 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, const u_char *data, size_t datalen, u_int compat, const char *alg) { struct sshkey *sign_key = NULL, *prv = NULL; - int r = SSH_ERR_INTERNAL_ERROR; + int retried = 0, r = SSH_ERR_INTERNAL_ERROR; struct notifier_ctx *notifier = NULL; char *fp = NULL, *pin = NULL, *prompt = NULL; @@ -1255,6 +1255,7 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, if (sshkey_is_sk(sign_key)) { if ((sign_key->sk_flags & SSH_SK_USER_VERIFICATION_REQD)) { + retry_pin: xasprintf(&prompt, "Enter PIN for %s key %s: ", sshkey_type(sign_key), id->filename); pin = read_passphrase(prompt, 0); @@ -1275,8 +1276,16 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, if ((r = sshkey_sign(sign_key, sigp, lenp, data, datalen, alg, options.sk_provider, pin, compat)) != 0) { debug_fr(r, "sshkey_sign"); + if (pin == NULL && !retried && sshkey_is_sk(sign_key) && + r == SSH_ERR_KEY_WRONG_PASSPHRASE) { + notify_complete(notifier, NULL); + notifier = NULL; + retried = 1; + goto retry_pin; + } goto out; } + /* * PKCS#11 tokens may not support all signature algorithms, * so check what we get back. @@ -1291,7 +1300,7 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, free(prompt); if (pin != NULL) freezero(pin, strlen(pin)); - notify_complete(notifier, "User presence confirmed"); + notify_complete(notifier, r == 0 ? "User presence confirmed" : NULL); sshkey_free(prv); return r; } From c336644351fa3c715a08b7a292e309e72792e71e Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 8 Jan 2021 14:26:32 +1100 Subject: [PATCH 0147/1788] Add Ubuntu 16.04 and 20.04 test targets. --- .github/setup_ci.sh | 7 +++++ .github/workflows/c-cpp.yml | 56 +++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index e2474ccd7460..61349be11825 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -1,5 +1,12 @@ #!/usr/bin/env bash +case $(./config.guess) in +*-darwin*) + # no setup needed for Mac OS X + exit 0 + ;; +esac + TARGETS=$@ PACKAGES="" diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 2189756bbf8f..83fd02ba255c 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -7,9 +7,35 @@ on: branches: [ master ] jobs: - build: + ubuntu-20_04: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 + + strategy: + matrix: + configs: + - "" + - "--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin --with-selinux" + + steps: + - uses: actions/checkout@v2 + - name: setup CI system + run: ./.github/setup_ci.sh ${{ matrix.configs }} + - name: autoreconf + run: autoreconf + - name: configure + run: ./configure ${{ matrix.configs }} + - name: make + run: make + - name: make tests + run: ./.github/run_test.sh ${{ matrix.configs }} + env: + TEST_SSH_UNSAFE_PERMISSIONS: 1 + + + ubuntu-18_04: + + runs-on: ubuntu-18.04 strategy: matrix: @@ -37,3 +63,29 @@ jobs: run: ./.github/run_test.sh ${{ matrix.configs }} env: TEST_SSH_UNSAFE_PERMISSIONS: 1 + + + ubuntu-16_04: + + runs-on: ubuntu-16.04 + + strategy: + matrix: + configs: + - "" + - "--with-pam --with-selinux --with-libedit --with-kerberos5 " + + steps: + - uses: actions/checkout@v2 + - name: setup CI system + run: ./.github/setup_ci.sh ${{ matrix.configs }} + - name: autoreconf + run: autoreconf + - name: configure + run: ./configure ${{ matrix.configs }} + - name: make + run: make + - name: make tests + run: ./.github/run_test.sh ${{ matrix.configs }} + env: + TEST_SSH_UNSAFE_PERMISSIONS: 1 From 309b642e1442961b5e57701f095bcd4acd2bfb5f Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 8 Jan 2021 15:50:41 +1100 Subject: [PATCH 0148/1788] Run tests with sudo for better coverage. --- .github/run_test.sh | 2 ++ .github/workflows/c-cpp.yml | 3 +++ 2 files changed, 5 insertions(+) diff --git a/.github/run_test.sh b/.github/run_test.sh index 93c3a5e9ed9d..5a0e65385a0d 100755 --- a/.github/run_test.sh +++ b/.github/run_test.sh @@ -5,6 +5,8 @@ TARGETS=$@ TEST_TARGET="tests" LTESTS="" # all tests by default +[ -z "${SUDO}" ] || ${SUDO} mkdir -p /var/empty + set -ex for TARGET in $TARGETS; do diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 83fd02ba255c..5c5dd6bd80e8 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -30,6 +30,7 @@ jobs: - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: + SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 @@ -62,6 +63,7 @@ jobs: - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: + SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 @@ -88,4 +90,5 @@ jobs: - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: + SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 From 6cb52d5bf771f6769b630fce35a8e9b8e433044f Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 8 Jan 2021 04:49:13 +0000 Subject: [PATCH 0149/1788] upstream: make CheckHostIP default to 'no'. It doesn't provide any perceptible value and makes it much harder for hosts to change host keys, particularly ones that use IP-based load-balancing. ok dtucker@ OpenBSD-Commit-ID: 0db98413e82074f78c7d46784b1286d08aee78f0 --- readconf.c | 4 ++-- ssh_config.5 | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/readconf.c b/readconf.c index 2a7870a1d9df..37f92e25adba 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.347 2020/12/22 03:05:31 tb Exp $ */ +/* $OpenBSD: readconf.c,v 1.348 2021/01/08 04:49:13 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2297,7 +2297,7 @@ fill_default_options(Options * options) if (options->batch_mode == -1) options->batch_mode = 0; if (options->check_host_ip == -1) - options->check_host_ip = 1; + options->check_host_ip = 0; if (options->strict_host_key_checking == -1) options->strict_host_key_checking = SSH_STRICT_HOSTKEY_ASK; if (options->compression == -1) diff --git a/ssh_config.5 b/ssh_config.5 index 04da0575fa62..18a98a8f7aad 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.340 2020/12/22 07:40:26 jmc Exp $ -.Dd $Mdocdate: December 22 2020 $ +.\" $OpenBSD: ssh_config.5,v 1.341 2021/01/08 04:49:13 djm Exp $ +.Dd $Mdocdate: January 8 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -421,7 +421,6 @@ or .It Cm CheckHostIP If set to .Cm yes -(the default), .Xr ssh 1 will additionally check the host IP address in the .Pa known_hosts @@ -432,7 +431,8 @@ and will add addresses of destination hosts to in the process, regardless of the setting of .Cm StrictHostKeyChecking . If the option is set to -.Cm no , +.Cm no +(the default), the check will not be executed. .It Cm Ciphers Specifies the ciphers allowed and their order of preference. From b744914fcb76d70761f1b667de95841b3fc80a56 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 9 Jan 2021 00:36:05 +1100 Subject: [PATCH 0150/1788] Add test against Graphene hardened malloc. --- .github/setup_ci.sh | 12 +++++++++++- .github/workflows/c-cpp.yml | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 61349be11825..2d489b7edfdf 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -40,7 +40,10 @@ for TARGET in $TARGETS; do "--with-selinux") PACKAGES="$PACKAGES libselinux1-dev selinux-policy-dev" ;; - *) echo "Invalid option" + "--with-ldflags=-lhardened_malloc") + INSTALL_HARDENED_MALLOC=yes + ;; + *) echo "Invalid option '${TARGET}'" exit 1 ;; esac @@ -56,3 +59,10 @@ if [ "x" != "x$PACKAGES" ]; then sudo apt update -qq sudo apt install -qy $PACKAGES fi + +if [ "${INSTALL_HARDENED_MALLOC}" = "yes" ]; then + (cd ${HOME} && + git clone https://github.com/GrapheneOS/hardened_malloc.git && + cd ${HOME}/hardened_malloc && + make && sudo cp libhardened_malloc.so /usr/lib/) +fi diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 5c5dd6bd80e8..c019d96e7ad1 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -16,6 +16,7 @@ jobs: configs: - "" - "--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin --with-selinux" + - "--with-ldflags=-lhardened_malloc" steps: - uses: actions/checkout@v2 From d9a2bc71693ea27461a78110005d5a2d8b0c6a50 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sat, 9 Jan 2021 11:58:50 +0000 Subject: [PATCH 0151/1788] upstream: Move address handling functions out into their own file in order to reuse them for per-source maxstartups limiting. Supplement with some additional functions from djm's flowtools that we'll also need. ok djm@ (as part of a larger diff). OpenBSD-Commit-ID: e3e7d9ccc6c9b82e25cfef0ec83598e8e2327cbf --- Makefile.in | 2 +- addr.c | 421 ++++++++++++++++++++++++++++++++++++++++++++++++++++ addr.h | 60 ++++++++ addrmatch.c | 331 +---------------------------------------- 4 files changed, 484 insertions(+), 330 deletions(-) create mode 100644 addr.c create mode 100644 addr.h diff --git a/Makefile.in b/Makefile.in index dd3869812a7f..82321341f54a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -95,7 +95,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \ cipher-ctr.o cleanup.o \ compat.o fatal.o hostfile.o \ log.o match.o moduli.o nchan.o packet.o \ - readpass.o ttymodes.o xmalloc.o addrmatch.o \ + readpass.o ttymodes.o xmalloc.o addr.o addrmatch.o \ atomicio.o dispatch.o mac.o misc.o utf8.o \ monitor_fdpass.o rijndael.o ssh-dss.o ssh-ecdsa.o ssh-ecdsa-sk.o \ ssh-ed25519-sk.o ssh-rsa.o dh.o \ diff --git a/addr.c b/addr.c new file mode 100644 index 000000000000..d9b1927ee70c --- /dev/null +++ b/addr.c @@ -0,0 +1,421 @@ +/* $OpenBSD: addr.c,v 1.1 2021/01/09 11:58:50 dtucker Exp $ */ + +/* + * Copyright (c) 2004-2008 Damien Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "includes.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "addr.h" + +#define _SA(x) ((struct sockaddr *)(x)) + +int +addr_unicast_masklen(int af) +{ + switch (af) { + case AF_INET: + return 32; + case AF_INET6: + return 128; + default: + return -1; + } +} + +static inline int +masklen_valid(int af, u_int masklen) +{ + switch (af) { + case AF_INET: + return masklen <= 32 ? 0 : -1; + case AF_INET6: + return masklen <= 128 ? 0 : -1; + default: + return -1; + } +} + +int +addr_xaddr_to_sa(const struct xaddr *xa, struct sockaddr *sa, socklen_t *len, + u_int16_t port) +{ + struct sockaddr_in *in4 = (struct sockaddr_in *)sa; + struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)sa; + + if (xa == NULL || sa == NULL || len == NULL) + return -1; + + switch (xa->af) { + case AF_INET: + if (*len < sizeof(*in4)) + return -1; + memset(sa, '\0', sizeof(*in4)); + *len = sizeof(*in4); +#ifdef SOCK_HAS_LEN + in4->sin_len = sizeof(*in4); +#endif + in4->sin_family = AF_INET; + in4->sin_port = htons(port); + memcpy(&in4->sin_addr, &xa->v4, sizeof(in4->sin_addr)); + break; + case AF_INET6: + if (*len < sizeof(*in6)) + return -1; + memset(sa, '\0', sizeof(*in6)); + *len = sizeof(*in6); +#ifdef SOCK_HAS_LEN + in6->sin6_len = sizeof(*in6); +#endif + in6->sin6_family = AF_INET6; + in6->sin6_port = htons(port); + memcpy(&in6->sin6_addr, &xa->v6, sizeof(in6->sin6_addr)); + in6->sin6_scope_id = xa->scope_id; + break; + default: + return -1; + } + return 0; +} + +/* + * Convert struct sockaddr to struct xaddr + * Returns 0 on success, -1 on failure. + */ +int +addr_sa_to_xaddr(struct sockaddr *sa, socklen_t slen, struct xaddr *xa) +{ + struct sockaddr_in *in4 = (struct sockaddr_in *)sa; + struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)sa; + + memset(xa, '\0', sizeof(*xa)); + + switch (sa->sa_family) { + case AF_INET: + if (slen < (socklen_t)sizeof(*in4)) + return -1; + xa->af = AF_INET; + memcpy(&xa->v4, &in4->sin_addr, sizeof(xa->v4)); + break; + case AF_INET6: + if (slen < (socklen_t)sizeof(*in6)) + return -1; + xa->af = AF_INET6; + memcpy(&xa->v6, &in6->sin6_addr, sizeof(xa->v6)); +#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID + xa->scope_id = in6->sin6_scope_id; +#endif + break; + default: + return -1; + } + + return 0; +} + +int +addr_invert(struct xaddr *n) +{ + int i; + + if (n == NULL) + return -1; + + switch (n->af) { + case AF_INET: + n->v4.s_addr = ~n->v4.s_addr; + return 0; + case AF_INET6: + for (i = 0; i < 4; i++) + n->addr32[i] = ~n->addr32[i]; + return 0; + default: + return -1; + } +} + +/* + * Calculate a netmask of length 'l' for address family 'af' and + * store it in 'n'. + * Returns 0 on success, -1 on failure. + */ +int +addr_netmask(int af, u_int l, struct xaddr *n) +{ + int i; + + if (masklen_valid(af, l) != 0 || n == NULL) + return -1; + + memset(n, '\0', sizeof(*n)); + switch (af) { + case AF_INET: + n->af = AF_INET; + if (l == 0) + return 0; + n->v4.s_addr = htonl((0xffffffff << (32 - l)) & 0xffffffff); + return 0; + case AF_INET6: + n->af = AF_INET6; + for (i = 0; i < 4 && l >= 32; i++, l -= 32) + n->addr32[i] = 0xffffffffU; + if (i < 4 && l != 0) + n->addr32[i] = htonl((0xffffffff << (32 - l)) & + 0xffffffff); + return 0; + default: + return -1; + } +} + +int +addr_hostmask(int af, u_int l, struct xaddr *n) +{ + if (addr_netmask(af, l, n) == -1 || addr_invert(n) == -1) + return -1; + return 0; +} + +/* + * Perform logical AND of addresses 'a' and 'b', storing result in 'dst'. + * Returns 0 on success, -1 on failure. + */ +int +addr_and(struct xaddr *dst, const struct xaddr *a, const struct xaddr *b) +{ + int i; + + if (dst == NULL || a == NULL || b == NULL || a->af != b->af) + return -1; + + memcpy(dst, a, sizeof(*dst)); + switch (a->af) { + case AF_INET: + dst->v4.s_addr &= b->v4.s_addr; + return 0; + case AF_INET6: + dst->scope_id = a->scope_id; + for (i = 0; i < 4; i++) + dst->addr32[i] &= b->addr32[i]; + return 0; + default: + return -1; + } +} + +int +addr_cmp(const struct xaddr *a, const struct xaddr *b) +{ + int i; + + if (a->af != b->af) + return (a->af == AF_INET6 ? 1 : -1); + + switch (a->af) { + case AF_INET: + /* + * Can't just subtract here as 255.255.255.255 - 0.0.0.0 is + * too big to fit into a signed int + */ + if (a->v4.s_addr == b->v4.s_addr) + return 0; + return (ntohl(a->v4.s_addr) > ntohl(b->v4.s_addr) ? 1 : -1); + case AF_INET6:; + /* + * Do this a byte at a time to avoid the above issue and + * any endian problems + */ + for (i = 0; i < 16; i++) + if (a->addr8[i] - b->addr8[i] != 0) + return (a->addr8[i] - b->addr8[i]); + if (a->scope_id == b->scope_id) + return (0); + return (a->scope_id > b->scope_id ? 1 : -1); + default: + return (-1); + } +} + +int +addr_is_all0s(const struct xaddr *a) +{ + int i; + + switch (a->af) { + case AF_INET: + return (a->v4.s_addr == 0 ? 0 : -1); + case AF_INET6:; + for (i = 0; i < 4; i++) + if (a->addr32[i] != 0) + return -1; + return 0; + default: + return -1; + } +} + +/* + * Test whether host portion of address 'a', as determined by 'masklen' + * is all zeros. + * Returns 0 on if host portion of address is all-zeros, + * -1 if not all zeros or on failure. + */ +int +addr_host_is_all0s(const struct xaddr *a, u_int masklen) +{ + struct xaddr tmp_addr, tmp_mask, tmp_result; + + memcpy(&tmp_addr, a, sizeof(tmp_addr)); + if (addr_hostmask(a->af, masklen, &tmp_mask) == -1) + return -1; + if (addr_and(&tmp_result, &tmp_addr, &tmp_mask) == -1) + return -1; + return addr_is_all0s(&tmp_result); +} + +/* + * Parse string address 'p' into 'n' + * Returns 0 on success, -1 on failure. + */ +int +addr_pton(const char *p, struct xaddr *n) +{ + struct addrinfo hints, *ai; + + memset(&hints, '\0', sizeof(hints)); + hints.ai_flags = AI_NUMERICHOST; + + if (p == NULL || getaddrinfo(p, NULL, &hints, &ai) != 0) + return -1; + + if (ai == NULL || ai->ai_addr == NULL) + return -1; + + if (n != NULL && addr_sa_to_xaddr(ai->ai_addr, ai->ai_addrlen, + n) == -1) { + freeaddrinfo(ai); + return -1; + } + + freeaddrinfo(ai); + return 0; +} + +int +addr_sa_pton(const char *h, const char *s, struct sockaddr *sa, socklen_t slen) +{ + struct addrinfo hints, *ai; + + memset(&hints, '\0', sizeof(hints)); + hints.ai_flags = AI_NUMERICHOST; + + if (h == NULL || getaddrinfo(h, s, &hints, &ai) != 0) + return -1; + + if (ai == NULL || ai->ai_addr == NULL) + return -1; + + if (sa != NULL) { + if (slen < ai->ai_addrlen) + return -1; + memcpy(sa, &ai->ai_addr, ai->ai_addrlen); + } + + freeaddrinfo(ai); + return 0; +} + +int +addr_ntop(const struct xaddr *n, char *p, size_t len) +{ + struct sockaddr_storage ss; + socklen_t slen = sizeof(ss); + + if (addr_xaddr_to_sa(n, _SA(&ss), &slen, 0) == -1) + return -1; + if (n == NULL || p == NULL || len == 0) + return -1; + if (getnameinfo(_SA(&ss), slen, p, len, NULL, 0, + NI_NUMERICHOST) == -1) + return -1; + + return 0; +} + +/* + * Parse a CIDR address (x.x.x.x/y or xxxx:yyyy::/z). + * Return -1 on parse error, -2 on inconsistency or 0 on success. + */ +int +addr_pton_cidr(const char *p, struct xaddr *n, u_int *l) +{ + struct xaddr tmp; + long unsigned int masklen = 999; + char addrbuf[64], *mp, *cp; + + /* Don't modify argument */ + if (p == NULL || strlcpy(addrbuf, p, sizeof(addrbuf)) >= sizeof(addrbuf)) + return -1; + + if ((mp = strchr(addrbuf, '/')) != NULL) { + *mp = '\0'; + mp++; + masklen = strtoul(mp, &cp, 10); + if (*mp == '\0' || *cp != '\0' || masklen > 128) + return -1; + } + + if (addr_pton(addrbuf, &tmp) == -1) + return -1; + + if (mp == NULL) + masklen = addr_unicast_masklen(tmp.af); + if (masklen_valid(tmp.af, masklen) == -1) + return -2; + if (addr_host_is_all0s(&tmp, masklen) != 0) + return -2; + + if (n != NULL) + memcpy(n, &tmp, sizeof(*n)); + if (l != NULL) + *l = masklen; + + return 0; +} + +int +addr_netmatch(const struct xaddr *host, const struct xaddr *net, u_int masklen) +{ + struct xaddr tmp_mask, tmp_result; + + if (host->af != net->af) + return -1; + + if (addr_netmask(host->af, masklen, &tmp_mask) == -1) + return -1; + if (addr_and(&tmp_result, host, &tmp_mask) == -1) + return -1; + return addr_cmp(&tmp_result, net); +} diff --git a/addr.h b/addr.h new file mode 100644 index 000000000000..5eff02628592 --- /dev/null +++ b/addr.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2004,2005 Damien Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* Address handling routines */ + +#ifndef _ADDR_H +#define _ADDR_H + +#include +#include + +struct xaddr { + sa_family_t af; + union { + struct in_addr v4; + struct in6_addr v6; + u_int8_t addr8[16]; + u_int16_t addr16[8]; + u_int32_t addr32[4]; + } xa; /* 128-bit address */ + u_int32_t scope_id; /* iface scope id for v6 */ +#define v4 xa.v4 +#define v6 xa.v6 +#define addr8 xa.addr8 +#define addr16 xa.addr16 +#define addr32 xa.addr32 +}; + +int addr_unicast_masklen(int af); +int addr_xaddr_to_sa(const struct xaddr *xa, struct sockaddr *sa, + socklen_t *len, u_int16_t port); +int addr_sa_to_xaddr(struct sockaddr *sa, socklen_t slen, struct xaddr *xa); +int addr_netmask(int af, u_int l, struct xaddr *n); +int addr_hostmask(int af, u_int l, struct xaddr *n); +int addr_invert(struct xaddr *n); +int addr_pton(const char *p, struct xaddr *n); +int addr_sa_pton(const char *h, const char *s, struct sockaddr *sa, + socklen_t slen); +int addr_pton_cidr(const char *p, struct xaddr *n, u_int *l); +int addr_ntop(const struct xaddr *n, char *p, size_t len); +int addr_and(struct xaddr *dst, const struct xaddr *a, const struct xaddr *b); +int addr_cmp(const struct xaddr *a, const struct xaddr *b); +int addr_is_all0s(const struct xaddr *n); +int addr_host_is_all0s(const struct xaddr *n, u_int masklen); +int addr_netmatch(const struct xaddr *host, const struct xaddr *net, + u_int masklen); +#endif /* _ADDR_H */ diff --git a/addrmatch.c b/addrmatch.c index c86195d2836c..3215c653d36a 100644 --- a/addrmatch.c +++ b/addrmatch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: addrmatch.c,v 1.15 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: addrmatch.c,v 1.16 2021/01/09 11:58:50 dtucker Exp $ */ /* * Copyright (c) 2004-2008 Damien Miller @@ -29,337 +29,10 @@ #include #include +#include "addr.h" #include "match.h" #include "log.h" -struct xaddr { - sa_family_t af; - union { - struct in_addr v4; - struct in6_addr v6; - u_int8_t addr8[16]; - u_int32_t addr32[4]; - } xa; /* 128-bit address */ - u_int32_t scope_id; /* iface scope id for v6 */ -#define v4 xa.v4 -#define v6 xa.v6 -#define addr8 xa.addr8 -#define addr32 xa.addr32 -}; - -static int -addr_unicast_masklen(int af) -{ - switch (af) { - case AF_INET: - return 32; - case AF_INET6: - return 128; - default: - return -1; - } -} - -static inline int -masklen_valid(int af, u_int masklen) -{ - switch (af) { - case AF_INET: - return masklen <= 32 ? 0 : -1; - case AF_INET6: - return masklen <= 128 ? 0 : -1; - default: - return -1; - } -} - -/* - * Convert struct sockaddr to struct xaddr - * Returns 0 on success, -1 on failure. - */ -static int -addr_sa_to_xaddr(struct sockaddr *sa, socklen_t slen, struct xaddr *xa) -{ - struct sockaddr_in *in4 = (struct sockaddr_in *)sa; - struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)sa; - - memset(xa, '\0', sizeof(*xa)); - - switch (sa->sa_family) { - case AF_INET: - if (slen < (socklen_t)sizeof(*in4)) - return -1; - xa->af = AF_INET; - memcpy(&xa->v4, &in4->sin_addr, sizeof(xa->v4)); - break; - case AF_INET6: - if (slen < (socklen_t)sizeof(*in6)) - return -1; - xa->af = AF_INET6; - memcpy(&xa->v6, &in6->sin6_addr, sizeof(xa->v6)); -#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID - xa->scope_id = in6->sin6_scope_id; -#endif - break; - default: - return -1; - } - - return 0; -} - -/* - * Calculate a netmask of length 'l' for address family 'af' and - * store it in 'n'. - * Returns 0 on success, -1 on failure. - */ -static int -addr_netmask(int af, u_int l, struct xaddr *n) -{ - int i; - - if (masklen_valid(af, l) != 0 || n == NULL) - return -1; - - memset(n, '\0', sizeof(*n)); - switch (af) { - case AF_INET: - n->af = AF_INET; - if (l == 0) - return 0; - n->v4.s_addr = htonl((0xffffffff << (32 - l)) & 0xffffffff); - return 0; - case AF_INET6: - n->af = AF_INET6; - for (i = 0; i < 4 && l >= 32; i++, l -= 32) - n->addr32[i] = 0xffffffffU; - if (i < 4 && l != 0) - n->addr32[i] = htonl((0xffffffff << (32 - l)) & - 0xffffffff); - return 0; - default: - return -1; - } -} - -/* - * Perform logical AND of addresses 'a' and 'b', storing result in 'dst'. - * Returns 0 on success, -1 on failure. - */ -static int -addr_and(struct xaddr *dst, const struct xaddr *a, const struct xaddr *b) -{ - int i; - - if (dst == NULL || a == NULL || b == NULL || a->af != b->af) - return -1; - - memcpy(dst, a, sizeof(*dst)); - switch (a->af) { - case AF_INET: - dst->v4.s_addr &= b->v4.s_addr; - return 0; - case AF_INET6: - dst->scope_id = a->scope_id; - for (i = 0; i < 4; i++) - dst->addr32[i] &= b->addr32[i]; - return 0; - default: - return -1; - } -} - -/* - * Compare addresses 'a' and 'b' - * Return 0 if addresses are identical, -1 if (a < b) or 1 if (a > b) - */ -static int -addr_cmp(const struct xaddr *a, const struct xaddr *b) -{ - int i; - - if (a->af != b->af) - return a->af == AF_INET6 ? 1 : -1; - - switch (a->af) { - case AF_INET: - if (a->v4.s_addr == b->v4.s_addr) - return 0; - return ntohl(a->v4.s_addr) > ntohl(b->v4.s_addr) ? 1 : -1; - case AF_INET6: - for (i = 0; i < 16; i++) - if (a->addr8[i] - b->addr8[i] != 0) - return a->addr8[i] > b->addr8[i] ? 1 : -1; - if (a->scope_id == b->scope_id) - return 0; - return a->scope_id > b->scope_id ? 1 : -1; - default: - return -1; - } -} - -/* - * Parse string address 'p' into 'n' - * Returns 0 on success, -1 on failure. - */ -static int -addr_pton(const char *p, struct xaddr *n) -{ - struct addrinfo hints, *ai = NULL; - int ret = -1; - - memset(&hints, '\0', sizeof(hints)); - hints.ai_flags = AI_NUMERICHOST; - - if (p == NULL || getaddrinfo(p, NULL, &hints, &ai) != 0) - goto out; - if (ai == NULL || ai->ai_addr == NULL) - goto out; - if (n != NULL && addr_sa_to_xaddr(ai->ai_addr, ai->ai_addrlen, n) == -1) - goto out; - /* success */ - ret = 0; - out: - if (ai != NULL) - freeaddrinfo(ai); - return ret; -} - -/* - * Perform bitwise negation of address - * Returns 0 on success, -1 on failure. - */ -static int -addr_invert(struct xaddr *n) -{ - int i; - - if (n == NULL) - return (-1); - - switch (n->af) { - case AF_INET: - n->v4.s_addr = ~n->v4.s_addr; - return (0); - case AF_INET6: - for (i = 0; i < 4; i++) - n->addr32[i] = ~n->addr32[i]; - return (0); - default: - return (-1); - } -} - -/* - * Calculate a netmask of length 'l' for address family 'af' and - * store it in 'n'. - * Returns 0 on success, -1 on failure. - */ -static int -addr_hostmask(int af, u_int l, struct xaddr *n) -{ - if (addr_netmask(af, l, n) == -1 || addr_invert(n) == -1) - return (-1); - return (0); -} - -/* - * Test whether address 'a' is all zeros (i.e. 0.0.0.0 or ::) - * Returns 0 on if address is all-zeros, -1 if not all zeros or on failure. - */ -static int -addr_is_all0s(const struct xaddr *a) -{ - int i; - - switch (a->af) { - case AF_INET: - return (a->v4.s_addr == 0 ? 0 : -1); - case AF_INET6:; - for (i = 0; i < 4; i++) - if (a->addr32[i] != 0) - return (-1); - return (0); - default: - return (-1); - } -} - -/* - * Test whether host portion of address 'a', as determined by 'masklen' - * is all zeros. - * Returns 0 on if host portion of address is all-zeros, - * -1 if not all zeros or on failure. - */ -static int -addr_host_is_all0s(const struct xaddr *a, u_int masklen) -{ - struct xaddr tmp_addr, tmp_mask, tmp_result; - - memcpy(&tmp_addr, a, sizeof(tmp_addr)); - if (addr_hostmask(a->af, masklen, &tmp_mask) == -1) - return (-1); - if (addr_and(&tmp_result, &tmp_addr, &tmp_mask) == -1) - return (-1); - return (addr_is_all0s(&tmp_result)); -} - -/* - * Parse a CIDR address (x.x.x.x/y or xxxx:yyyy::/z). - * Return -1 on parse error, -2 on inconsistency or 0 on success. - */ -static int -addr_pton_cidr(const char *p, struct xaddr *n, u_int *l) -{ - struct xaddr tmp; - long unsigned int masklen = 999; - char addrbuf[64], *mp, *cp; - - /* Don't modify argument */ - if (p == NULL || strlcpy(addrbuf, p, sizeof(addrbuf)) >= sizeof(addrbuf)) - return -1; - - if ((mp = strchr(addrbuf, '/')) != NULL) { - *mp = '\0'; - mp++; - masklen = strtoul(mp, &cp, 10); - if (*mp == '\0' || *cp != '\0' || masklen > 128) - return -1; - } - - if (addr_pton(addrbuf, &tmp) == -1) - return -1; - - if (mp == NULL) - masklen = addr_unicast_masklen(tmp.af); - if (masklen_valid(tmp.af, masklen) == -1) - return -2; - if (addr_host_is_all0s(&tmp, masklen) != 0) - return -2; - - if (n != NULL) - memcpy(n, &tmp, sizeof(*n)); - if (l != NULL) - *l = masklen; - - return 0; -} - -static int -addr_netmatch(const struct xaddr *host, const struct xaddr *net, u_int masklen) -{ - struct xaddr tmp_mask, tmp_result; - - if (host->af != net->af) - return -1; - - if (addr_netmask(host->af, masklen, &tmp_mask) == -1) - return -1; - if (addr_and(&tmp_result, host, &tmp_mask) == -1) - return -1; - return addr_cmp(&tmp_result, net); -} - /* * Match "addr" against list pattern list "_list", which may contain a * mix of CIDR addresses and old-school wildcards. From 3a923129534b007c2e24176a8655dec74eca9c46 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sat, 9 Jan 2021 12:10:02 +0000 Subject: [PATCH 0152/1788] upstream: Add PerSourceMaxStartups and PerSourceNetBlockSize options which provide more fine grained MaxStartups limits. Man page help jmc@, feedback & ok djm@ OpenBSD-Commit-ID: e2f68664e3d02c0895b35aa751c48a2af622047b --- Makefile.in | 2 +- servconf.c | 61 +++++++++++++++++++++- servconf.h | 5 +- srclimit.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++ srclimit.h | 18 +++++++ sshd.c | 20 ++++++-- sshd_config.5 | 21 +++++++- 7 files changed, 256 insertions(+), 11 deletions(-) create mode 100644 srclimit.c create mode 100644 srclimit.h diff --git a/Makefile.in b/Makefile.in index 82321341f54a..76d3197fc361 100644 --- a/Makefile.in +++ b/Makefile.in @@ -125,7 +125,7 @@ SSHDOBJS=sshd.o auth-rhosts.o auth-passwd.o \ monitor.o monitor_wrap.o auth-krb5.o \ auth2-gss.o gss-serv.o gss-serv-krb5.o \ loginrec.o auth-pam.o auth-shadow.o auth-sia.o md5crypt.o \ - sftp-server.o sftp-common.o \ + srclimit.o sftp-server.o sftp-common.o \ sandbox-null.o sandbox-rlimit.o sandbox-systrace.o sandbox-darwin.o \ sandbox-seccomp-filter.o sandbox-capsicum.o sandbox-pledge.o \ sandbox-solaris.o uidswap.o $(SKOBJS) diff --git a/servconf.c b/servconf.c index ea7625d3631f..b8d2138f0172 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.371 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: servconf.c,v 1.372 2021/01/09 12:10:02 dtucker Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -165,6 +165,9 @@ initialize_server_options(ServerOptions *options) options->max_startups_begin = -1; options->max_startups_rate = -1; options->max_startups = -1; + options->per_source_max_startups = -1; + options->per_source_masklen_ipv4 = -1; + options->per_source_masklen_ipv6 = -1; options->max_authtries = -1; options->max_sessions = -1; options->banner = NULL; @@ -419,6 +422,12 @@ fill_default_server_options(ServerOptions *options) options->max_startups_rate = 30; /* 30% */ if (options->max_startups_begin == -1) options->max_startups_begin = 10; + if (options->per_source_max_startups == -1) + options->per_source_max_startups = INT_MAX; + if (options->per_source_masklen_ipv4 == -1) + options->per_source_masklen_ipv4 = 32; + if (options->per_source_masklen_ipv6 == -1) + options->per_source_masklen_ipv6 = 128; if (options->max_authtries == -1) options->max_authtries = DEFAULT_AUTH_FAIL_MAX; if (options->max_sessions == -1) @@ -522,7 +531,7 @@ typedef enum { sXAuthLocation, sSubsystem, sMaxStartups, sMaxAuthTries, sMaxSessions, sBanner, sUseDNS, sHostbasedAuthentication, sHostbasedUsesNameFromPacketOnly, sHostbasedAcceptedKeyTypes, - sHostKeyAlgorithms, + sHostKeyAlgorithms, sPerSourceMaxStartups, sPerSourceNetBlockSize, sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, sGssAuthentication, sGssCleanupCreds, sGssStrictAcceptor, sAcceptEnv, sSetEnv, sPermitTunnel, @@ -648,6 +657,8 @@ static struct { { "gatewayports", sGatewayPorts, SSHCFG_ALL }, { "subsystem", sSubsystem, SSHCFG_GLOBAL }, { "maxstartups", sMaxStartups, SSHCFG_GLOBAL }, + { "persourcemaxstartups", sPerSourceMaxStartups, SSHCFG_GLOBAL }, + { "persourcenetblocksize", sPerSourceNetBlockSize, SSHCFG_GLOBAL }, { "maxauthtries", sMaxAuthTries, SSHCFG_ALL }, { "maxsessions", sMaxSessions, SSHCFG_ALL }, { "banner", sBanner, SSHCFG_ALL }, @@ -1891,6 +1902,45 @@ process_server_config_line_depth(ServerOptions *options, char *line, options->max_startups = options->max_startups_begin; break; + case sPerSourceNetBlockSize: + arg = strdelim(&cp); + if (!arg || *arg == '\0') + fatal("%s line %d: Missing PerSourceNetBlockSize spec.", + filename, linenum); + switch (n = sscanf(arg, "%d:%d", &value, &value2)) { + case 2: + if (value2 < 0 || value2 > 128) + n = -1; + /* FALLTHROUGH */ + case 1: + if (value < 0 || value > 32) + n = -1; + } + if (n != 1 && n != 2) + fatal("%s line %d: Invalid PerSourceNetBlockSize" + " spec.", filename, linenum); + if (*activep) { + options->per_source_masklen_ipv4 = value; + options->per_source_masklen_ipv6 = value2; + } + break; + + case sPerSourceMaxStartups: + arg = strdelim(&cp); + if (!arg || *arg == '\0') + fatal("%s line %d: Missing PerSourceMaxStartups spec.", + filename, linenum); + if (strcmp(arg, "none") == 0) { /* no limit */ + value = INT_MAX; + } else { + if ((errstr = atoi_err(arg, &value)) != NULL) + fatal("%s line %d: integer value %s.", + filename, linenum, errstr); + } + if (*activep) + options->per_source_max_startups = value; + break; + case sMaxAuthTries: intptr = &options->max_authtries; goto parse_int; @@ -2905,6 +2955,13 @@ dump_config(ServerOptions *o) printf("maxstartups %d:%d:%d\n", o->max_startups_begin, o->max_startups_rate, o->max_startups); + printf("persourcemaxstartups "); + if (o->per_source_max_startups == INT_MAX) + printf("none\n"); + else + printf("%d\n", o->per_source_max_startups); + printf("persourcnetblocksize %d:%d\n", o->per_source_masklen_ipv4, + o->per_source_masklen_ipv6); s = NULL; for (i = 0; tunmode_desc[i].val != -1; i++) { diff --git a/servconf.h b/servconf.h index a0efe20fce16..e0c3ff60ae23 100644 --- a/servconf.h +++ b/servconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: servconf.h,v 1.148 2020/10/29 03:13:06 djm Exp $ */ +/* $OpenBSD: servconf.h,v 1.149 2021/01/09 12:10:02 dtucker Exp $ */ /* * Author: Tatu Ylonen @@ -177,6 +177,9 @@ typedef struct { int max_startups_begin; int max_startups_rate; int max_startups; + int per_source_max_startups; + int per_source_masklen_ipv4; + int per_source_masklen_ipv6; int max_authtries; int max_sessions; char *banner; /* SSH-2 banner message */ diff --git a/srclimit.c b/srclimit.c new file mode 100644 index 000000000000..e2446f13130a --- /dev/null +++ b/srclimit.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2020 Darren Tucker + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "includes.h" + +#include +#include + +#include +#include +#include +#include + +#include "addr.h" +#include "canohost.h" +#include "log.h" +#include "misc.h" +#include "srclimit.h" +#include "xmalloc.h" + +static int max_children, max_persource, ipv4_masklen, ipv6_masklen; + +/* Per connection state, used to enforce unauthenticated connection limit. */ +static struct child_info { + int id; + struct xaddr addr; +} *child; + +void +srclimit_init(int max, int persource, int ipv4len, int ipv6len) +{ + int i; + + max_children = max; + ipv4_masklen = ipv4len; + ipv6_masklen = ipv6len; + max_persource = persource; + if (max_persource == INT_MAX) /* no limit */ + return; + debug("%s: max connections %d, per source %d, masks %d,%d", __func__, + max, persource, ipv4len, ipv6len); + if (max <= 0) + fatal("%s: invalid number of sockets: %d", __func__, max); + child = xcalloc(max_children, sizeof(*child)); + for (i = 0; i < max_children; i++) + child[i].id = -1; +} + +/* returns 1 if connection allowed, 0 if not allowed. */ +int +srclimit_check_allow(int sock, int id) +{ + struct xaddr xa, xb, xmask; + struct sockaddr_storage addr; + socklen_t addrlen = sizeof(addr); + struct sockaddr *sa = (struct sockaddr *)&addr; + int i, bits, first_unused, count = 0; + char xas[NI_MAXHOST]; + + if (max_persource == INT_MAX) /* no limit */ + return 1; + + debug("%s: sock %d id %d limit %d", __func__, sock, id, max_persource); + if (getpeername(sock, sa, &addrlen) != 0) + return 1; /* not remote socket? */ + if (addr_sa_to_xaddr(sa, addrlen, &xa) != 0) + return 1; /* unknown address family? */ + + /* Mask address off address to desired size. */ + bits = xa.af == AF_INET ? ipv4_masklen : ipv6_masklen; + if (addr_netmask(xa.af, bits, &xmask) != 0 || + addr_and(&xb, &xa, &xmask) != 0) { + debug3("%s: invalid mask %d bits", __func__, bits); + return 1; + } + + first_unused = max_children; + /* Count matching entries and find first unused one. */ + for (i = 0; i < max_children; i++) { + if (child[i].id == -1) { + if (i < first_unused) + first_unused = i; + } else if (addr_cmp(&child[i].addr, &xb) == 0) { + count++; + } + } + if (addr_ntop(&xa, xas, sizeof(xas)) != 0) { + debug3("%s: addr ntop failed", __func__); + return 1; + } + debug3("%s: new unauthenticated connection from %s/%d, at %d of %d", + __func__, xas, bits, count, max_persource); + + if (first_unused == max_children) { /* no free slot found */ + debug3("%s: no free slot", __func__); + return 0; + } + if (first_unused < 0 || first_unused >= max_children) + fatal("%s: internal error: first_unused out of range", + __func__); + + if (count >= max_persource) + return 0; + + /* Connection allowed, store masked address. */ + child[first_unused].id = id; + memcpy(&child[first_unused].addr, &xb, sizeof(xb)); + return 1; +} + +void +srclimit_done(int id) +{ + int i; + + if (max_persource == INT_MAX) /* no limit */ + return; + + debug("%s: id %d", __func__, id); + /* Clear corresponding state entry. */ + for (i = 0; i < max_children; i++) { + if (child[i].id == id) { + child[i].id = -1; + return; + } + } +} diff --git a/srclimit.h b/srclimit.h new file mode 100644 index 000000000000..6e04f32b3ff7 --- /dev/null +++ b/srclimit.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2020 Darren Tucker + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +void srclimit_init(int, int, int, int); +int srclimit_check_allow(int, int); +void srclimit_done(int); diff --git a/sshd.c b/sshd.c index 7e0087309949..1333ef5e691f 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.566 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: sshd.c,v 1.567 2021/01/09 12:10:02 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -123,6 +123,7 @@ #include "version.h" #include "ssherr.h" #include "sk-api.h" +#include "srclimit.h" /* Re-exec fds */ #define REEXEC_DEVCRYPTO_RESERVED_FD (STDERR_FILENO + 1) @@ -853,7 +854,7 @@ should_drop_connection(int startups) * while in that state. */ static int -drop_connection(int sock, int startups) +drop_connection(int sock, int startups, int notify_pipe) { char *laddr, *raddr; const char msg[] = "Exceeded MaxStartups\r\n"; @@ -863,7 +864,8 @@ drop_connection(int sock, int startups) time_t now; now = monotime(); - if (!should_drop_connection(startups)) { + if (!should_drop_connection(startups) && + srclimit_check_allow(sock, notify_pipe) == 1) { if (last_drop != 0 && startups < options.max_startups_begin - 1) { /* XXX maybe need better hysteresis here */ @@ -1109,6 +1111,10 @@ server_listen(void) { u_int i; + /* Initialise per-source limit tracking. */ + srclimit_init(options.max_startups, options.per_source_max_startups, + options.per_source_masklen_ipv4, options.per_source_masklen_ipv6); + for (i = 0; i < options.num_listen_addrs; i++) { listen_on_addrs(&options.listen_addrs[i]); freeaddrinfo(options.listen_addrs[i].addrs); @@ -1215,6 +1221,7 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s) case 0: /* child exited or completed auth */ close(startup_pipes[i]); + srclimit_done(startup_pipes[i]); startup_pipes[i] = -1; startups--; if (startup_flags[i]) @@ -1245,9 +1252,12 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s) continue; } if (unset_nonblock(*newsock) == -1 || - drop_connection(*newsock, startups) || - pipe(startup_p) == -1) { + pipe(startup_p) == -1) + continue; + if (drop_connection(*newsock, startups, startup_p[0])) { close(*newsock); + close(startup_p[0]); + close(startup_p[1]); continue; } diff --git a/sshd_config.5 b/sshd_config.5 index ee9ff02f2dbb..8f0a5ccf5b11 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.320 2021/01/08 02:19:24 djm Exp $ -.Dd $Mdocdate: January 8 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.321 2021/01/09 12:10:02 dtucker Exp $ +.Dd $Mdocdate: January 9 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -1434,6 +1434,23 @@ SSH daemon, or to not write one. The default is .Pa /var/run/sshd.pid . +.It Cm PerSourceMaxStartups +Specifies the number of unauthenticated connections allowed from a +given source address, or +.Dq none +if there is no limit. +This limit is applied in addition to +.Cm MaxStartups , +whichever is lower. +The default is +.Cm none . +.It Cm PerSourceNetBlockSize +Specifies the number of bits of source address that are grouped together +for the purposes of applying PerSourceMaxStartups limits. +Values for IPv4 and optionally IPv6 may be specified, separated by a colon. +The default is +.Cm 32:128 +which means each address is considered individually. .It Cm Port Specifies the port number that .Xr sshd 8 From 7a57adb8b07b2ad0aead4b2e09ee18edc04d0481 Mon Sep 17 00:00:00 2001 From: "jmc@openbsd.org" Date: Sat, 9 Jan 2021 12:51:12 +0000 Subject: [PATCH 0153/1788] upstream: add a comma to previous; OpenBSD-Commit-ID: 9139433701c0aa86a0d3a6c7afe10d1c9c2e0869 --- sshd_config.5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sshd_config.5 b/sshd_config.5 index 8f0a5ccf5b11..0d183175abb5 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.321 2021/01/09 12:10:02 dtucker Exp $ +.\" $OpenBSD: sshd_config.5,v 1.322 2021/01/09 12:51:12 jmc Exp $ .Dd $Mdocdate: January 9 2021 $ .Dt SSHD_CONFIG 5 .Os @@ -1449,7 +1449,7 @@ Specifies the number of bits of source address that are grouped together for the purposes of applying PerSourceMaxStartups limits. Values for IPv4 and optionally IPv6 may be specified, separated by a colon. The default is -.Cm 32:128 +.Cm 32:128 , which means each address is considered individually. .It Cm Port Specifies the port number that From 6d30673fedec2d251f4962c526fd0451f70c4d97 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 11 Jan 2021 02:12:57 +0000 Subject: [PATCH 0154/1788] upstream: Change convtime() from returning long to returning int. On platforms where sizeof(int) != sizeof(long), convtime could accept values >MAX_INT which subsequently truncate when stored in an int during config parsing. bz#3250, ok djm@ OpenBSD-Commit-ID: 8fc932683d6b4660d52f50911d62bd6639c5db31 --- misc.c | 10 +++++----- misc.h | 4 ++-- ssh-add.c | 10 +++++----- ssh-agent.c | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/misc.c b/misc.c index 68feebf749fc..a4a3f2e24f52 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.157 2020/12/22 00:12:22 djm Exp $ */ +/* $OpenBSD: misc.c,v 1.158 2021/01/11 02:12:57 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -543,7 +543,7 @@ a2tun(const char *s, int *remote) * * Return -1 if time string is invalid. */ -long +int convtime(const char *s) { long total, secs, multiplier; @@ -560,7 +560,7 @@ convtime(const char *s) while (*p) { secs = strtol(p, &endp, 10); if (p == endp || - (errno == ERANGE && (secs == LONG_MIN || secs == LONG_MAX)) || + (errno == ERANGE && (secs == INT_MIN || secs == INT_MAX)) || secs < 0) return -1; @@ -591,10 +591,10 @@ convtime(const char *s) default: return -1; } - if (secs >= LONG_MAX / multiplier) + if (secs >= INT_MAX / multiplier) return -1; secs *= multiplier; - if (total >= LONG_MAX - secs) + if (total >= INT_MAX - secs) return -1; total += secs; if (total < 0) diff --git a/misc.h b/misc.h index c60fe202aa58..558ba5a3e072 100644 --- a/misc.h +++ b/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.91 2020/12/22 00:12:22 djm Exp $ */ +/* $OpenBSD: misc.h,v 1.92 2021/01/11 02:12:57 dtucker Exp $ */ /* * Author: Tatu Ylonen @@ -67,7 +67,7 @@ char *colon(char *); int parse_user_host_path(const char *, char **, char **, char **); int parse_user_host_port(const char *, char **, char **, int *); int parse_uri(const char *, const char *, char **, char **, int *, char **); -long convtime(const char *); +int convtime(const char *); const char *fmt_timeframe(time_t t); char *tilde_expand_filename(const char *, uid_t); diff --git a/ssh-add.c b/ssh-add.c index 28d5bea38fed..7edb9f9a7be9 100644 --- a/ssh-add.c +++ b/ssh-add.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-add.c,v 1.158 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh-add.c,v 1.159 2021/01/11 02:12:58 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -91,7 +91,7 @@ static char *default_files[] = { static int fingerprint_hash = SSH_FP_HASH_DEFAULT; /* Default lifetime (0 == forever) */ -static long lifetime = 0; +static int lifetime = 0; /* User has to confirm key use */ static int confirm = 0; @@ -372,7 +372,7 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag, filename, comment); if (lifetime != 0) { fprintf(stderr, - "Lifetime set to %ld seconds\n", lifetime); + "Lifetime set to %d seconds\n", lifetime); } if (confirm != 0) { fprintf(stderr, "The user must confirm " @@ -427,7 +427,7 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag, fprintf(stderr, "Certificate added: %s (%s)\n", certpath, private->cert->key_id); if (lifetime != 0) { - fprintf(stderr, "Lifetime set to %ld seconds\n", + fprintf(stderr, "Lifetime set to %d seconds\n", lifetime); } if (confirm != 0) { @@ -610,7 +610,7 @@ load_resident_keys(int agent_fd, const char *skprovider, int qflag) sshkey_type(keys[i]), fp); if (lifetime != 0) { fprintf(stderr, - "Lifetime set to %ld seconds\n", lifetime); + "Lifetime set to %d seconds\n", lifetime); } if (confirm != 0) { fprintf(stderr, "The user must confirm " diff --git a/ssh-agent.c b/ssh-agent.c index 93f04f265fe0..d231182d0978 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.267 2020/11/08 22:37:24 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.268 2021/01/11 02:12:58 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -164,7 +164,7 @@ u_char lock_salt[LOCK_SALT_SIZE]; extern char *__progname; /* Default lifetime in seconds (0 == forever) */ -static long lifetime = 0; +static int lifetime = 0; static int fingerprint_hash = SSH_FP_HASH_DEFAULT; From b08ef25552443e94c0857d5e3806dd019ccc55d7 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sat, 9 Jan 2021 12:24:30 +0000 Subject: [PATCH 0155/1788] upstream: Update unittests for addr.c/addrmatch.c split. OpenBSD-Regress-ID: de2b415fb7af084a91c6ef147a90482d8f771eef --- regress/unittests/authopt/Makefile | 4 ++-- regress/unittests/conversion/Makefile | 4 ++-- regress/unittests/hostkeys/Makefile | 4 ++-- regress/unittests/kex/Makefile | 4 ++-- regress/unittests/match/Makefile | 4 ++-- regress/unittests/misc/Makefile | 3 ++- regress/unittests/sshbuf/Makefile | 4 ++-- regress/unittests/sshkey/Makefile | 4 ++-- regress/unittests/sshsig/Makefile | 4 ++-- 9 files changed, 18 insertions(+), 17 deletions(-) diff --git a/regress/unittests/authopt/Makefile b/regress/unittests/authopt/Makefile index e8edc7b5fe96..71a7be5bd2e6 100644 --- a/regress/unittests/authopt/Makefile +++ b/regress/unittests/authopt/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.5 2020/04/06 09:43:55 dtucker Exp $ +# $OpenBSD: Makefile,v 1.6 2021/01/09 12:24:30 dtucker Exp $ PROG=test_authopt SRCS=tests.c @@ -10,7 +10,7 @@ SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=sshbuf-io.c atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c SRCS+=ssh-dss.c ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c -SRCS+=addrmatch.c bitmap.c +SRCS+=addr.c addrmatch.c bitmap.c SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c SRCS+=ssh-ed25519-sk.c sk-usbhid.c diff --git a/regress/unittests/conversion/Makefile b/regress/unittests/conversion/Makefile index 5ec667bf8c05..5793c4934845 100644 --- a/regress/unittests/conversion/Makefile +++ b/regress/unittests/conversion/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.3 2020/10/16 14:02:24 djm Exp $ +# $OpenBSD: Makefile,v 1.4 2021/01/09 12:24:30 dtucker Exp $ PROG=test_conversion SRCS=tests.c @@ -6,7 +6,7 @@ SRCS=tests.c # From usr.bin/ssh SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=atomicio.c misc.c xmalloc.c log.c uidswap.c cleanup.c fatal.c ssherr.c -SRCS+=match.c addrmatch.c +SRCS+=match.c addr.c addrmatch.c REGRESS_TARGETS=run-regress-${PROG} diff --git a/regress/unittests/hostkeys/Makefile b/regress/unittests/hostkeys/Makefile index d841d96be205..9a53423eeac0 100644 --- a/regress/unittests/hostkeys/Makefile +++ b/regress/unittests/hostkeys/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.8 2020/04/06 09:43:56 dtucker Exp $ +# $OpenBSD: Makefile,v 1.9 2021/01/09 12:24:30 dtucker Exp $ PROG=test_hostkeys SRCS=tests.c test_iterate.c @@ -8,7 +8,7 @@ SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=sshbuf-io.c atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c SRCS+=ssh-dss.c ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c -SRCS+=addrmatch.c bitmap.c hostfile.c +SRCS+=addr.c addrmatch.c bitmap.c hostfile.c SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c SRCS+=ssh-ed25519-sk.c sk-usbhid.c diff --git a/regress/unittests/kex/Makefile b/regress/unittests/kex/Makefile index bff16ab4ef87..50b117c07851 100644 --- a/regress/unittests/kex/Makefile +++ b/regress/unittests/kex/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.11 2020/12/29 01:02:15 djm Exp $ +# $OpenBSD: Makefile,v 1.12 2021/01/09 12:24:30 dtucker Exp $ PROG=test_kex SRCS=tests.c test_kex.c @@ -8,7 +8,7 @@ SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=sshbuf-io.c atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c SRCS+=ssh-dss.c ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c -SRCS+=addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c +SRCS+=addr.c addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c SRCS+=compat.c ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c SRCS+=ssh-ed25519-sk.c sk-usbhid.c diff --git a/regress/unittests/match/Makefile b/regress/unittests/match/Makefile index 87e75826ac27..939163d30ef5 100644 --- a/regress/unittests/match/Makefile +++ b/regress/unittests/match/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.4 2017/12/21 03:01:49 djm Exp $ +# $OpenBSD: Makefile,v 1.5 2021/01/09 12:24:31 dtucker Exp $ PROG=test_match SRCS=tests.c @@ -6,7 +6,7 @@ SRCS=tests.c # From usr.bin/ssh SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=match.c misc.c log.c uidswap.c fatal.c ssherr.c addrmatch.c xmalloc.c -SRCS+=cleanup.c atomicio.c +SRCS+=cleanup.c atomicio.c addr.c REGRESS_TARGETS=run-regress-${PROG} diff --git a/regress/unittests/misc/Makefile b/regress/unittests/misc/Makefile index 6f0df8ec949c..04eddcd788a8 100644 --- a/regress/unittests/misc/Makefile +++ b/regress/unittests/misc/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.3 2020/10/16 14:02:24 djm Exp $ +# $OpenBSD: Makefile,v 1.4 2021/01/09 12:24:31 dtucker Exp $ PROG=test_misc SRCS=tests.c @@ -12,6 +12,7 @@ SRCS+= log.c SRCS+= xmalloc.c SRCS+= misc.c SRCS+= match.c +SRCS+= addr.c SRCS+= addrmatch.c # From usr.bin/ssh/sshd/Makefile diff --git a/regress/unittests/sshbuf/Makefile b/regress/unittests/sshbuf/Makefile index 56d91cc26192..a8ddfaf7ed24 100644 --- a/regress/unittests/sshbuf/Makefile +++ b/regress/unittests/sshbuf/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.9 2020/10/16 14:02:24 djm Exp $ +# $OpenBSD: Makefile,v 1.10 2021/01/09 12:24:31 dtucker Exp $ # $OpenBSD: Makefile,v 1.8 2020/01/26 00:09:50 djm Exp $ @@ -15,7 +15,7 @@ SRCS+=test_sshbuf_fixed.c # From usr.bin/ssh SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=sshbuf-io.c atomicio.c misc.c xmalloc.c log.c fatal.c ssherr.c cleanup.c -SRCS+=match.c addrmatch.c +SRCS+=match.c addr.c addrmatch.c run-regress-${PROG}: ${PROG} env ${TEST_ENV} ./${PROG} ${UNITTEST_ARGS} diff --git a/regress/unittests/sshkey/Makefile b/regress/unittests/sshkey/Makefile index 29c9b3ba7227..d4a892375bd7 100644 --- a/regress/unittests/sshkey/Makefile +++ b/regress/unittests/sshkey/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.10 2020/04/06 09:43:56 dtucker Exp $ +# $OpenBSD: Makefile,v 1.11 2021/01/09 12:24:31 dtucker Exp $ PROG=test_sshkey SRCS=tests.c test_sshkey.c test_file.c test_fuzz.c common.c @@ -8,7 +8,7 @@ SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=sshbuf-io.c atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c SRCS+=ssh-dss.c ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c -SRCS+=addrmatch.c bitmap.c +SRCS+=addr.c addrmatch.c bitmap.c SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c SRCS+=ssh-ed25519-sk.c sk-usbhid.c diff --git a/regress/unittests/sshsig/Makefile b/regress/unittests/sshsig/Makefile index 4b607df457ba..65564d1b278b 100644 --- a/regress/unittests/sshsig/Makefile +++ b/regress/unittests/sshsig/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.1 2020/06/19 04:32:09 djm Exp $ +# $OpenBSD: Makefile,v 1.2 2021/01/09 12:24:31 dtucker Exp $ PROG=test_sshsig SRCS=tests.c @@ -8,7 +8,7 @@ SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=sshbuf-io.c atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c SRCS+=ssh-dss.c ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c -SRCS+=addrmatch.c bitmap.c sshsig.c +SRCS+=addr.c addrmatch.c bitmap.c sshsig.c SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c SRCS+=ssh-ed25519-sk.c sk-usbhid.c From ba328bd7a6774f30daaf90b83f1933cc4afc866c Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sat, 9 Jan 2021 12:31:46 +0000 Subject: [PATCH 0156/1788] upstream: Adjust kexfuzz to addr.c/addrmatch.c split. OpenBSD-Regress-ID: 1d8d23bb548078020be2fb52c4c643efb190f0eb --- regress/misc/kexfuzz/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regress/misc/kexfuzz/Makefile b/regress/misc/kexfuzz/Makefile index 733558d57077..18b70aa74f5d 100644 --- a/regress/misc/kexfuzz/Makefile +++ b/regress/misc/kexfuzz/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.9 2020/12/29 01:02:15 djm Exp $ +# $OpenBSD: Makefile,v 1.10 2021/01/09 12:31:46 dtucker Exp $ .include .include @@ -17,7 +17,7 @@ SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c SRCS+=atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c ssh-dss.c SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c -SRCS+=addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c +SRCS+=addr.c addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c SRCS+=compat.c ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c SRCS+=cipher-chachapoly.c chacha.c poly1305.c utf8.c SRCS+=sshbuf-io.c ssh-ecdsa-sk.c ssh-ed25519-sk.c msg.c ssh-sk-client.c From 7d0f8a3369579dfe398536eb4e3da7bc15da9599 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 11 Jan 2021 04:48:22 +0000 Subject: [PATCH 0157/1788] upstream: Correct spelling of persourcenetblocksize in config-dump mode. OpenBSD-Commit-ID: ecdc49e2b6bde6b6b0e52163d621831f6ac7b13d --- servconf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/servconf.c b/servconf.c index b8d2138f0172..8d7ef5dc36aa 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.372 2021/01/09 12:10:02 dtucker Exp $ */ +/* $OpenBSD: servconf.c,v 1.373 2021/01/11 04:48:22 dtucker Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -2960,7 +2960,7 @@ dump_config(ServerOptions *o) printf("none\n"); else printf("%d\n", o->per_source_max_startups); - printf("persourcnetblocksize %d:%d\n", o->per_source_masklen_ipv4, + printf("persourcenetblocksize %d:%d\n", o->per_source_masklen_ipv4, o->per_source_masklen_ipv6); s = NULL; From 1050109b4b2884bf50fd1b3aa084c7fd0a42ae90 Mon Sep 17 00:00:00 2001 From: anatasluo Date: Mon, 11 Jan 2021 13:51:39 +0000 Subject: [PATCH 0158/1788] Remove duplicated declaration in fatal.c . --- regress/misc/sk-dummy/fatal.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/regress/misc/sk-dummy/fatal.c b/regress/misc/sk-dummy/fatal.c index 1ba50809b79a..c6e4b5d6fa71 100644 --- a/regress/misc/sk-dummy/fatal.c +++ b/regress/misc/sk-dummy/fatal.c @@ -9,9 +9,6 @@ #include "log.h" -void sshfatal(const char *file, const char *func, int line, int showfunc, - LogLevel level, const char *suffix, const char *fmt, ...); - void sshfatal(const char *file, const char *func, int line, int showfunc, LogLevel level, const char *suffix, const char *fmt, ...) From ac112ade990585c511048ed4edaf2d9fc92b61f0 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 12 Jan 2021 19:22:47 +1100 Subject: [PATCH 0159/1788] Add Mac OS X test targets. --- .github/setup_ci.sh | 2 +- .github/workflows/c-cpp.yml | 53 +++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 2d489b7edfdf..593e8ef13a63 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -2,7 +2,7 @@ case $(./config.guess) in *-darwin*) - # no setup needed for Mac OS X + brew install automake exit 0 ;; esac diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index c019d96e7ad1..f2a9538da55e 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -93,3 +93,56 @@ jobs: env: SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 + + + macos-10_15: + + runs-on: macos-10.15 + + strategy: + matrix: + configs: + - "" + - "--with-pam" + + steps: + - uses: actions/checkout@v2 + - name: setup CI system + run: ./.github/setup_ci.sh ${{ matrix.configs }} + - name: autoreconf + run: autoreconf + - name: configure + run: ./configure --with-ssl-dir=/usr/local/opt/openssl ${{ matrix.configs }} + - name: make + run: make + - name: make tests + run: ./.github/run_test.sh ${{ matrix.configs }} + env: + SUDO: sudo + TEST_SSH_UNSAFE_PERMISSIONS: 1 + + macos-11_0: + + runs-on: macos-11.0 + + strategy: + matrix: + configs: + - "" + - "--with-pam" + + steps: + - uses: actions/checkout@v2 + - name: setup CI system + run: ./.github/setup_ci.sh ${{ matrix.configs }} + - name: autoreconf + run: autoreconf + - name: configure + run: ./configure --with-ssl-dir=/usr/local/opt/openssl ${{ matrix.configs }} + - name: make + run: make + - name: make tests + run: ./.github/run_test.sh ${{ matrix.configs }} + env: + SUDO: sudo + TEST_SSH_UNSAFE_PERMISSIONS: 1 From 8635e7df7e3a3fbb4a4f6cd5a7202883b2506087 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 13 Jan 2021 18:00:57 +1100 Subject: [PATCH 0160/1788] Merge Mac OS X targets into a single config. --- .github/workflows/c-cpp.yml | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index f2a9538da55e..974404cbda3d 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -95,42 +95,14 @@ jobs: TEST_SSH_UNSAFE_PERMISSIONS: 1 - macos-10_15: - - runs-on: macos-10.15 - + macos: strategy: matrix: + os: [ macos-10.15, macos-11.0 ] configs: - "" - "--with-pam" - - steps: - - uses: actions/checkout@v2 - - name: setup CI system - run: ./.github/setup_ci.sh ${{ matrix.configs }} - - name: autoreconf - run: autoreconf - - name: configure - run: ./configure --with-ssl-dir=/usr/local/opt/openssl ${{ matrix.configs }} - - name: make - run: make - - name: make tests - run: ./.github/run_test.sh ${{ matrix.configs }} - env: - SUDO: sudo - TEST_SSH_UNSAFE_PERMISSIONS: 1 - - macos-11_0: - - runs-on: macos-11.0 - - strategy: - matrix: - configs: - - "" - - "--with-pam" - + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: setup CI system From a164862dfa863b54b7897f66e1dd75437f086c11 Mon Sep 17 00:00:00 2001 From: "rob@openbsd.org" Date: Thu, 14 Jan 2021 19:45:06 +0000 Subject: [PATCH 0161/1788] upstream: Minor grammatical correction. OK jmc@ OpenBSD-Commit-ID: de0fad0581e212b2750751e479b79c18ff8cac02 --- ssh_config.5 | 6 +++--- sshd_config.5 | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index 18a98a8f7aad..8c70962b6741 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.341 2021/01/08 04:49:13 djm Exp $ -.Dd $Mdocdate: January 8 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.342 2021/01/14 19:45:06 rob Exp $ +.Dd $Mdocdate: January 14 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1432,7 +1432,7 @@ or .Cm no . .It Cm RekeyLimit Specifies the maximum amount of data that may be transmitted before the -session key is renegotiated, optionally followed a maximum amount of +session key is renegotiated, optionally followed by a maximum amount of time that may pass before the session key is renegotiated. The first argument is specified in bytes and may have a suffix of .Sq K , diff --git a/sshd_config.5 b/sshd_config.5 index 0d183175abb5..1f59ebc61e9f 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.322 2021/01/09 12:51:12 jmc Exp $ -.Dd $Mdocdate: January 9 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.323 2021/01/14 19:45:06 rob Exp $ +.Dd $Mdocdate: January 14 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -1553,7 +1553,7 @@ The default is .Cm yes . .It Cm RekeyLimit Specifies the maximum amount of data that may be transmitted before the -session key is renegotiated, optionally followed a maximum amount of +session key is renegotiated, optionally followed by a maximum amount of time that may pass before the session key is renegotiated. The first argument is specified in bytes and may have a suffix of .Sq K , From 5339ab369c225b40bc64d5ec3374f5c91b3ad609 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 15 Jan 2021 02:32:41 +0000 Subject: [PATCH 0162/1788] upstream: In waitfd(), when poll returns early we are subtracting the elapsed time from the timeout each loop, so we only want to measure the elapsed time the poll() in that loop, not since the start of the function. Spotted by chris.xj.zhu at gmail.com, ok djm@ OpenBSD-Commit-ID: 199df060978ee9aa89b8041a3dfaf1bf7ae8dd7a --- misc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc.c b/misc.c index a4a3f2e24f52..7aad1b5df340 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.158 2021/01/11 02:12:57 dtucker Exp $ */ +/* $OpenBSD: misc.c,v 1.159 2021/01/15 02:32:41 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -297,10 +297,10 @@ waitfd(int fd, int *timeoutp, short events) struct timeval t_start; int oerrno, r; - monotime_tv(&t_start); pfd.fd = fd; pfd.events = events; for (; *timeoutp >= 0;) { + monotime_tv(&t_start); r = poll(&pfd, 1, *timeoutp); oerrno = errno; ms_subtract_diff(&t_start, timeoutp); From 02da325f10b214219eae2bb1bc2d3bf0c2f13f9f Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 15 Jan 2021 02:58:11 +0000 Subject: [PATCH 0163/1788] upstream: Change types in convtime() unit test to int to match change its new type. Add tests for boundary conditions and fix convtime to work up to INT_MAX. ok djm@ OpenBSD-Commit-ID: 01dc0475f1484ac2f47facdfcf9221f9472145de --- misc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/misc.c b/misc.c index 7aad1b5df340..3835056adfb5 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.159 2021/01/15 02:32:41 dtucker Exp $ */ +/* $OpenBSD: misc.c,v 1.160 2021/01/15 02:58:11 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -591,10 +591,10 @@ convtime(const char *s) default: return -1; } - if (secs >= INT_MAX / multiplier) + if (secs > INT_MAX / multiplier) return -1; secs *= multiplier; - if (total >= INT_MAX - secs) + if (total > INT_MAX - secs) return -1; total += secs; if (total < 0) From 9bde1a420626da5007bf7ab499fa2159b9eddf72 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 15 Jan 2021 04:31:25 +0000 Subject: [PATCH 0164/1788] upstream: Make output buffer larger to prevent potential truncation warnings from compilers not smart enough to know the strftime calls won't ever fully fill "to" and "from". ok djm@ OpenBSD-Commit-ID: 83733f1b01b82da88b9dd1769475952aff10bdd7 --- sshkey.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sshkey.c b/sshkey.c index 938fa0d7ceec..d195a593d922 100644 --- a/sshkey.c +++ b/sshkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.c,v 1.112 2020/10/19 22:49:23 dtucker Exp $ */ +/* $OpenBSD: sshkey.c,v 1.113 2021/01/15 04:31:25 dtucker Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * Copyright (c) 2008 Alexander von Gernler. All rights reserved. @@ -3134,7 +3134,7 @@ sshkey_cert_check_authority(const struct sshkey *k, size_t sshkey_format_cert_validity(const struct sshkey_cert *cert, char *s, size_t l) { - char from[32], to[32], ret[64]; + char from[32], to[32], ret[128]; time_t tt; struct tm *tm; From a8e798feabe36d02de292bcfd274712cae1d8d17 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 15 Jan 2021 02:58:11 +0000 Subject: [PATCH 0165/1788] upstream: Change types in convtime() unit test to int to match change its new type. Add tests for boundary conditions and fix convtime to work up to INT_MAX. ok djm@ OpenBSD-Regress-ID: ba2b81e9a3257fff204b020affe85b604a44f97e --- regress/unittests/misc/tests.c | 43 +++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/regress/unittests/misc/tests.c b/regress/unittests/misc/tests.c index 0bd0c84f9612..d873dc24154e 100644 --- a/regress/unittests/misc/tests.c +++ b/regress/unittests/misc/tests.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tests.c,v 1.3 2020/05/29 04:32:26 dtucker Exp $ */ +/* $OpenBSD: tests.c,v 1.4 2021/01/15 02:58:11 dtucker Exp $ */ /* * Regress test for misc helper functions. * @@ -22,6 +22,7 @@ tests(void) { int port, parseerr; char *user, *host, *path, *ret; + char buf[1024]; TEST_START("misc_parse_user_host_path"); ASSERT_INT_EQ(parse_user_host_path("someuser@some.host:some/path", @@ -79,22 +80,32 @@ tests(void) TEST_DONE(); TEST_START("misc_convtime"); - ASSERT_LONG_EQ(convtime("1"), 1); - ASSERT_LONG_EQ(convtime("2s"), 2); - ASSERT_LONG_EQ(convtime("3m"), 180); - ASSERT_LONG_EQ(convtime("1m30"), 90); - ASSERT_LONG_EQ(convtime("1m30s"), 90); - ASSERT_LONG_EQ(convtime("1h1s"), 3601); - ASSERT_LONG_EQ(convtime("1h30m"), 90 * 60); - ASSERT_LONG_EQ(convtime("1d"), 24 * 60 * 60); - ASSERT_LONG_EQ(convtime("1w"), 7 * 24 * 60 * 60); - ASSERT_LONG_EQ(convtime("1w2d3h4m5"), 788645); - ASSERT_LONG_EQ(convtime("1w2d3h4m5s"), 788645); + ASSERT_INT_EQ(convtime("0"), 0); + ASSERT_INT_EQ(convtime("1"), 1); + ASSERT_INT_EQ(convtime("2s"), 2); + ASSERT_INT_EQ(convtime("3m"), 180); + ASSERT_INT_EQ(convtime("1m30"), 90); + ASSERT_INT_EQ(convtime("1m30s"), 90); + ASSERT_INT_EQ(convtime("1h1s"), 3601); + ASSERT_INT_EQ(convtime("1h30m"), 90 * 60); + ASSERT_INT_EQ(convtime("1d"), 24 * 60 * 60); + ASSERT_INT_EQ(convtime("1w"), 7 * 24 * 60 * 60); + ASSERT_INT_EQ(convtime("1w2d3h4m5"), 788645); + ASSERT_INT_EQ(convtime("1w2d3h4m5s"), 788645); /* any negative number or error returns -1 */ - ASSERT_LONG_EQ(convtime("-1"), -1); - ASSERT_LONG_EQ(convtime(""), -1); - ASSERT_LONG_EQ(convtime("trout"), -1); - ASSERT_LONG_EQ(convtime("-77"), -1); + ASSERT_INT_EQ(convtime("-1"), -1); + ASSERT_INT_EQ(convtime(""), -1); + ASSERT_INT_EQ(convtime("trout"), -1); + ASSERT_INT_EQ(convtime("-77"), -1); + /* boundary conditions */ + snprintf(buf, sizeof buf, "%llu", (long long unsigned)INT_MAX); + ASSERT_INT_EQ(convtime(buf), INT_MAX); + snprintf(buf, sizeof buf, "%llu", (long long unsigned)INT_MAX + 1); + ASSERT_INT_EQ(convtime(buf), -1); + ASSERT_INT_EQ(convtime("3550w5d3h14m7s"), 2147483647); +#if INT_MAX == 2147483647 + ASSERT_INT_EQ(convtime("3550w5d3h14m8s"), -1); +#endif TEST_DONE(); TEST_START("dollar_expand"); From ee9c0da8035b3168e8e57c1dedc2d1b0daf00eec Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 22 Jan 2021 02:44:58 +0000 Subject: [PATCH 0166/1788] upstream: Rename PubkeyAcceptedKeyTypes keyword to PubkeyAcceptedAlgorithms. While the two were originally equivalent, this actually specifies the signature algorithms that are accepted. Some key types (eg RSA) can be used by multiple algorithms (eg ssh-rsa, rsa-sha2-512) so the old name is becoming increasingly misleading. The old name is retained as an alias. Prompted by bz#3253, help & ok djm@, man page help jmc@ OpenBSD-Commit-ID: 0346b2f73f54c43d4e001089759d149bfe402ca5 --- auth2-pubkey.c | 6 +++--- monitor.c | 4 ++-- readconf.c | 27 ++++++++++++++------------- readconf.h | 4 ++-- scp.1 | 6 +++--- servconf.c | 25 +++++++++++++------------ servconf.h | 6 +++--- sftp.1 | 6 +++--- ssh.c | 5 +++-- ssh_config.5 | 18 +++++++++--------- sshconnect2.c | 22 +++++++++++----------- sshd_config.5 | 20 ++++++++++---------- 12 files changed, 76 insertions(+), 73 deletions(-) diff --git a/auth2-pubkey.c b/auth2-pubkey.c index 14863cbf94c2..6961b0c905aa 100644 --- a/auth2-pubkey.c +++ b/auth2-pubkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-pubkey.c,v 1.103 2020/12/22 00:12:22 djm Exp $ */ +/* $OpenBSD: auth2-pubkey.c,v 1.104 2021/01/22 02:44:58 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -150,8 +150,8 @@ userauth_pubkey(struct ssh *ssh) logit("refusing previously-used %s key", sshkey_type(key)); goto done; } - if (match_pattern_list(pkalg, options.pubkey_key_types, 0) != 1) { - logit_f("key type %s not in PubkeyAcceptedKeyTypes", + if (match_pattern_list(pkalg, options.pubkey_accepted_algos, 0) != 1) { + logit_f("key type %s not in PubkeyAcceptedAlgorithms", sshkey_ssh_name(key)); goto done; } diff --git a/monitor.c b/monitor.c index 79d003ae9c71..559eb9f68ff5 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.219 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.220 2021/01/22 02:44:58 dtucker Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -1186,7 +1186,7 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) if (auth2_key_already_used(authctxt, key)) break; if (!key_base_type_match(auth_method, key, - options.pubkey_key_types)) + options.pubkey_accepted_algos)) break; allowed = user_key_allowed(ssh, authctxt->pw, key, pubkey_auth_attempt, &opts); diff --git a/readconf.c b/readconf.c index 37f92e25adba..c7df93de07e4 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.348 2021/01/08 04:49:13 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.349 2021/01/22 02:44:58 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -171,7 +171,7 @@ typedef enum { oCanonicalizeFallbackLocal, oCanonicalizePermittedCNAMEs, oStreamLocalBindMask, oStreamLocalBindUnlink, oRevokedHostKeys, oFingerprintHash, oUpdateHostkeys, oHostbasedKeyTypes, - oPubkeyAcceptedKeyTypes, oCASignatureAlgorithms, oProxyJump, + oPubkeyAcceptedAlgorithms, oCASignatureAlgorithms, oProxyJump, oSecurityKeyProvider, oKnownHostsCommand, oIgnore, oIgnoredUnknownOption, oDeprecated, oUnsupported } OpCodes; @@ -307,7 +307,8 @@ static struct { { "fingerprinthash", oFingerprintHash }, { "updatehostkeys", oUpdateHostkeys }, { "hostbasedkeytypes", oHostbasedKeyTypes }, - { "pubkeyacceptedkeytypes", oPubkeyAcceptedKeyTypes }, + { "pubkeyacceptedkeytypes", oPubkeyAcceptedAlgorithms }, /* obsolete */ + { "pubkeyacceptedalgorithms", oPubkeyAcceptedAlgorithms }, { "ignoreunknown", oIgnoreUnknown }, { "proxyjump", oProxyJump }, { "securitykeyprovider", oSecurityKeyProvider }, @@ -1373,7 +1374,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oHostKeyAlgorithms: charptr = &options->hostkeyalgorithms; -parse_keytypes: +parse_pubkey_algos: arg = strdelim(&s); if (!arg || *arg == '\0') { error("%.200s line %d: Missing argument.", @@ -1393,7 +1394,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oCASignatureAlgorithms: charptr = &options->ca_sign_algorithms; - goto parse_keytypes; + goto parse_pubkey_algos; case oLogLevel: log_level_ptr = &options->log_level; @@ -1934,11 +1935,11 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, case oHostbasedKeyTypes: charptr = &options->hostbased_key_types; - goto parse_keytypes; + goto parse_pubkey_algos; - case oPubkeyAcceptedKeyTypes: - charptr = &options->pubkey_key_types; - goto parse_keytypes; + case oPubkeyAcceptedAlgorithms: + charptr = &options->pubkey_accepted_algos; + goto parse_pubkey_algos; case oAddKeysToAgent: arg = strdelim(&s); @@ -2221,7 +2222,7 @@ initialize_options(Options * options) options->fingerprint_hash = -1; options->update_hostkeys = -1; options->hostbased_key_types = NULL; - options->pubkey_key_types = NULL; + options->pubkey_accepted_algos = NULL; options->known_hosts_command = NULL; } @@ -2440,7 +2441,7 @@ fill_default_options(Options * options) ASSEMBLE(macs, def_mac, all_mac); ASSEMBLE(kex_algorithms, def_kex, all_kex); ASSEMBLE(hostbased_key_types, def_key, all_key); - ASSEMBLE(pubkey_key_types, def_key, all_key); + ASSEMBLE(pubkey_accepted_algos, def_key, all_key); ASSEMBLE(ca_sign_algorithms, def_sig, all_sig); #undef ASSEMBLE @@ -2560,7 +2561,7 @@ free_options(Options *o) } free(o->revoked_host_keys); free(o->hostbased_key_types); - free(o->pubkey_key_types); + free(o->pubkey_accepted_algos); free(o->jump_user); free(o->jump_host); free(o->jump_extra); @@ -3101,7 +3102,7 @@ dump_client_config(Options *o, const char *host) #endif dump_cfg_string(oSecurityKeyProvider, o->sk_provider); dump_cfg_string(oPreferredAuthentications, o->preferred_authentications); - dump_cfg_string(oPubkeyAcceptedKeyTypes, o->pubkey_key_types); + dump_cfg_string(oPubkeyAcceptedAlgorithms, o->pubkey_accepted_algos); dump_cfg_string(oRevokedHostKeys, o->revoked_host_keys); dump_cfg_string(oXAuthLocation, o->xauth_location); dump_cfg_string(oKnownHostsCommand, o->known_hosts_command); diff --git a/readconf.h b/readconf.h index 85ea2e112a43..4ee730b95598 100644 --- a/readconf.h +++ b/readconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.h,v 1.137 2020/12/22 00:15:23 djm Exp $ */ +/* $OpenBSD: readconf.h,v 1.138 2021/01/22 02:44:58 dtucker Exp $ */ /* * Author: Tatu Ylonen @@ -162,7 +162,7 @@ typedef struct { int update_hostkeys; /* one of SSH_UPDATE_HOSTKEYS_* */ char *hostbased_key_types; - char *pubkey_key_types; + char *pubkey_accepted_algos; char *jump_user; char *jump_host; diff --git a/scp.1 b/scp.1 index a5bd723eb56e..c0e0082c02c9 100644 --- a/scp.1 +++ b/scp.1 @@ -8,9 +8,9 @@ .\" .\" Created: Sun May 7 00:14:37 1995 ylo .\" -.\" $OpenBSD: scp.1,v 1.92 2020/12/22 07:40:26 jmc Exp $ +.\" $OpenBSD: scp.1,v 1.93 2021/01/22 02:44:58 dtucker Exp $ .\" -.Dd $Mdocdate: December 22 2020 $ +.Dd $Mdocdate: January 22 2021 $ .Dt SCP 1 .Os .Sh NAME @@ -195,7 +195,7 @@ For full details of the options listed below, and their possible values, see .It PreferredAuthentications .It ProxyCommand .It ProxyJump -.It PubkeyAcceptedKeyTypes +.It PubkeyAcceptedAlgorithms .It PubkeyAuthentication .It RekeyLimit .It SendEnv diff --git a/servconf.c b/servconf.c index 8d7ef5dc36aa..a28918e2f21d 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.373 2021/01/11 04:48:22 dtucker Exp $ */ +/* $OpenBSD: servconf.c,v 1.374 2021/01/22 02:44:58 dtucker Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -130,7 +130,7 @@ initialize_server_options(ServerOptions *options) options->hostkeyalgorithms = NULL; options->pubkey_authentication = -1; options->pubkey_auth_options = -1; - options->pubkey_key_types = NULL; + options->pubkey_accepted_algos = NULL; options->kerberos_authentication = -1; options->kerberos_or_local_passwd = -1; options->kerberos_ticket_cleanup = -1; @@ -233,7 +233,7 @@ assemble_algorithms(ServerOptions *o) ASSEMBLE(kex_algorithms, def_kex, all_kex); ASSEMBLE(hostkeyalgorithms, def_key, all_key); ASSEMBLE(hostbased_key_types, def_key, all_key); - ASSEMBLE(pubkey_key_types, def_key, all_key); + ASSEMBLE(pubkey_accepted_algos, def_key, all_key); ASSEMBLE(ca_sign_algorithms, def_sig, all_sig); #undef ASSEMBLE free(all_cipher); @@ -527,7 +527,7 @@ typedef enum { sPermitUserEnvironment, sAllowTcpForwarding, sCompression, sRekeyLimit, sAllowUsers, sDenyUsers, sAllowGroups, sDenyGroups, sIgnoreUserKnownHosts, sCiphers, sMacs, sPidFile, - sGatewayPorts, sPubkeyAuthentication, sPubkeyAcceptedKeyTypes, + sGatewayPorts, sPubkeyAuthentication, sPubkeyAcceptedAlgorithms, sXAuthLocation, sSubsystem, sMaxStartups, sMaxAuthTries, sMaxSessions, sBanner, sUseDNS, sHostbasedAuthentication, sHostbasedUsesNameFromPacketOnly, sHostbasedAcceptedKeyTypes, @@ -589,7 +589,8 @@ static struct { { "hostkeyalgorithms", sHostKeyAlgorithms, SSHCFG_GLOBAL }, { "rsaauthentication", sDeprecated, SSHCFG_ALL }, { "pubkeyauthentication", sPubkeyAuthentication, SSHCFG_ALL }, - { "pubkeyacceptedkeytypes", sPubkeyAcceptedKeyTypes, SSHCFG_ALL }, + { "pubkeyacceptedkeytypes", sPubkeyAcceptedAlgorithms, SSHCFG_ALL }, /* obsolete */ + { "pubkeyacceptedalgorithms", sPubkeyAcceptedAlgorithms, SSHCFG_ALL }, { "pubkeyauthoptions", sPubkeyAuthOptions, SSHCFG_ALL }, { "dsaauthentication", sPubkeyAuthentication, SSHCFG_GLOBAL }, /* alias */ #ifdef KRB5 @@ -1501,7 +1502,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, case sHostbasedAcceptedKeyTypes: charptr = &options->hostbased_key_types; - parse_keytypes: + parse_pubkey_algos: arg = strdelim(&cp); if (!arg || *arg == '\0') fatal("%s line %d: Missing argument.", @@ -1517,19 +1518,19 @@ process_server_config_line_depth(ServerOptions *options, char *line, case sHostKeyAlgorithms: charptr = &options->hostkeyalgorithms; - goto parse_keytypes; + goto parse_pubkey_algos; case sCASignatureAlgorithms: charptr = &options->ca_sign_algorithms; - goto parse_keytypes; + goto parse_pubkey_algos; case sPubkeyAuthentication: intptr = &options->pubkey_authentication; goto parse_flag; - case sPubkeyAcceptedKeyTypes: - charptr = &options->pubkey_key_types; - goto parse_keytypes; + case sPubkeyAcceptedAlgorithms: + charptr = &options->pubkey_accepted_algos; + goto parse_pubkey_algos; case sPubkeyAuthOptions: intptr = &options->pubkey_auth_options; @@ -2921,7 +2922,7 @@ dump_config(ServerOptions *o) dump_cfg_string(sCASignatureAlgorithms, o->ca_sign_algorithms); dump_cfg_string(sHostbasedAcceptedKeyTypes, o->hostbased_key_types); dump_cfg_string(sHostKeyAlgorithms, o->hostkeyalgorithms); - dump_cfg_string(sPubkeyAcceptedKeyTypes, o->pubkey_key_types); + dump_cfg_string(sPubkeyAcceptedAlgorithms, o->pubkey_accepted_algos); #if defined(__OpenBSD__) || defined(HAVE_SYS_SET_PROCESS_RDOMAIN) dump_cfg_string(sRDomain, o->routing_domain); #endif diff --git a/servconf.h b/servconf.h index e0c3ff60ae23..364cd947f316 100644 --- a/servconf.h +++ b/servconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: servconf.h,v 1.149 2021/01/09 12:10:02 dtucker Exp $ */ +/* $OpenBSD: servconf.h,v 1.150 2021/01/22 02:44:58 dtucker Exp $ */ /* * Author: Tatu Ylonen @@ -126,7 +126,7 @@ typedef struct { char *hostkeyalgorithms; /* SSH2 server key types */ char *ca_sign_algorithms; /* Allowed CA signature algorithms */ int pubkey_authentication; /* If true, permit ssh2 pubkey authentication. */ - char *pubkey_key_types; /* Key types allowed for public key */ + char *pubkey_accepted_algos; /* Signature algos allowed for pubkey */ int pubkey_auth_options; /* -1 or mask of PUBKEYAUTH_* flags */ int kerberos_authentication; /* If true, permit Kerberos * authentication. */ @@ -272,7 +272,7 @@ TAILQ_HEAD(include_list, include_item); M_CP_STROPT(authorized_principals_command); \ M_CP_STROPT(authorized_principals_command_user); \ M_CP_STROPT(hostbased_key_types); \ - M_CP_STROPT(pubkey_key_types); \ + M_CP_STROPT(pubkey_accepted_algos); \ M_CP_STROPT(ca_sign_algorithms); \ M_CP_STROPT(routing_domain); \ M_CP_STROPT(permit_user_env_allowlist); \ diff --git a/sftp.1 b/sftp.1 index ea99aad13e73..685b3ff91f0d 100644 --- a/sftp.1 +++ b/sftp.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: sftp.1,v 1.133 2020/12/22 07:40:26 jmc Exp $ +.\" $OpenBSD: sftp.1,v 1.134 2021/01/22 02:44:58 dtucker Exp $ .\" .\" Copyright (c) 2001 Damien Miller. All rights reserved. .\" @@ -22,7 +22,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: December 22 2020 $ +.Dd $Mdocdate: January 22 2021 $ .Dt SFTP 1 .Os .Sh NAME @@ -269,7 +269,7 @@ For full details of the options listed below, and their possible values, see .It PreferredAuthentications .It ProxyCommand .It ProxyJump -.It PubkeyAcceptedKeyTypes +.It PubkeyAcceptedAlgorithms .It PubkeyAuthentication .It RekeyLimit .It SendEnv diff --git a/ssh.c b/ssh.c index 06598c7e10b4..ccba18310fa3 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.546 2020/12/20 23:40:19 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.547 2021/01/22 02:44:58 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -799,7 +799,8 @@ main(int ac, char **av) else if (strcmp(optarg, "key-plain") == 0) cp = sshkey_alg_list(0, 1, 0, '\n'); else if (strcmp(optarg, "key-sig") == 0 || - strcasecmp(optarg, "PubkeyAcceptedKeyTypes") == 0 || + strcasecmp(optarg, "PubkeyAcceptedKeyTypes") == 0 || /* deprecated name */ + strcasecmp(optarg, "PubkeyAcceptedAlgorithms") == 0 || strcasecmp(optarg, "HostKeyAlgorithms") == 0 || strcasecmp(optarg, "HostbasedKeyTypes") == 0 || strcasecmp(optarg, "HostbasedAcceptedKeyTypes") == 0) diff --git a/ssh_config.5 b/ssh_config.5 index 8c70962b6741..96d6f6583863 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.342 2021/01/14 19:45:06 rob Exp $ -.Dd $Mdocdate: January 14 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.343 2021/01/22 02:44:58 dtucker Exp $ +.Dd $Mdocdate: January 22 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1388,20 +1388,20 @@ will pass a connected file descriptor back to instead of continuing to execute and pass data. The default is .Cm no . -.It Cm PubkeyAcceptedKeyTypes -Specifies the key types that will be used for public key authentication -as a comma-separated list of patterns. +.It Cm PubkeyAcceptedAlgorithms +Specifies the signature algorithms that will be used for public key +authentication as a comma-separated list of patterns. If the specified list begins with a .Sq + -character, then the key types after it will be appended to the default +character, then the algorithms after it will be appended to the default instead of replacing it. If the specified list begins with a .Sq - -character, then the specified key types (including wildcards) will be removed +character, then the specified algorithms (including wildcards) will be removed from the default set instead of replacing them. If the specified list begins with a .Sq ^ -character, then the specified key types will be placed at the head of the +character, then the specified algorithms will be placed at the head of the default set. The default for this option is: .Bd -literal -offset 3n @@ -1422,7 +1422,7 @@ rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp The list of available key types may also be obtained using -.Qq ssh -Q PubkeyAcceptedKeyTypes . +.Qq ssh -Q PubkeyAcceptedAlgorithms . .It Cm PubkeyAuthentication Specifies whether to try public key authentication. The argument to this keyword must be diff --git a/sshconnect2.c b/sshconnect2.c index 108fd9707128..de89b7617538 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.341 2021/01/08 02:57:24 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.342 2021/01/22 02:44:58 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -1191,16 +1191,16 @@ key_sig_algorithm(struct ssh *ssh, const struct sshkey *key) (key->type == KEY_RSA_CERT && (datafellows & SSH_BUG_SIGTYPE))) { /* Filter base key signature alg against our configuration */ return match_list(sshkey_ssh_name(key), - options.pubkey_key_types, NULL); + options.pubkey_accepted_algos, NULL); } /* * For RSA keys/certs, since these might have a different sig type: - * find the first entry in PubkeyAcceptedKeyTypes of the right type + * find the first entry in PubkeyAcceptedAlgorithms of the right type * that also appears in the supported signature algorithms list from * the server. */ - oallowed = allowed = xstrdup(options.pubkey_key_types); + oallowed = allowed = xstrdup(options.pubkey_accepted_algos); while ((cp = strsep(&allowed, ",")) != NULL) { if (sshkey_type_from_name(cp) != key->type) continue; @@ -1597,25 +1597,25 @@ static int key_type_allowed_by_config(struct sshkey *key) { if (match_pattern_list(sshkey_ssh_name(key), - options.pubkey_key_types, 0) == 1) + options.pubkey_accepted_algos, 0) == 1) return 1; /* RSA keys/certs might be allowed by alternate signature types */ switch (key->type) { case KEY_RSA: if (match_pattern_list("rsa-sha2-512", - options.pubkey_key_types, 0) == 1) + options.pubkey_accepted_algos, 0) == 1) return 1; if (match_pattern_list("rsa-sha2-256", - options.pubkey_key_types, 0) == 1) + options.pubkey_accepted_algos, 0) == 1) return 1; break; case KEY_RSA_CERT: if (match_pattern_list("rsa-sha2-512-cert-v01@openssh.com", - options.pubkey_key_types, 0) == 1) + options.pubkey_accepted_algos, 0) == 1) return 1; if (match_pattern_list("rsa-sha2-256-cert-v01@openssh.com", - options.pubkey_key_types, 0) == 1) + options.pubkey_accepted_algos, 0) == 1) return 1; break; } @@ -1757,11 +1757,11 @@ pubkey_prepare(Authctxt *authctxt) } /* append remaining keys from the config file */ TAILQ_CONCAT(preferred, &files, next); - /* finally, filter by PubkeyAcceptedKeyTypes */ + /* finally, filter by PubkeyAcceptedAlgorithms */ TAILQ_FOREACH_SAFE(id, preferred, next, id2) { if (id->key != NULL && !key_type_allowed_by_config(id->key)) { debug("Skipping %s key %s - " - "not in PubkeyAcceptedKeyTypes", + "corresponding algo not in PubkeyAcceptedAlgorithms", sshkey_ssh_name(id->key), id->filename); TAILQ_REMOVE(preferred, id, next); sshkey_free(id->key); diff --git a/sshd_config.5 b/sshd_config.5 index 1f59ebc61e9f..9b7a8916863f 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.323 2021/01/14 19:45:06 rob Exp $ -.Dd $Mdocdate: January 14 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.324 2021/01/22 02:44:58 dtucker Exp $ +.Dd $Mdocdate: January 22 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -1209,7 +1209,7 @@ Available keywords are .Cm PermitTTY , .Cm PermitTunnel , .Cm PermitUserRC , -.Cm PubkeyAcceptedKeyTypes , +.Cm PubkeyAcceptedAlgorithms , .Cm PubkeyAuthentication , .Cm RekeyLimit , .Cm RevokedKeys , @@ -1477,20 +1477,20 @@ when a user logs in interactively. or equivalent.) The default is .Cm yes . -.It Cm PubkeyAcceptedKeyTypes -Specifies the key types that will be accepted for public key authentication -as a list of comma-separated patterns. +.It Cm PubkeyAcceptedAlgorithms +Specifies the signature algorithms that will be accepted for public key +authentication as a list of comma-separated patterns. Alternately if the specified list begins with a .Sq + -character, then the specified key types will be appended to the default set +character, then the specified algorithms will be appended to the default set instead of replacing them. If the specified list begins with a .Sq - -character, then the specified key types (including wildcards) will be removed +character, then the specified algorithms (including wildcards) will be removed from the default set instead of replacing them. If the specified list begins with a .Sq ^ -character, then the specified key types will be placed at the head of the +character, then the specified algorithms will be placed at the head of the default set. The default for this option is: .Bd -literal -offset 3n @@ -1511,7 +1511,7 @@ rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp The list of available key types may also be obtained using -.Qq ssh -Q PubkeyAcceptedKeyTypes . +.Qq ssh -Q PubkeyAcceptedAlgorithms . .It Cm PubkeyAuthOptions Sets one or more public key authentication options. The supported keywords are: From b55b7565f15327d82ad7acbddafa90b658c5f0af Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 22 Jan 2021 02:46:40 +0000 Subject: [PATCH 0167/1788] upstream: PubkeyAcceptedKeyTypes->PubkeyAcceptedAlgorithms here too. OpenBSD-Commit-ID: 3b64a640f8ce8c21d9314da9df7ce2420eefde3a --- ssh.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ssh.1 b/ssh.1 index 81e147c75048..0716177cf7b7 100644 --- a/ssh.1 +++ b/ssh.1 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh.1,v 1.415 2020/12/22 00:15:23 djm Exp $ -.Dd $Mdocdate: December 22 2020 $ +.\" $OpenBSD: ssh.1,v 1.416 2021/01/22 02:46:40 dtucker Exp $ +.Dd $Mdocdate: January 22 2021 $ .Dt SSH 1 .Os .Sh NAME @@ -537,7 +537,7 @@ For full details of the options listed below, and their possible values, see .It ProxyCommand .It ProxyJump .It ProxyUseFdpass -.It PubkeyAcceptedKeyTypes +.It PubkeyAcceptedAlgorithms .It PubkeyAuthentication .It RekeyLimit .It RemoteCommand From 6ffdcdda128045226dda7fbb3956407978028a1e Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Mon, 18 Jan 2021 11:43:34 +0000 Subject: [PATCH 0168/1788] upstream: Fix long->int for convtime tests here too. Spotted by tobhe@. OpenBSD-Regress-ID: a87094f5863312d00938afba771d25f788c849d0 --- regress/unittests/conversion/tests.c | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/regress/unittests/conversion/tests.c b/regress/unittests/conversion/tests.c index ae1154d429df..bbdc5f5a7cb1 100644 --- a/regress/unittests/conversion/tests.c +++ b/regress/unittests/conversion/tests.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tests.c,v 1.2 2019/06/14 04:03:48 djm Exp $ */ +/* $OpenBSD: tests.c,v 1.3 2021/01/18 11:43:34 dtucker Exp $ */ /* * Regress test for conversions * @@ -26,28 +26,28 @@ tests(void) char buf[1024]; TEST_START("conversion_convtime"); - ASSERT_LONG_EQ(convtime("0"), 0); - ASSERT_LONG_EQ(convtime("1"), 1); - ASSERT_LONG_EQ(convtime("1S"), 1); + ASSERT_INT_EQ(convtime("0"), 0); + ASSERT_INT_EQ(convtime("1"), 1); + ASSERT_INT_EQ(convtime("1S"), 1); /* from the examples in the comment above the function */ - ASSERT_LONG_EQ(convtime("90m"), 5400); - ASSERT_LONG_EQ(convtime("1h30m"), 5400); - ASSERT_LONG_EQ(convtime("2d"), 172800); - ASSERT_LONG_EQ(convtime("1w"), 604800); + ASSERT_INT_EQ(convtime("90m"), 5400); + ASSERT_INT_EQ(convtime("1h30m"), 5400); + ASSERT_INT_EQ(convtime("2d"), 172800); + ASSERT_INT_EQ(convtime("1w"), 604800); /* negative time is not allowed */ - ASSERT_LONG_EQ(convtime("-7"), -1); - ASSERT_LONG_EQ(convtime("-9d"), -1); + ASSERT_INT_EQ(convtime("-7"), -1); + ASSERT_INT_EQ(convtime("-9d"), -1); /* overflow */ - snprintf(buf, sizeof buf, "%llu", (unsigned long long)LONG_MAX); - ASSERT_LONG_EQ(convtime(buf), -1); - snprintf(buf, sizeof buf, "%llu", (unsigned long long)LONG_MAX + 1); - ASSERT_LONG_EQ(convtime(buf), -1); + snprintf(buf, sizeof buf, "%llu", (unsigned long long)INT_MAX); + ASSERT_INT_EQ(convtime(buf), INT_MAX); + snprintf(buf, sizeof buf, "%llu", (unsigned long long)INT_MAX + 1); + ASSERT_INT_EQ(convtime(buf), -1); /* overflow with multiplier */ - snprintf(buf, sizeof buf, "%lluM", (unsigned long long)LONG_MAX/60 + 1); - ASSERT_LONG_EQ(convtime(buf), -1); - ASSERT_LONG_EQ(convtime("1000000000000000000000w"), -1); + snprintf(buf, sizeof buf, "%lluM", (unsigned long long)INT_MAX/60 + 1); + ASSERT_INT_EQ(convtime(buf), -1); + ASSERT_INT_EQ(convtime("1000000000000000000000w"), -1); TEST_DONE(); } From 95eca1e195a3b41baa1a725c2c5af8a09d885e4b Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 23 Jan 2021 18:26:05 +1100 Subject: [PATCH 0169/1788] ifdef new instance of sin6_scope_id Put inside HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID similar to existing instance. Should fix error on UnixWare 7. --- addr.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addr.c b/addr.c index d9b1927ee70c..ba0fad4e9eb0 100644 --- a/addr.c +++ b/addr.c @@ -92,7 +92,9 @@ addr_xaddr_to_sa(const struct xaddr *xa, struct sockaddr *sa, socklen_t *len, in6->sin6_family = AF_INET6; in6->sin6_port = htons(port); memcpy(&in6->sin6_addr, &xa->v6, sizeof(in6->sin6_addr)); +#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID in6->sin6_scope_id = xa->scope_id; +#endif break; default: return -1; From d1e578afe7cd48140ad6e92a453f9b035363fd7f Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Mon, 25 Jan 2021 06:00:17 +0000 Subject: [PATCH 0170/1788] upstream: make ssh hostbased authentication send the signature algorithm in its SSH2_MSG_USERAUTH_REQUEST packets instead of the key type. This make HostbasedAcceptedAlgorithms do what it is supposed to - filter on signature algorithm and not key type. spotted with dtucker@ ok markus@ OpenBSD-Commit-ID: 25bffe19f0326972f5728170f7da81d5f45c78c6 --- sshconnect2.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sshconnect2.c b/sshconnect2.c index de89b7617538..0883a367b0d1 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.342 2021/01/22 02:44:58 dtucker Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.343 2021/01/25 06:00:17 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -2177,7 +2177,7 @@ userauth_hostbased(struct ssh *ssh) (r = sshbuf_put_cstring(b, authctxt->server_user)) != 0 || (r = sshbuf_put_cstring(b, authctxt->service)) != 0 || (r = sshbuf_put_cstring(b, authctxt->method->name)) != 0 || - (r = sshbuf_put_cstring(b, sshkey_ssh_name(private))) != 0 || + (r = sshbuf_put_cstring(b, authctxt->active_ktype)) != 0 || (r = sshbuf_put_string(b, keyblob, keylen)) != 0 || (r = sshbuf_put_cstring(b, chost)) != 0 || (r = sshbuf_put_cstring(b, authctxt->local_user)) != 0) { @@ -2198,7 +2198,7 @@ userauth_hostbased(struct ssh *ssh) (r = sshpkt_put_cstring(ssh, authctxt->server_user)) != 0 || (r = sshpkt_put_cstring(ssh, authctxt->service)) != 0 || (r = sshpkt_put_cstring(ssh, authctxt->method->name)) != 0 || - (r = sshpkt_put_cstring(ssh, sshkey_ssh_name(private))) != 0 || + (r = sshpkt_put_cstring(ssh, authctxt->active_ktype)) != 0 || (r = sshpkt_put_string(ssh, keyblob, keylen)) != 0 || (r = sshpkt_put_cstring(ssh, chost)) != 0 || (r = sshpkt_put_cstring(ssh, authctxt->local_user)) != 0 || From cb7b22ea20a01332c81c0ddcb3555ad50de9cce2 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 26 Jan 2021 00:46:17 +0000 Subject: [PATCH 0171/1788] upstream: factor out common code in the agent client Add a ssh_request_reply_decode() function that sends a message to the agent, reads and parses a success/failure reply. Use it for all requests that only expect success/failure ok markus@ OpenBSD-Commit-ID: e0c1f4d5e6cfa525d62581e2b8de93be0cb85adb --- authfd.c | 63 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/authfd.c b/authfd.c index 189ebb39345f..9f092f7cf955 100644 --- a/authfd.c +++ b/authfd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: authfd.c,v 1.126 2020/10/29 02:52:43 djm Exp $ */ +/* $OpenBSD: authfd.c,v 1.127 2021/01/26 00:46:17 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -177,6 +177,27 @@ ssh_request_reply(int sock, struct sshbuf *request, struct sshbuf *reply) return 0; } +/* Communicate with agent: sent request, read and decode status reply */ +static int +ssh_request_reply_decode(int sock, struct sshbuf *request) +{ + struct sshbuf *reply; + int r; + u_char type; + + if ((reply = sshbuf_new()) == NULL) + return SSH_ERR_ALLOC_FAIL; + if ((r = ssh_request_reply(sock, request, reply)) != 0 || + (r = sshbuf_get_u8(reply, &type)) != 0 || + (r = decode_reply(type)) != 0) + goto out; + /* success */ + r = 0; + out: + sshbuf_free(reply); + return r; +} + /* * Closes the agent socket if it should be closed (depends on how it was * obtained). The argument must have been returned by @@ -200,13 +221,11 @@ ssh_lock_agent(int sock, int lock, const char *password) if ((msg = sshbuf_new()) == NULL) return SSH_ERR_ALLOC_FAIL; if ((r = sshbuf_put_u8(msg, type)) != 0 || - (r = sshbuf_put_cstring(msg, password)) != 0) - goto out; - if ((r = ssh_request_reply(sock, msg, msg)) != 0) + (r = sshbuf_put_cstring(msg, password)) != 0 || + (r = ssh_request_reply_decode(sock, msg)) != 0) goto out; - if ((r = sshbuf_get_u8(msg, &type)) != 0) - goto out; - r = decode_reply(type); + /* success */ + r = 0; out: sshbuf_free(msg); return r; @@ -519,11 +538,10 @@ ssh_add_identity_constrained(int sock, struct sshkey *key, (r = encode_constraints(msg, life, confirm, maxsign, provider)) != 0) goto out; - if ((r = ssh_request_reply(sock, msg, msg)) != 0) + if ((r = ssh_request_reply_decode(sock, msg)) != 0) goto out; - if ((r = sshbuf_get_u8(msg, &type)) != 0) - goto out; - r = decode_reply(type); + /* success */ + r = 0; out: sshbuf_free(msg); return r; @@ -538,7 +556,7 @@ ssh_remove_identity(int sock, const struct sshkey *key) { struct sshbuf *msg; int r; - u_char type, *blob = NULL; + u_char *blob = NULL; size_t blen; if ((msg = sshbuf_new()) == NULL) @@ -555,11 +573,10 @@ ssh_remove_identity(int sock, const struct sshkey *key) r = SSH_ERR_INVALID_ARGUMENT; goto out; } - if ((r = ssh_request_reply(sock, msg, msg)) != 0) + if ((r = ssh_request_reply_decode(sock, msg)) != 0) goto out; - if ((r = sshbuf_get_u8(msg, &type)) != 0) - goto out; - r = decode_reply(type); + /* success */ + r = 0; out: if (blob != NULL) freezero(blob, blen); @@ -595,11 +612,10 @@ ssh_update_card(int sock, int add, const char *reader_id, const char *pin, if (constrained && (r = encode_constraints(msg, life, confirm, 0, NULL)) != 0) goto out; - if ((r = ssh_request_reply(sock, msg, msg)) != 0) + if ((r = ssh_request_reply_decode(sock, msg)) != 0) goto out; - if ((r = sshbuf_get_u8(msg, &type)) != 0) - goto out; - r = decode_reply(type); + /* success */ + r = 0; out: sshbuf_free(msg); return r; @@ -626,11 +642,10 @@ ssh_remove_all_identities(int sock, int version) return SSH_ERR_ALLOC_FAIL; if ((r = sshbuf_put_u8(msg, type)) != 0) goto out; - if ((r = ssh_request_reply(sock, msg, msg)) != 0) + if ((r = ssh_request_reply_decode(sock, msg)) != 0) goto out; - if ((r = sshbuf_get_u8(msg, &type)) != 0) - goto out; - r = decode_reply(type); + /* success */ + r = 0; out: sshbuf_free(msg); return r; From 1fe16fd61bb53944ec510882acc0491abd66ff76 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 26 Jan 2021 00:47:47 +0000 Subject: [PATCH 0172/1788] upstream: use recallocarray to allocate the agent sockets table; also clear socket entries that are being marked as unused. spinkle in some debug2() spam to make it easier to watch an agent do its thing. ok markus OpenBSD-Commit-ID: 74582c8e82e96afea46f6c7b6813a429cbc75922 --- ssh-agent.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index d231182d0978..1df0236fb8e6 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.268 2021/01/11 02:12:58 dtucker Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.269 2021/01/26 00:47:47 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -175,11 +175,12 @@ static void close_socket(SocketEntry *e) { close(e->fd); - e->fd = -1; - e->type = AUTH_UNUSED; sshbuf_free(e->input); sshbuf_free(e->output); sshbuf_free(e->request); + memset(e, '\0', sizeof(*e)); + e->fd = -1; + e->type = AUTH_UNUSED; } static void @@ -249,6 +250,8 @@ process_request_identities(SocketEntry *e) struct sshbuf *msg; int r; + debug2_f("entering"); + if ((msg = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_AGENT_IDENTITIES_ANSWER)) != 0 || @@ -441,6 +444,7 @@ process_remove_identity(SocketEntry *e) struct sshkey *key = NULL; Identity *id; + debug2_f("entering"); if ((r = sshkey_froms(e->request, &key)) != 0) { error_fr(r, "parse key"); goto done; @@ -466,6 +470,7 @@ process_remove_all_identities(SocketEntry *e) { Identity *id; + debug2_f("entering"); /* Loop over all identities and clear the keys. */ for (id = TAILQ_FIRST(&idtab->idlist); id; id = TAILQ_FIRST(&idtab->idlist)) { @@ -519,6 +524,7 @@ process_add_identity(SocketEntry *e) u_char ctype; int r = SSH_ERR_INTERNAL_ERROR; + debug2_f("entering"); if ((r = sshkey_private_deserialize(e->request, &k)) != 0 || k == NULL || (r = sshbuf_get_cstring(e->request, &comment, NULL)) != 0) { @@ -660,6 +666,7 @@ process_lock_agent(SocketEntry *e, int lock) static u_int fail_count = 0; size_t pwlen; + debug2_f("entering"); /* * This is deliberately fatal: the user has requested that we lock, * but we can't parse their request properly. The only safe thing to @@ -730,6 +737,7 @@ process_add_smartcard_key(SocketEntry *e) struct sshkey **keys = NULL, *k; Identity *id; + debug2_f("entering"); if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 || (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) { error_fr(r, "parse"); @@ -809,6 +817,7 @@ process_remove_smartcard_key(SocketEntry *e) int r, success = 0; Identity *id, *nxt; + debug2_f("entering"); if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 || (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) { error_fr(r, "parse"); @@ -951,6 +960,8 @@ new_socket(sock_type type, int fd) { u_int i, old_alloc, new_alloc; + debug_f("type = %s", type == AUTH_CONNECTION ? "CONNECTION" : + (type == AUTH_SOCKET ? "SOCKET" : "UNKNOWN")); set_nonblock(fd); if (fd > max_fd) @@ -968,7 +979,8 @@ new_socket(sock_type type, int fd) } old_alloc = sockets_alloc; new_alloc = sockets_alloc + 10; - sockets = xreallocarray(sockets, new_alloc, sizeof(sockets[0])); + sockets = xrecallocarray(sockets, old_alloc, new_alloc, + sizeof(sockets[0])); for (i = old_alloc; i < new_alloc; i++) sockets[i].type = AUTH_UNUSED; sockets_alloc = new_alloc; From 3b44f2513cae89c920e8fe927b9bc910a1c8c65a Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 26 Jan 2021 00:49:30 +0000 Subject: [PATCH 0173/1788] upstream: move check_host_cert() from sshconnect,c to sshkey.c and refactor it to make it more generally usable and testable. ok markus@ OpenBSD-Commit-ID: 536f489f5ff38808c1fa711ba58d4579b636f9e4 --- auth2-hostbased.c | 4 ++-- auth2-pubkey.c | 6 ++--- hostfile.c | 3 ++- sshconnect.c | 56 +++++++++++++++++------------------------------ sshkey.c | 39 +++++++++++++++++++++++++++++---- sshkey.h | 6 +++-- sshsig.c | 6 ++--- 7 files changed, 69 insertions(+), 51 deletions(-) diff --git a/auth2-hostbased.c b/auth2-hostbased.c index 527537000117..ae43dd8af37f 100644 --- a/auth2-hostbased.c +++ b/auth2-hostbased.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-hostbased.c,v 1.43 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: auth2-hostbased.c,v 1.44 2021/01/26 00:49:30 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -214,7 +214,7 @@ hostbased_key_allowed(struct ssh *ssh, struct passwd *pw, debug2_f("access allowed by auth_rhosts2"); if (sshkey_is_cert(key) && - sshkey_cert_check_authority(key, 1, 0, lookup, &reason)) { + sshkey_cert_check_authority(key, 1, 0, 0, lookup, &reason)) { error("%s", reason); auth_debug_add("%s", reason); return 0; diff --git a/auth2-pubkey.c b/auth2-pubkey.c index 6961b0c905aa..5a24af8914cb 100644 --- a/auth2-pubkey.c +++ b/auth2-pubkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-pubkey.c,v 1.104 2021/01/22 02:44:58 dtucker Exp $ */ +/* $OpenBSD: auth2-pubkey.c,v 1.105 2021/01/26 00:49:30 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -674,7 +674,7 @@ check_authkey_line(struct ssh *ssh, struct passwd *pw, struct sshkey *key, reason = "Certificate does not contain an authorized principal"; goto fail_reason; } - if (sshkey_cert_check_authority(key, 0, 0, + if (sshkey_cert_check_authority(key, 0, 0, 0, keyopts->cert_principals == NULL ? pw->pw_name : NULL, &reason) != 0) goto fail_reason; @@ -793,7 +793,7 @@ user_cert_trusted_ca(struct ssh *ssh, struct passwd *pw, struct sshkey *key, } if (use_authorized_principals && principals_opts == NULL) fatal_f("internal error: missing principals_opts"); - if (sshkey_cert_check_authority(key, 0, 1, + if (sshkey_cert_check_authority(key, 0, 1, 0, use_authorized_principals ? NULL : pw->pw_name, &reason) != 0) goto fail_reason; diff --git a/hostfile.c b/hostfile.c index c3a2817832f2..b381741af2d3 100644 --- a/hostfile.c +++ b/hostfile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.c,v 1.87 2020/12/20 23:36:51 djm Exp $ */ +/* $OpenBSD: hostfile.c,v 1.88 2021/01/26 00:49:30 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -61,6 +61,7 @@ #include "ssherr.h" #include "digest.h" #include "hmac.h" +#include "sshbuf.h" struct hostkeys { struct hostkey_entry *entries; diff --git a/sshconnect.c b/sshconnect.c index 616ee37e8fb6..74f9e76702f0 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.349 2020/12/22 00:15:23 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.350 2021/01/26 00:49:30 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -589,36 +589,6 @@ confirm(const char *prompt, const char *fingerprint) } } -static int -check_host_cert(const char *host, const struct sshkey *key) -{ - const char *reason; - int r; - - if (sshkey_cert_check_authority(key, 1, 0, host, &reason) != 0) { - error("%s", reason); - return 0; - } - if (sshbuf_len(key->cert->critical) != 0) { - error("Certificate for %s contains unsupported " - "critical options(s)", host); - return 0; - } - if ((r = sshkey_check_cert_sigtype(key, - options.ca_sign_algorithms)) != 0) { - logit_fr(r, "certificate signature algorithm %s", - (key->cert == NULL || key->cert->signature_type == NULL) ? - "(null)" : key->cert->signature_type); - return 0; - } - /* Do not attempt hostkey update if a certificate was successful */ - if (options.update_hostkeys != 0) { - options.update_hostkeys = 0; - debug3_f("certificate host key in use; disabling UpdateHostkeys"); - } - return 1; -} - static int sockaddr_is_local(struct sockaddr *hostaddr) { @@ -963,7 +933,7 @@ check_host_key(char *hostname, const struct ssh_conn_info *cinfo, char *ip = NULL, *host = NULL; char hostline[1000], *hostp, *fp, *ra; char msg[1024]; - const char *type; + const char *type, *fail_reason; const struct hostkey_entry *host_found = NULL, *ip_found = NULL; int len, cancelled_forwarding = 0, confirmed; int local = sockaddr_is_local(hostaddr); @@ -1069,10 +1039,24 @@ check_host_key(char *hostname, const struct ssh_conn_info *cinfo, host, type, want_cert ? "certificate" : "key"); debug("Found %s in %s:%lu", want_cert ? "CA key" : "key", host_found->file, host_found->line); - if (want_cert && - !check_host_cert(options.host_key_alias == NULL ? - hostname : options.host_key_alias, host_key)) - goto fail; + if (want_cert) { + if (sshkey_cert_check_host(host_key, + options.host_key_alias == NULL ? + hostname : options.host_key_alias, 0, + options.ca_sign_algorithms, &fail_reason) != 0) { + error("%s", fail_reason); + goto fail; + } + /* + * Do not attempt hostkey update if a certificate was + * successfully matched. + */ + if (options.update_hostkeys != 0) { + options.update_hostkeys = 0; + debug3_f("certificate host key in use; " + "disabling UpdateHostkeys"); + } + } /* Turn off UpdateHostkeys if key was in system known_hosts */ if (options.update_hostkeys != 0 && (path_in_hostfiles(host_found->file, diff --git a/sshkey.c b/sshkey.c index d195a593d922..24d8ec2034c9 100644 --- a/sshkey.c +++ b/sshkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.c,v 1.113 2021/01/15 04:31:25 dtucker Exp $ */ +/* $OpenBSD: sshkey.c,v 1.114 2021/01/26 00:49:30 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * Copyright (c) 2008 Alexander von Gernler. All rights reserved. @@ -3076,7 +3076,7 @@ sshkey_certify(struct sshkey *k, struct sshkey *ca, const char *alg, int sshkey_cert_check_authority(const struct sshkey *k, - int want_host, int require_principal, + int want_host, int require_principal, int wildcard_pattern, const char *name, const char **reason) { u_int i, principal_matches; @@ -3084,7 +3084,10 @@ sshkey_cert_check_authority(const struct sshkey *k, if (reason == NULL) return SSH_ERR_INVALID_ARGUMENT; - + if (!sshkey_is_cert(k)) { + *reason = "Key is not a certificate"; + return SSH_ERR_KEY_CERT_INVALID; + } if (want_host) { if (k->cert->type != SSH2_CERT_TYPE_HOST) { *reason = "Certificate invalid: not a host certificate"; @@ -3117,7 +3120,13 @@ sshkey_cert_check_authority(const struct sshkey *k, } else if (name != NULL) { principal_matches = 0; for (i = 0; i < k->cert->nprincipals; i++) { - if (strcmp(name, k->cert->principals[i]) == 0) { + if (wildcard_pattern) { + if (match_pattern(k->cert->principals[i], + name)) { + principal_matches = 1; + break; + } + } else if (strcmp(name, k->cert->principals[i]) == 0) { principal_matches = 1; break; } @@ -3131,6 +3140,28 @@ sshkey_cert_check_authority(const struct sshkey *k, return 0; } +int +sshkey_cert_check_host(const struct sshkey *key, const char *host, + int wildcard_principals, const char *ca_sign_algorithms, + const char **reason) +{ + int r; + + if ((r = sshkey_cert_check_authority(key, 1, 0, wildcard_principals, + host, reason)) != 0) + return r; + if (sshbuf_len(key->cert->critical) != 0) { + *reason = "Certificate contains unsupported critical options"; + return SSH_ERR_KEY_CERT_INVALID; + } + if (ca_sign_algorithms != NULL && + (r = sshkey_check_cert_sigtype(key, ca_sign_algorithms)) != 0) { + *reason = "Certificate signed with disallowed algorithm"; + return SSH_ERR_KEY_CERT_INVALID; + } + return 0; +} + size_t sshkey_format_cert_validity(const struct sshkey_cert *cert, char *s, size_t l) { diff --git a/sshkey.h b/sshkey.h index 702d91901751..146c7ca8c222 100644 --- a/sshkey.h +++ b/sshkey.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.h,v 1.48 2020/11/08 11:46:12 dtucker Exp $ */ +/* $OpenBSD: sshkey.h,v 1.49 2021/01/26 00:49:30 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. @@ -195,8 +195,10 @@ int sshkey_type_plain(int); int sshkey_to_certified(struct sshkey *); int sshkey_drop_cert(struct sshkey *); int sshkey_cert_copy(const struct sshkey *, struct sshkey *); -int sshkey_cert_check_authority(const struct sshkey *, int, int, +int sshkey_cert_check_authority(const struct sshkey *, int, int, int, const char *, const char **); +int sshkey_cert_check_host(const struct sshkey *, const char *, + int , const char *, const char **); size_t sshkey_format_cert_validity(const struct sshkey_cert *, char *, size_t) __attribute__((__bounded__(__string__, 2, 3))); int sshkey_check_cert_sigtype(const struct sshkey *, const char *); diff --git a/sshsig.c b/sshsig.c index e52d83121d46..0b2203059ce0 100644 --- a/sshsig.c +++ b/sshsig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshsig.c,v 1.18 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: sshsig.c,v 1.19 2021/01/26 00:49:30 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -809,7 +809,7 @@ check_allowed_keys_line(const char *path, u_long linenum, char *line, } else if (sigopts->ca && sshkey_is_cert(sign_key) && sshkey_equal_public(sign_key->cert->signature_key, found_key)) { /* Match of certificate's CA key */ - if ((r = sshkey_cert_check_authority(sign_key, 0, 1, + if ((r = sshkey_cert_check_authority(sign_key, 0, 1, 0, principal, &reason)) != 0) { error("%s:%lu: certificate not authorized: %s", path, linenum, reason); @@ -892,7 +892,7 @@ cert_filter_principals(const char *path, u_long linenum, continue; } /* Check against principals list in certificate */ - if ((r = sshkey_cert_check_authority(cert, 0, 1, + if ((r = sshkey_cert_check_authority(cert, 0, 1, 0, cp, &reason)) != 0) { debug("%s:%lu: principal \"%s\" not authorized: %s", path, linenum, cp, reason); From dfe18a295542c169ffde8533b3d7fe42088e2de7 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 26 Jan 2021 00:51:30 +0000 Subject: [PATCH 0174/1788] upstream: make struct hostkeys public; I have no idea why I made it opaque originally. ok markus@ OpenBSD-Commit-ID: e50780b34d4bbe628d69b2405b024dd749d982f3 --- hostfile.c | 7 +------ hostfile.h | 7 +++++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hostfile.c b/hostfile.c index b381741af2d3..f5d3dde9b325 100644 --- a/hostfile.c +++ b/hostfile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.c,v 1.88 2021/01/26 00:49:30 djm Exp $ */ +/* $OpenBSD: hostfile.c,v 1.89 2021/01/26 00:51:30 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -63,11 +63,6 @@ #include "hmac.h" #include "sshbuf.h" -struct hostkeys { - struct hostkey_entry *entries; - u_int num_entries; -}; - /* XXX hmac is too easy to dictionary attack; use bcrypt? */ static int diff --git a/hostfile.h b/hostfile.h index bc828eccf087..a24a4e329059 100644 --- a/hostfile.h +++ b/hostfile.h @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.h,v 1.28 2020/12/20 23:36:51 djm Exp $ */ +/* $OpenBSD: hostfile.h,v 1.29 2021/01/26 00:51:30 djm Exp $ */ /* * Author: Tatu Ylonen @@ -30,7 +30,10 @@ struct hostkey_entry { HostkeyMarker marker; u_int note; /* caller-specific note/flag */ }; -struct hostkeys; +struct hostkeys { + struct hostkey_entry *entries; + u_int num_entries; +}; struct hostkeys *init_hostkeys(void); void load_hostkeys(struct hostkeys *, const char *, From e0e8bee8024fa9e31974244d14f03d799e5c0775 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 26 Jan 2021 00:53:31 +0000 Subject: [PATCH 0175/1788] upstream: more ssh-agent refactoring Allow confirm_key() to accept an additional reason suffix Factor publickey userauth parsing out into its own function and allow it to optionally return things it parsed out of the message to its caller. feedback/ok markus@ OpenBSD-Commit-ID: 29006515617d1aa2d8b85cd2bf667e849146477e --- ssh-agent.c | 197 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 130 insertions(+), 67 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index 1df0236fb8e6..a028c438c302 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.269 2021/01/26 00:47:47 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.270 2021/01/26 00:53:31 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -216,15 +216,16 @@ lookup_identity(struct sshkey *key) /* Check confirmation of keysign request */ static int -confirm_key(Identity *id) +confirm_key(Identity *id, const char *extra) { char *p; int ret = -1; p = sshkey_fingerprint(id->key, fingerprint_hash, SSH_FP_DEFAULT); if (p != NULL && - ask_permission("Allow use of key %s?\nKey fingerprint %s.", - id->comment, p)) + ask_permission("Allow use of key %s?\nKey fingerprint %s.%s%s", + id->comment, p, + extra == NULL ? "" : "\n", extra == NULL ? "" : extra)) ret = 0; free(p); @@ -289,74 +290,133 @@ agent_decode_alg(struct sshkey *key, u_int flags) } /* - * This function inspects a message to be signed by a FIDO key that has a - * web-like application string (i.e. one that does not begin with "ssh:". - * It checks that the message is one of those expected for SSH operations - * (pubkey userauth, sshsig, CA key signing) to exclude signing challenges - * for the web. + * Attempt to parse the contents of a buffer as a SSH publickey userauth + * request, checking its contents for consistency and matching the embedded + * key against the one that is being used for signing. + * Note: does not modify msg buffer. + * Optionally extract the username and session ID from the request. */ static int -check_websafe_message_contents(struct sshkey *key, - const u_char *msg, size_t len) +parse_userauth_request(struct sshbuf *msg, const struct sshkey *expected_key, + char **userp, struct sshbuf **sess_idp) { - int matched = 0; - struct sshbuf *b; - u_char m, n; - char *cp1 = NULL, *cp2 = NULL; + struct sshbuf *b = NULL, *sess_id = NULL; + char *user = NULL, *service = NULL, *method = NULL, *pkalg = NULL; int r; + u_char t, sig_follows; struct sshkey *mkey = NULL; - if ((b = sshbuf_from(msg, len)) == NULL) - fatal_f("sshbuf_new"); + if (userp != NULL) + *userp = NULL; + if (sess_idp != NULL) + *sess_idp = NULL; + if ((b = sshbuf_fromb(msg)) == NULL) + fatal_f("sshbuf_fromb"); /* SSH userauth request */ - if ((r = sshbuf_get_string_direct(b, NULL, NULL)) == 0 && /* sess_id */ - (r = sshbuf_get_u8(b, &m)) == 0 && /* SSH2_MSG_USERAUTH_REQUEST */ - (r = sshbuf_get_cstring(b, NULL, NULL)) == 0 && /* server user */ - (r = sshbuf_get_cstring(b, &cp1, NULL)) == 0 && /* service */ - (r = sshbuf_get_cstring(b, &cp2, NULL)) == 0 && /* method */ - (r = sshbuf_get_u8(b, &n)) == 0 && /* sig-follows */ - (r = sshbuf_get_cstring(b, NULL, NULL)) == 0 && /* alg */ - (r = sshkey_froms(b, &mkey)) == 0 && /* key */ - sshbuf_len(b) == 0) { - debug_f("parsed userauth"); - if (m == SSH2_MSG_USERAUTH_REQUEST && n == 1 && - strcmp(cp1, "ssh-connection") == 0 && - strcmp(cp2, "publickey") == 0 && - sshkey_equal(key, mkey)) { - debug_f("well formed userauth"); - matched = 1; - } + if ((r = sshbuf_froms(b, &sess_id)) != 0) + goto out; + if (sshbuf_len(sess_id) == 0) { + r = SSH_ERR_INVALID_FORMAT; + goto out; } - free(cp1); - free(cp2); - sshkey_free(mkey); + if ((r = sshbuf_get_u8(b, &t)) != 0 || /* SSH2_MSG_USERAUTH_REQUEST */ + (r = sshbuf_get_cstring(b, &user, NULL)) != 0 || /* server user */ + (r = sshbuf_get_cstring(b, &service, NULL)) != 0 || /* service */ + (r = sshbuf_get_cstring(b, &method, NULL)) != 0 || /* method */ + (r = sshbuf_get_u8(b, &sig_follows)) != 0 || /* sig-follows */ + (r = sshbuf_get_cstring(b, &pkalg, NULL)) != 0 || /* alg */ + (r = sshkey_froms(b, &mkey)) != 0) /* key */ + goto out; + if (t != SSH2_MSG_USERAUTH_REQUEST || + sig_follows != 1 || + strcmp(service, "ssh-connection") != 0 || + !sshkey_equal(expected_key, mkey) || + sshkey_type_from_name(pkalg) != expected_key->type) { + r = SSH_ERR_INVALID_FORMAT; + goto out; + } + if (strcmp(method, "publickey") != 0) { + r = SSH_ERR_INVALID_FORMAT; + goto out; + } + if (sshbuf_len(b) != 0) { + r = SSH_ERR_INVALID_FORMAT; + goto out; + } + /* success */ + r = 0; + debug3_f("well formed userauth"); + if (userp != NULL) { + *userp = user; + user = NULL; + } + if (sess_idp != NULL) { + *sess_idp = sess_id; + sess_id = NULL; + } + out: sshbuf_free(b); - if (matched) - return 1; + sshbuf_free(sess_id); + free(user); + free(service); + free(method); + free(pkalg); + sshkey_free(mkey); + return r; +} - if ((b = sshbuf_from(msg, len)) == NULL) - fatal_f("sshbuf_new"); - cp1 = cp2 = NULL; - mkey = NULL; - - /* SSHSIG */ - if ((r = sshbuf_cmp(b, 0, "SSHSIG", 6)) == 0 && - (r = sshbuf_consume(b, 6)) == 0 && - (r = sshbuf_get_cstring(b, NULL, NULL)) == 0 && /* namespace */ - (r = sshbuf_get_string_direct(b, NULL, NULL)) == 0 && /* reserved */ - (r = sshbuf_get_cstring(b, NULL, NULL)) == 0 && /* hashalg */ - (r = sshbuf_get_string_direct(b, NULL, NULL)) == 0 && /* H(msg) */ - sshbuf_len(b) == 0) { - debug_f("parsed sshsig"); - matched = 1; - } +/* + * Attempt to parse the contents of a buffer as a SSHSIG signature request. + * Note: does not modify buffer. + */ +static int +parse_sshsig_request(struct sshbuf *msg) +{ + int r; + struct sshbuf *b; + if ((b = sshbuf_fromb(msg)) == NULL) + fatal_f("sshbuf_fromb"); + + if ((r = sshbuf_cmp(b, 0, "SSHSIG", 6)) != 0 || + (r = sshbuf_consume(b, 6)) != 0 || + (r = sshbuf_get_cstring(b, NULL, NULL)) != 0 || /* namespace */ + (r = sshbuf_get_string_direct(b, NULL, NULL)) != 0 || /* reserved */ + (r = sshbuf_get_cstring(b, NULL, NULL)) != 0 || /* hashalg */ + (r = sshbuf_get_string_direct(b, NULL, NULL)) != 0) /* H(msg) */ + goto out; + if (sshbuf_len(b) != 0) { + r = SSH_ERR_INVALID_FORMAT; + goto out; + } + /* success */ + r = 0; + out: sshbuf_free(b); - if (matched) + return r; +} + +/* + * This function inspects a message to be signed by a FIDO key that has a + * web-like application string (i.e. one that does not begin with "ssh:". + * It checks that the message is one of those expected for SSH operations + * (pubkey userauth, sshsig, CA key signing) to exclude signing challenges + * for the web. + */ +static int +check_websafe_message_contents(struct sshkey *key, struct sshbuf *data) +{ + if (parse_userauth_request(data, key, NULL, NULL) == 0) { + debug_f("signed data matches public key userauth request"); return 1; + } + if (parse_sshsig_request(data) == 0) { + debug_f("signed data matches SSHSIG signature request"); + return 1; + } - /* XXX CA signature operation */ + /* XXX check CA signature operation */ error("web-origin key attempting to sign non-SSH message"); return 0; @@ -366,21 +426,22 @@ check_websafe_message_contents(struct sshkey *key, static void process_sign_request2(SocketEntry *e) { - const u_char *data; u_char *signature = NULL; - size_t dlen, slen = 0; + size_t i, slen = 0; u_int compat = 0, flags; int r, ok = -1; char *fp = NULL; - struct sshbuf *msg; + struct sshbuf *msg = NULL, *data = NULL; struct sshkey *key = NULL; struct identity *id; struct notifier_ctx *notifier = NULL; - if ((msg = sshbuf_new()) == NULL) + debug_f("entering"); + + if ((msg = sshbuf_new()) == NULL | (data = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); if ((r = sshkey_froms(e->request, &key)) != 0 || - (r = sshbuf_get_string_direct(e->request, &data, &dlen)) != 0 || + (r = sshbuf_get_stringb(e->request, data)) != 0 || (r = sshbuf_get_u32(e->request, &flags)) != 0) { error_fr(r, "parse"); goto send; @@ -390,13 +451,13 @@ process_sign_request2(SocketEntry *e) verbose_f("%s key not found", sshkey_type(key)); goto send; } - if (id->confirm && confirm_key(id) != 0) { + if (id->confirm && confirm_key(id, NULL) != 0) { verbose_f("user refused key"); goto send; } if (sshkey_is_sk(id->key)) { if (strncmp(id->key->sk_application, "ssh:", 4) != 0 && - !check_websafe_message_contents(key, data, dlen)) { + !check_websafe_message_contents(key, data)) { /* error already logged */ goto send; } @@ -411,7 +472,7 @@ process_sign_request2(SocketEntry *e) } /* XXX support PIN required FIDO keys */ if ((r = sshkey_sign(id->key, &signature, &slen, - data, dlen, agent_decode_alg(key, flags), + sshbuf_ptr(data), sshbuf_len(data), agent_decode_alg(key, flags), id->sk_provider, NULL, compat)) != 0) { error_fr(r, "sshkey_sign"); goto send; @@ -420,8 +481,7 @@ process_sign_request2(SocketEntry *e) ok = 0; send: notify_complete(notifier, "User presence confirmed"); - sshkey_free(key); - free(fp); + if (ok == 0) { if ((r = sshbuf_put_u8(msg, SSH2_AGENT_SIGN_RESPONSE)) != 0 || (r = sshbuf_put_string(msg, signature, slen)) != 0) @@ -432,7 +492,10 @@ process_sign_request2(SocketEntry *e) if ((r = sshbuf_put_stringb(e->output, msg)) != 0) fatal_fr(r, "enqueue"); + sshbuf_free(data); sshbuf_free(msg); + sshkey_free(key); + free(fp); free(signature); } From 37c70ea8d4f3664a88141bcdf0bf7a16bd5fd1ac Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 26 Jan 2021 00:54:49 +0000 Subject: [PATCH 0176/1788] upstream: refactor key constraint parsing in ssh-agent Key constraints parsing code previously existed in both the "add regular key" and "add smartcard key" path. This unifies them but also introduces more consistency checking: duplicated constraints and constraints that are nonsensical for a particular situation (e.g. FIDO provider for a smartcard key) are now banned. ok markus@ OpenBSD-Commit-ID: 511cb1b1c021ee1d51a4c2d649b937445de7983c --- ssh-agent.c | 164 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 95 insertions(+), 69 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index a028c438c302..527e66532f5a 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.270 2021/01/26 00:53:31 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.271 2021/01/26 00:54:49 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -574,44 +574,52 @@ reaper(void) return (deadline - now); } -static void -process_add_identity(SocketEntry *e) +static int +parse_key_constraints(struct sshbuf *m, struct sshkey *k, time_t *deathp, + u_int *secondsp, int *confirmp, char **sk_providerp) { - Identity *id; - int success = 0, confirm = 0; - u_int seconds = 0, maxsign; - char *fp, *comment = NULL, *ext_name = NULL, *sk_provider = NULL; - char canonical_provider[PATH_MAX]; - time_t death = 0; - struct sshkey *k = NULL; u_char ctype; - int r = SSH_ERR_INTERNAL_ERROR; + int r; + u_int seconds, maxsign = 0; + char *ext_name = NULL, *sk_provider = NULL; + size_t pos; + struct sshbuf *b = NULL; - debug2_f("entering"); - if ((r = sshkey_private_deserialize(e->request, &k)) != 0 || - k == NULL || - (r = sshbuf_get_cstring(e->request, &comment, NULL)) != 0) { - error_fr(r, "parse"); - goto err; - } - while (sshbuf_len(e->request)) { - if ((r = sshbuf_get_u8(e->request, &ctype)) != 0) { + while (sshbuf_len(m)) { + if ((r = sshbuf_get_u8(m, &ctype)) != 0) { error_fr(r, "parse constraint type"); goto err; } switch (ctype) { case SSH_AGENT_CONSTRAIN_LIFETIME: - if ((r = sshbuf_get_u32(e->request, &seconds)) != 0) { + if (*deathp != 0) { + error_f("lifetime already set"); + goto err; + } + if ((r = sshbuf_get_u32(m, &seconds)) != 0) { error_fr(r, "parse lifetime constraint"); goto err; } - death = monotime() + seconds; + *deathp = monotime() + seconds; + *secondsp = seconds; break; case SSH_AGENT_CONSTRAIN_CONFIRM: - confirm = 1; + if (*confirmp != 0) { + error_f("confirm already set"); + goto err; + } + *confirmp = 1; break; case SSH_AGENT_CONSTRAIN_MAXSIGN: - if ((r = sshbuf_get_u32(e->request, &maxsign)) != 0) { + if (k == NULL) { + error_f("maxsign not valid here"); + goto err; + } + if (maxsign != 0) { + error_f("maxsign already set"); + goto err; + } + if ((r = sshbuf_get_u32(m, &maxsign)) != 0) { error_fr(r, "parse maxsign constraint"); goto err; } @@ -621,19 +629,22 @@ process_add_identity(SocketEntry *e) } break; case SSH_AGENT_CONSTRAIN_EXTENSION: - if ((r = sshbuf_get_cstring(e->request, - &ext_name, NULL)) != 0) { + if ((r = sshbuf_get_cstring(m, &ext_name, NULL)) != 0) { error_fr(r, "parse constraint extension"); goto err; } debug_f("constraint ext %s", ext_name); if (strcmp(ext_name, "sk-provider@openssh.com") == 0) { - if (sk_provider != NULL) { - error("%s already set", ext_name); + if (sk_providerp == NULL) { + error_f("%s not valid here", ext_name); goto err; } - if ((r = sshbuf_get_cstring(e->request, - &sk_provider, NULL)) != 0) { + if (*sk_providerp != NULL) { + error_f("%s already set", ext_name); + goto err; + } + if ((r = sshbuf_get_cstring(m, + sk_providerp, NULL)) != 0) { error_fr(r, "parse %s", ext_name); goto err; } @@ -647,20 +658,46 @@ process_add_identity(SocketEntry *e) default: error_f("Unknown constraint %d", ctype); err: - free(sk_provider); free(ext_name); - sshbuf_reset(e->request); - free(comment); - sshkey_free(k); - goto send; + sshbuf_free(b); + return -1; } } + /* success */ + return 0; +} + +static void +process_add_identity(SocketEntry *e) +{ + Identity *id; + int success = 0, confirm = 0; + char *fp, *comment = NULL, *ext_name = NULL, *sk_provider = NULL; + char canonical_provider[PATH_MAX]; + time_t death = 0; + u_int seconds = 0; + struct sshkey *k = NULL; + int r = SSH_ERR_INTERNAL_ERROR; + + debug2_f("entering"); + if ((r = sshkey_private_deserialize(e->request, &k)) != 0 || + k == NULL || + (r = sshbuf_get_cstring(e->request, &comment, NULL)) != 0) { + error_fr(r, "parse"); + goto out; + } + if (parse_key_constraints(e->request, k, &death, &seconds, &confirm, + &sk_provider) != 0) { + error_f("failed to parse constraints"); + sshbuf_reset(e->request); + goto out; + } + if (sk_provider != NULL) { if (!sshkey_is_sk(k)) { error("Cannot add provider: %s is not an " "authenticator-hosted key", sshkey_type(k)); - free(sk_provider); - goto send; + goto out; } if (strcasecmp(sk_provider, "internal") == 0) { debug_f("internal provider"); @@ -669,8 +706,7 @@ process_add_identity(SocketEntry *e) verbose("failed provider \"%.100s\": " "realpath: %s", sk_provider, strerror(errno)); - free(sk_provider); - goto send; + goto out; } free(sk_provider); sk_provider = xstrdup(canonical_provider); @@ -678,17 +714,14 @@ process_add_identity(SocketEntry *e) allowed_providers, 0) != 1) { error("Refusing add key: " "provider %s not allowed", sk_provider); - free(sk_provider); - goto send; + goto out; } } } if ((r = sshkey_shield_private(k)) != 0) { error_fr(r, "shield private"); - goto err; + goto out; } - - success = 1; if (lifetime && !death) death = monotime() + lifetime; if ((id = lookup_identity(k)) == NULL) { @@ -702,6 +735,7 @@ process_add_identity(SocketEntry *e) free(id->comment); free(id->sk_provider); } + /* success */ id->key = k; id->comment = comment; id->death = death; @@ -712,10 +746,18 @@ process_add_identity(SocketEntry *e) SSH_FP_DEFAULT)) == NULL) fatal_f("sshkey_fingerprint failed"); debug_f("add %s %s \"%.100s\" (life: %u) (confirm: %u) " - "(provider: %s)", sshkey_ssh_name(k), fp, comment, - seconds, confirm, sk_provider == NULL ? "none" : sk_provider); + "(provider: %s)", sshkey_ssh_name(k), fp, comment, seconds, + confirm, sk_provider == NULL ? "none" : sk_provider); free(fp); -send: + /* transferred */ + k = NULL; + comment = NULL; + sk_provider = NULL; + success = 1; + out: + free(sk_provider); + free(comment); + sshkey_free(k); send_status(e, success); } @@ -794,7 +836,7 @@ process_add_smartcard_key(SocketEntry *e) char *provider = NULL, *pin = NULL, canonical_provider[PATH_MAX]; char **comments = NULL; int r, i, count = 0, success = 0, confirm = 0; - u_int seconds; + u_int seconds = 0; time_t death = 0; u_char type; struct sshkey **keys = NULL, *k; @@ -806,27 +848,10 @@ process_add_smartcard_key(SocketEntry *e) error_fr(r, "parse"); goto send; } - - while (sshbuf_len(e->request)) { - if ((r = sshbuf_get_u8(e->request, &type)) != 0) { - error_fr(r, "parse type"); - goto send; - } - switch (type) { - case SSH_AGENT_CONSTRAIN_LIFETIME: - if ((r = sshbuf_get_u32(e->request, &seconds)) != 0) { - error_fr(r, "parse lifetime"); - goto send; - } - death = monotime() + seconds; - break; - case SSH_AGENT_CONSTRAIN_CONFIRM: - confirm = 1; - break; - default: - error_f("Unknown constraint type %d", type); - goto send; - } + if (parse_key_constraints(e->request, NULL, &death, &seconds, &confirm, + NULL) != 0) { + error_f("failed to parse constraints"); + goto send; } if (realpath(provider, canonical_provider) == NULL) { verbose("failed PKCS#11 add of \"%.100s\": realpath: %s", @@ -862,6 +887,7 @@ process_add_smartcard_key(SocketEntry *e) idtab->nentries++; success = 1; } + /* XXX update constraints for existing keys */ sshkey_free(keys[i]); free(comments[i]); } From 48d0d7a4dd31154c4208ec39029d60646192f978 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 26 Jan 2021 14:48:07 +1100 Subject: [PATCH 0177/1788] Disable sntrup761 if compiler doesn't support VLAs. The sntrup761 code sourced from supercop uses variable length arrays. Although widely supported, they are not part of the ANSI C89 spec so if the compiler does not support VLAs, disable the sntrup761x25519-sha512@openssh.com KEX method by replacing the kex functions with no-op ones similar to what we do in kexecdh.c. This should allow OpenSSH to build with a plain C89 compiler again. Spotted by tim@, ok djm@. --- configure.ac | 10 ++++++++++ defines.h | 7 +++++++ kex.c | 2 ++ kexsntrup761x25519.c | 32 ++++++++++++++++++++++++++++++++ sntrup761.c | 4 +++- 5 files changed, 54 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 35d1aca9fc90..0cd1025f6fac 100644 --- a/configure.ac +++ b/configure.ac @@ -297,6 +297,16 @@ typedef void foo(const char *, ...) __attribute__((format(printf, 1, 2)));]], [compiler does not accept __attribute__ on prototype args]) ] ) +AC_MSG_CHECKING([if compiler supports variable length arrays]) +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ int i; for (i=0; i<3; i++){int a[i]; a[i-1]=0;} exit(0); ]])], + [ AC_MSG_RESULT([yes]) + AC_DEFINE(VARIABLE_LENGTH_ARRAYS, [1], + [compiler supports variable length arrays]) ], + [ AC_MSG_RESULT([no]) ] +) + if test "x$no_attrib_nonnull" != "x1" ; then AC_DEFINE([HAVE_ATTRIBUTE__NONNULL__], [1], [Have attribute nonnull]) fi diff --git a/defines.h b/defines.h index 79dcb507feeb..d6a1d014cab9 100644 --- a/defines.h +++ b/defines.h @@ -894,4 +894,11 @@ struct winsize { # define USE_SYSTEM_GLOB #endif +/* + * sntrup761 uses variable length arrays, only enable if the compiler + * supports them. + */ +#ifdef VARIABLE_LENGTH_ARRAYS +# define USE_SNTRUP761X25519 1 +#endif #endif /* _DEFINES_H */ diff --git a/kex.c b/kex.c index f08143a5daf5..3269b2c3152f 100644 --- a/kex.c +++ b/kex.c @@ -110,8 +110,10 @@ static const struct kexalg kexalgs[] = { #if defined(HAVE_EVP_SHA256) || !defined(WITH_OPENSSL) { KEX_CURVE25519_SHA256, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, { KEX_CURVE25519_SHA256_OLD, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, +#ifdef USE_SNTRUP761X25519 { KEX_SNTRUP761X25519_SHA512, KEX_KEM_SNTRUP761X25519_SHA512, 0, SSH_DIGEST_SHA512 }, +#endif #endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */ { NULL, 0, -1, -1}, }; diff --git a/kexsntrup761x25519.c b/kexsntrup761x25519.c index 3d5c6bdf04a5..e3007fa29125 100644 --- a/kexsntrup761x25519.c +++ b/kexsntrup761x25519.c @@ -25,6 +25,8 @@ #include "includes.h" +#ifdef USE_SNTRUP761X25519 + #include #include @@ -217,3 +219,33 @@ kex_kem_sntrup761x25519_dec(struct kex *kex, sshbuf_free(buf); return r; } + +#else + +#include "ssherr.h" + +struct kex; +struct sshbuf; +struct sshkey; + +int +kex_kem_sntrup761x25519_keypair(struct kex *kex) +{ + return SSH_ERR_SIGN_ALG_UNSUPPORTED; +} + +int +kex_kem_sntrup761x25519_enc(struct kex *kex, + const struct sshbuf *client_blob, struct sshbuf **server_blobp, + struct sshbuf **shared_secretp) +{ + return SSH_ERR_SIGN_ALG_UNSUPPORTED; +} + +int +kex_kem_sntrup761x25519_dec(struct kex *kex, + const struct sshbuf *server_blob, struct sshbuf **shared_secretp) +{ + return SSH_ERR_SIGN_ALG_UNSUPPORTED; +} +#endif /* USE_SNTRUP761X25519 */ diff --git a/sntrup761.c b/sntrup761.c index 01f1bc3445a1..c63e600fb5b4 100644 --- a/sntrup761.c +++ b/sntrup761.c @@ -10,6 +10,8 @@ #include "includes.h" +#ifdef USE_SNTRUP761X25519 + #include #include "crypto_api.h" @@ -1268,4 +1270,4 @@ int crypto_kem_sntrup761_dec(unsigned char *k,const unsigned char *c,const unsig Decap(k,c,sk); return 0; } - +#endif /* USE_SNTRUP761X25519 */ From e9f78d6b06fc323bba1890b2dc3b8423138fb35c Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Tue, 26 Jan 2021 05:32:21 +0000 Subject: [PATCH 0178/1788] upstream: Rename HostbasedKeyTypes (ssh) and HostbasedAcceptedKeyTypes (sshd) to HostbasedAcceptedAlgorithms, which more accurately reflects its effect. This matches a previous change to PubkeyAcceptedAlgorithms. The previous names are retained as aliases. ok djm@ OpenBSD-Commit-ID: 49451c382adc6e69d3fa0e0663eeef2daa4b199e --- auth2-hostbased.c | 6 +++--- monitor.c | 4 ++-- readconf.c | 19 ++++++++++--------- readconf.h | 4 ++-- scp.1 | 6 +++--- servconf.c | 17 +++++++++-------- servconf.h | 6 +++--- sftp.1 | 6 +++--- ssh.1 | 6 +++--- ssh.c | 7 ++++--- ssh_config.5 | 7 ++++--- sshconnect2.c | 6 +++--- sshd_config.5 | 11 ++++++----- 13 files changed, 55 insertions(+), 50 deletions(-) diff --git a/auth2-hostbased.c b/auth2-hostbased.c index ae43dd8af37f..3bc799c42697 100644 --- a/auth2-hostbased.c +++ b/auth2-hostbased.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-hostbased.c,v 1.44 2021/01/26 00:49:30 djm Exp $ */ +/* $OpenBSD: auth2-hostbased.c,v 1.45 2021/01/26 05:32:21 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -108,8 +108,8 @@ userauth_hostbased(struct ssh *ssh) "signature format"); goto done; } - if (match_pattern_list(pkalg, options.hostbased_key_types, 0) != 1) { - logit_f("key type %s not in HostbasedAcceptedKeyTypes", + if (match_pattern_list(pkalg, options.hostbased_accepted_algos, 0) != 1) { + logit_f("key type %s not in HostbasedAcceptedAlgorithms", sshkey_type(key)); goto done; } diff --git a/monitor.c b/monitor.c index 559eb9f68ff5..6a63aa990f1d 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.220 2021/01/22 02:44:58 dtucker Exp $ */ +/* $OpenBSD: monitor.c,v 1.221 2021/01/26 05:32:21 dtucker Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -1198,7 +1198,7 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) if (auth2_key_already_used(authctxt, key)) break; if (!key_base_type_match(auth_method, key, - options.hostbased_key_types)) + options.hostbased_accepted_algos)) break; allowed = hostbased_key_allowed(ssh, authctxt->pw, cuser, chost, key); diff --git a/readconf.c b/readconf.c index c7df93de07e4..c9cd7f7056dd 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.349 2021/01/22 02:44:58 dtucker Exp $ */ +/* $OpenBSD: readconf.c,v 1.350 2021/01/26 05:32:21 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -170,7 +170,7 @@ typedef enum { oCanonicalDomains, oCanonicalizeHostname, oCanonicalizeMaxDots, oCanonicalizeFallbackLocal, oCanonicalizePermittedCNAMEs, oStreamLocalBindMask, oStreamLocalBindUnlink, oRevokedHostKeys, - oFingerprintHash, oUpdateHostkeys, oHostbasedKeyTypes, + oFingerprintHash, oUpdateHostkeys, oHostbasedAcceptedAlgorithms, oPubkeyAcceptedAlgorithms, oCASignatureAlgorithms, oProxyJump, oSecurityKeyProvider, oKnownHostsCommand, oIgnore, oIgnoredUnknownOption, oDeprecated, oUnsupported @@ -306,7 +306,8 @@ static struct { { "revokedhostkeys", oRevokedHostKeys }, { "fingerprinthash", oFingerprintHash }, { "updatehostkeys", oUpdateHostkeys }, - { "hostbasedkeytypes", oHostbasedKeyTypes }, + { "hostbasedkeytypes", oHostbasedAcceptedAlgorithms }, /* obsolete */ + { "hostbasedalgorithms", oHostbasedAcceptedAlgorithms }, { "pubkeyacceptedkeytypes", oPubkeyAcceptedAlgorithms }, /* obsolete */ { "pubkeyacceptedalgorithms", oPubkeyAcceptedAlgorithms }, { "ignoreunknown", oIgnoreUnknown }, @@ -1933,8 +1934,8 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, multistate_ptr = multistate_yesnoask; goto parse_multistate; - case oHostbasedKeyTypes: - charptr = &options->hostbased_key_types; + case oHostbasedAcceptedAlgorithms: + charptr = &options->hostbased_accepted_algos; goto parse_pubkey_algos; case oPubkeyAcceptedAlgorithms: @@ -2221,7 +2222,7 @@ initialize_options(Options * options) options->revoked_host_keys = NULL; options->fingerprint_hash = -1; options->update_hostkeys = -1; - options->hostbased_key_types = NULL; + options->hostbased_accepted_algos = NULL; options->pubkey_accepted_algos = NULL; options->known_hosts_command = NULL; } @@ -2440,7 +2441,7 @@ fill_default_options(Options * options) ASSEMBLE(ciphers, def_cipher, all_cipher); ASSEMBLE(macs, def_mac, all_mac); ASSEMBLE(kex_algorithms, def_kex, all_kex); - ASSEMBLE(hostbased_key_types, def_key, all_key); + ASSEMBLE(hostbased_accepted_algos, def_key, all_key); ASSEMBLE(pubkey_accepted_algos, def_key, all_key); ASSEMBLE(ca_sign_algorithms, def_sig, all_sig); #undef ASSEMBLE @@ -2560,7 +2561,7 @@ free_options(Options *o) free(o->permitted_cnames[i].target_list); } free(o->revoked_host_keys); - free(o->hostbased_key_types); + free(o->hostbased_accepted_algos); free(o->pubkey_accepted_algos); free(o->jump_user); free(o->jump_host); @@ -3087,7 +3088,7 @@ dump_client_config(Options *o, const char *host) dump_cfg_string(oControlPath, o->control_path); dump_cfg_string(oHostKeyAlgorithms, o->hostkeyalgorithms); dump_cfg_string(oHostKeyAlias, o->host_key_alias); - dump_cfg_string(oHostbasedKeyTypes, o->hostbased_key_types); + dump_cfg_string(oHostbasedAcceptedAlgorithms, o->hostbased_accepted_algos); dump_cfg_string(oIdentityAgent, o->identity_agent); dump_cfg_string(oIgnoreUnknown, o->ignored_unknown); dump_cfg_string(oKbdInteractiveDevices, o->kbd_interactive_devices); diff --git a/readconf.h b/readconf.h index 4ee730b95598..6e7e95e7fbf1 100644 --- a/readconf.h +++ b/readconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.h,v 1.138 2021/01/22 02:44:58 dtucker Exp $ */ +/* $OpenBSD: readconf.h,v 1.139 2021/01/26 05:32:21 dtucker Exp $ */ /* * Author: Tatu Ylonen @@ -161,7 +161,7 @@ typedef struct { int update_hostkeys; /* one of SSH_UPDATE_HOSTKEYS_* */ - char *hostbased_key_types; + char *hostbased_accepted_algos; char *pubkey_accepted_algos; char *jump_user; diff --git a/scp.1 b/scp.1 index c0e0082c02c9..45cffdac4c87 100644 --- a/scp.1 +++ b/scp.1 @@ -8,9 +8,9 @@ .\" .\" Created: Sun May 7 00:14:37 1995 ylo .\" -.\" $OpenBSD: scp.1,v 1.93 2021/01/22 02:44:58 dtucker Exp $ +.\" $OpenBSD: scp.1,v 1.94 2021/01/26 05:32:21 dtucker Exp $ .\" -.Dd $Mdocdate: January 22 2021 $ +.Dd $Mdocdate: January 26 2021 $ .Dt SCP 1 .Os .Sh NAME @@ -173,7 +173,7 @@ For full details of the options listed below, and their possible values, see .It HashKnownHosts .It Host .It HostbasedAuthentication -.It HostbasedKeyTypes +.It HostbasedAcceptedAlgorithms .It HostKeyAlgorithms .It HostKeyAlias .It Hostname diff --git a/servconf.c b/servconf.c index a28918e2f21d..7f336a123a30 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.374 2021/01/22 02:44:58 dtucker Exp $ */ +/* $OpenBSD: servconf.c,v 1.375 2021/01/26 05:32:21 dtucker Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -126,7 +126,7 @@ initialize_server_options(ServerOptions *options) options->log_verbose = NULL; options->hostbased_authentication = -1; options->hostbased_uses_name_from_packet_only = -1; - options->hostbased_key_types = NULL; + options->hostbased_accepted_algos = NULL; options->hostkeyalgorithms = NULL; options->pubkey_authentication = -1; options->pubkey_auth_options = -1; @@ -232,7 +232,7 @@ assemble_algorithms(ServerOptions *o) ASSEMBLE(macs, def_mac, all_mac); ASSEMBLE(kex_algorithms, def_kex, all_kex); ASSEMBLE(hostkeyalgorithms, def_key, all_key); - ASSEMBLE(hostbased_key_types, def_key, all_key); + ASSEMBLE(hostbased_accepted_algos, def_key, all_key); ASSEMBLE(pubkey_accepted_algos, def_key, all_key); ASSEMBLE(ca_sign_algorithms, def_sig, all_sig); #undef ASSEMBLE @@ -530,7 +530,7 @@ typedef enum { sGatewayPorts, sPubkeyAuthentication, sPubkeyAcceptedAlgorithms, sXAuthLocation, sSubsystem, sMaxStartups, sMaxAuthTries, sMaxSessions, sBanner, sUseDNS, sHostbasedAuthentication, - sHostbasedUsesNameFromPacketOnly, sHostbasedAcceptedKeyTypes, + sHostbasedUsesNameFromPacketOnly, sHostbasedAcceptedAlgorithms, sHostKeyAlgorithms, sPerSourceMaxStartups, sPerSourceNetBlockSize, sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, sGssAuthentication, sGssCleanupCreds, sGssStrictAcceptor, @@ -585,7 +585,8 @@ static struct { { "rhostsrsaauthentication", sDeprecated, SSHCFG_ALL }, { "hostbasedauthentication", sHostbasedAuthentication, SSHCFG_ALL }, { "hostbasedusesnamefrompacketonly", sHostbasedUsesNameFromPacketOnly, SSHCFG_ALL }, - { "hostbasedacceptedkeytypes", sHostbasedAcceptedKeyTypes, SSHCFG_ALL }, + { "hostbasedacceptedkeytypes", sHostbasedAcceptedAlgorithms, SSHCFG_ALL }, /* obsolete */ + { "hostbasedacceptedalgorithms", sHostbasedAcceptedAlgorithms, SSHCFG_ALL }, { "hostkeyalgorithms", sHostKeyAlgorithms, SSHCFG_GLOBAL }, { "rsaauthentication", sDeprecated, SSHCFG_ALL }, { "pubkeyauthentication", sPubkeyAuthentication, SSHCFG_ALL }, @@ -1500,8 +1501,8 @@ process_server_config_line_depth(ServerOptions *options, char *line, intptr = &options->hostbased_uses_name_from_packet_only; goto parse_flag; - case sHostbasedAcceptedKeyTypes: - charptr = &options->hostbased_key_types; + case sHostbasedAcceptedAlgorithms: + charptr = &options->hostbased_accepted_algos; parse_pubkey_algos: arg = strdelim(&cp); if (!arg || *arg == '\0') @@ -2920,7 +2921,7 @@ dump_config(ServerOptions *o) dump_cfg_string(sHostKeyAgent, o->host_key_agent); dump_cfg_string(sKexAlgorithms, o->kex_algorithms); dump_cfg_string(sCASignatureAlgorithms, o->ca_sign_algorithms); - dump_cfg_string(sHostbasedAcceptedKeyTypes, o->hostbased_key_types); + dump_cfg_string(sHostbasedAcceptedAlgorithms, o->hostbased_accepted_algos); dump_cfg_string(sHostKeyAlgorithms, o->hostkeyalgorithms); dump_cfg_string(sPubkeyAcceptedAlgorithms, o->pubkey_accepted_algos); #if defined(__OpenBSD__) || defined(HAVE_SYS_SET_PROCESS_RDOMAIN) diff --git a/servconf.h b/servconf.h index 364cd947f316..4f4fd9ba4686 100644 --- a/servconf.h +++ b/servconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: servconf.h,v 1.150 2021/01/22 02:44:58 dtucker Exp $ */ +/* $OpenBSD: servconf.h,v 1.151 2021/01/26 05:32:21 dtucker Exp $ */ /* * Author: Tatu Ylonen @@ -122,7 +122,7 @@ typedef struct { char **log_verbose; int hostbased_authentication; /* If true, permit ssh2 hostbased auth */ int hostbased_uses_name_from_packet_only; /* experimental */ - char *hostbased_key_types; /* Key types allowed for hostbased */ + char *hostbased_accepted_algos; /* Algos allowed for hostbased */ char *hostkeyalgorithms; /* SSH2 server key types */ char *ca_sign_algorithms; /* Allowed CA signature algorithms */ int pubkey_authentication; /* If true, permit ssh2 pubkey authentication. */ @@ -271,7 +271,7 @@ TAILQ_HEAD(include_list, include_item); M_CP_STROPT(authorized_principals_file); \ M_CP_STROPT(authorized_principals_command); \ M_CP_STROPT(authorized_principals_command_user); \ - M_CP_STROPT(hostbased_key_types); \ + M_CP_STROPT(hostbased_accepted_algos); \ M_CP_STROPT(pubkey_accepted_algos); \ M_CP_STROPT(ca_sign_algorithms); \ M_CP_STROPT(routing_domain); \ diff --git a/sftp.1 b/sftp.1 index 685b3ff91f0d..6e713e64338f 100644 --- a/sftp.1 +++ b/sftp.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: sftp.1,v 1.134 2021/01/22 02:44:58 dtucker Exp $ +.\" $OpenBSD: sftp.1,v 1.135 2021/01/26 05:32:21 dtucker Exp $ .\" .\" Copyright (c) 2001 Damien Miller. All rights reserved. .\" @@ -22,7 +22,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: January 22 2021 $ +.Dd $Mdocdate: January 26 2021 $ .Dt SFTP 1 .Os .Sh NAME @@ -247,7 +247,7 @@ For full details of the options listed below, and their possible values, see .It HashKnownHosts .It Host .It HostbasedAuthentication -.It HostbasedKeyTypes +.It HostbasedAcceptedAlgorithms .It HostKeyAlgorithms .It HostKeyAlias .It Hostname diff --git a/ssh.1 b/ssh.1 index 0716177cf7b7..a9f67b4b9c96 100644 --- a/ssh.1 +++ b/ssh.1 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh.1,v 1.416 2021/01/22 02:46:40 dtucker Exp $ -.Dd $Mdocdate: January 22 2021 $ +.\" $OpenBSD: ssh.1,v 1.417 2021/01/26 05:32:21 dtucker Exp $ +.Dd $Mdocdate: January 26 2021 $ .Dt SSH 1 .Os .Sh NAME @@ -510,7 +510,7 @@ For full details of the options listed below, and their possible values, see .It HashKnownHosts .It Host .It HostbasedAuthentication -.It HostbasedKeyTypes +.It HostbasedAcceptedAlgorithms .It HostKeyAlgorithms .It HostKeyAlias .It Hostname diff --git a/ssh.c b/ssh.c index ccba18310fa3..dc6bd16d0603 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.547 2021/01/22 02:44:58 dtucker Exp $ */ +/* $OpenBSD: ssh.c,v 1.548 2021/01/26 05:32:22 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -802,8 +802,9 @@ main(int ac, char **av) strcasecmp(optarg, "PubkeyAcceptedKeyTypes") == 0 || /* deprecated name */ strcasecmp(optarg, "PubkeyAcceptedAlgorithms") == 0 || strcasecmp(optarg, "HostKeyAlgorithms") == 0 || - strcasecmp(optarg, "HostbasedKeyTypes") == 0 || - strcasecmp(optarg, "HostbasedAcceptedKeyTypes") == 0) + strcasecmp(optarg, "HostbasedKeyTypes") == 0 || /* deprecated name */ + strcasecmp(optarg, "HostbasedAcceptedKeyTypes") == 0 || /* deprecated name */ + strcasecmp(optarg, "HostbasedAcceptedAlgorithms") == 0) cp = sshkey_alg_list(0, 0, 1, '\n'); else if (strcmp(optarg, "sig") == 0) cp = sshkey_alg_list(0, 1, 1, '\n'); diff --git a/ssh_config.5 b/ssh_config.5 index 96d6f6583863..d099903f7f66 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.343 2021/01/22 02:44:58 dtucker Exp $ -.Dd $Mdocdate: January 22 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.344 2021/01/26 05:32:22 dtucker Exp $ +.Dd $Mdocdate: January 26 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -808,7 +808,7 @@ The argument must be or .Cm no (the default). -.It Cm HostbasedKeyTypes +.It Cm HostbasedAcceptedAlgorithms Specifies the key types that will be used for hostbased authentication as a comma-separated list of patterns. Alternately if the specified list begins with a @@ -846,6 +846,7 @@ The option of .Xr ssh 1 may be used to list supported key types. +This was formerly named HostbasedKeyTypes. .It Cm HostKeyAlgorithms Specifies the host key algorithms that the client wants to use in order of preference. diff --git a/sshconnect2.c b/sshconnect2.c index 0883a367b0d1..4bbe8d3428c2 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.343 2021/01/25 06:00:17 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.344 2021/01/26 05:32:22 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -2100,12 +2100,12 @@ userauth_hostbased(struct ssh *ssh) int i, r, success = 0; if (authctxt->ktypes == NULL) { - authctxt->oktypes = xstrdup(options.hostbased_key_types); + authctxt->oktypes = xstrdup(options.hostbased_accepted_algos); authctxt->ktypes = authctxt->oktypes; } /* - * Work through each listed type pattern in HostbasedKeyTypes, + * Work through each listed type pattern in HostbasedAcceptedAlgorithms, * trying each hostkey that matches the type in turn. */ for (;;) { diff --git a/sshd_config.5 b/sshd_config.5 index 9b7a8916863f..76109ab40050 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.324 2021/01/22 02:44:58 dtucker Exp $ -.Dd $Mdocdate: January 22 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.325 2021/01/26 05:32:22 dtucker Exp $ +.Dd $Mdocdate: January 26 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -658,7 +658,7 @@ machine's default store. This facility is provided to assist with operation on multi homed machines. The default is .Cm yes . -.It Cm HostbasedAcceptedKeyTypes +.It Cm HostbasedAcceptedAlgorithms Specifies the key types that will be accepted for hostbased authentication as a list of comma-separated patterns. Alternately if the specified list begins with a @@ -692,7 +692,8 @@ rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp The list of available key types may also be obtained using -.Qq ssh -Q HostbasedAcceptedKeyTypes . +.Qq ssh -Q HostbasedAcceptedAlgorithms . +This was formerly named HostbasedAcceptedKeyTypes. .It Cm HostbasedAuthentication Specifies whether rhosts or /etc/hosts.equiv authentication together with successful public key client host authentication is allowed @@ -1190,7 +1191,7 @@ Available keywords are .Cm ForceCommand , .Cm GatewayPorts , .Cm GSSAPIAuthentication , -.Cm HostbasedAcceptedKeyTypes , +.Cm HostbasedAcceptedAlgorithms , .Cm HostbasedAuthentication , .Cm HostbasedUsesNameFromPacketOnly , .Cm IgnoreRhosts , From e26c980778b228bdd42b8353cc70101cf49b731b Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Tue, 26 Jan 2021 11:25:01 +0000 Subject: [PATCH 0179/1788] upstream: Remove unused variables leftover from refactoring. ok djm@ OpenBSD-Commit-ID: 8b3ad58bff828fcf874e54b2fc27a4cf1d9505e8 --- ssh-agent.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index 527e66532f5a..2860d74f2bc4 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.271 2021/01/26 00:54:49 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.272 2021/01/26 11:25:01 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -427,7 +427,7 @@ static void process_sign_request2(SocketEntry *e) { u_char *signature = NULL; - size_t i, slen = 0; + size_t slen = 0; u_int compat = 0, flags; int r, ok = -1; char *fp = NULL; @@ -581,8 +581,7 @@ parse_key_constraints(struct sshbuf *m, struct sshkey *k, time_t *deathp, u_char ctype; int r; u_int seconds, maxsign = 0; - char *ext_name = NULL, *sk_provider = NULL; - size_t pos; + char *ext_name = NULL; struct sshbuf *b = NULL; while (sshbuf_len(m)) { @@ -672,7 +671,7 @@ process_add_identity(SocketEntry *e) { Identity *id; int success = 0, confirm = 0; - char *fp, *comment = NULL, *ext_name = NULL, *sk_provider = NULL; + char *fp, *comment = NULL, *sk_provider = NULL; char canonical_provider[PATH_MAX]; time_t death = 0; u_int seconds = 0; @@ -838,7 +837,6 @@ process_add_smartcard_key(SocketEntry *e) int r, i, count = 0, success = 0, confirm = 0; u_int seconds = 0; time_t death = 0; - u_char type; struct sshkey **keys = NULL, *k; Identity *id; From 507b448a2465a53ab03a88acbc71cc51b48ca6ac Mon Sep 17 00:00:00 2001 From: "naddy@openbsd.org" Date: Tue, 26 Jan 2021 15:40:17 +0000 Subject: [PATCH 0180/1788] upstream: move HostbasedAcceptedAlgorithms to the right place in alphabetical order OpenBSD-Commit-ID: d766820d33dd874d944c14b0638239adb522c7ec --- scp.1 | 4 ++-- sftp.1 | 4 ++-- ssh.1 | 4 ++-- ssh_config.5 | 18 +++++++++--------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/scp.1 b/scp.1 index 45cffdac4c87..5471ea31ba2b 100644 --- a/scp.1 +++ b/scp.1 @@ -8,7 +8,7 @@ .\" .\" Created: Sun May 7 00:14:37 1995 ylo .\" -.\" $OpenBSD: scp.1,v 1.94 2021/01/26 05:32:21 dtucker Exp $ +.\" $OpenBSD: scp.1,v 1.95 2021/01/26 15:40:17 naddy Exp $ .\" .Dd $Mdocdate: January 26 2021 $ .Dt SCP 1 @@ -172,8 +172,8 @@ For full details of the options listed below, and their possible values, see .It GSSAPIDelegateCredentials .It HashKnownHosts .It Host -.It HostbasedAuthentication .It HostbasedAcceptedAlgorithms +.It HostbasedAuthentication .It HostKeyAlgorithms .It HostKeyAlias .It Hostname diff --git a/sftp.1 b/sftp.1 index 6e713e64338f..052d4d8e4ed2 100644 --- a/sftp.1 +++ b/sftp.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: sftp.1,v 1.135 2021/01/26 05:32:21 dtucker Exp $ +.\" $OpenBSD: sftp.1,v 1.136 2021/01/26 15:40:17 naddy Exp $ .\" .\" Copyright (c) 2001 Damien Miller. All rights reserved. .\" @@ -246,8 +246,8 @@ For full details of the options listed below, and their possible values, see .It GSSAPIDelegateCredentials .It HashKnownHosts .It Host -.It HostbasedAuthentication .It HostbasedAcceptedAlgorithms +.It HostbasedAuthentication .It HostKeyAlgorithms .It HostKeyAlias .It Hostname diff --git a/ssh.1 b/ssh.1 index a9f67b4b9c96..5884b471ffc7 100644 --- a/ssh.1 +++ b/ssh.1 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh.1,v 1.417 2021/01/26 05:32:21 dtucker Exp $ +.\" $OpenBSD: ssh.1,v 1.418 2021/01/26 15:40:17 naddy Exp $ .Dd $Mdocdate: January 26 2021 $ .Dt SSH 1 .Os @@ -509,8 +509,8 @@ For full details of the options listed below, and their possible values, see .It GSSAPIDelegateCredentials .It HashKnownHosts .It Host -.It HostbasedAuthentication .It HostbasedAcceptedAlgorithms +.It HostbasedAuthentication .It HostKeyAlgorithms .It HostKeyAlias .It Hostname diff --git a/ssh_config.5 b/ssh_config.5 index d099903f7f66..1a36427d02ef 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.344 2021/01/26 05:32:22 dtucker Exp $ +.\" $OpenBSD: ssh_config.5,v 1.345 2021/01/26 15:40:17 naddy Exp $ .Dd $Mdocdate: January 26 2021 $ .Dt SSH_CONFIG 5 .Os @@ -800,14 +800,6 @@ Note that existing names and addresses in known hosts files will not be converted automatically, but may be manually hashed using .Xr ssh-keygen 1 . -.It Cm HostbasedAuthentication -Specifies whether to try rhosts based authentication with public key -authentication. -The argument must be -.Cm yes -or -.Cm no -(the default). .It Cm HostbasedAcceptedAlgorithms Specifies the key types that will be used for hostbased authentication as a comma-separated list of patterns. @@ -847,6 +839,14 @@ option of .Xr ssh 1 may be used to list supported key types. This was formerly named HostbasedKeyTypes. +.It Cm HostbasedAuthentication +Specifies whether to try rhosts based authentication with public key +authentication. +The argument must be +.Cm yes +or +.Cm no +(the default). .It Cm HostKeyAlgorithms Specifies the host key algorithms that the client wants to use in order of preference. From d1532d90074b212054d5fd965f833231b09982f5 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Wed, 27 Jan 2021 00:37:26 +0000 Subject: [PATCH 0181/1788] upstream: Logical not bitwise or. ok djm@ OpenBSD-Commit-ID: d4dc855cf04951b93c45caa383e1ac9af0a3b0e5 --- ssh-agent.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index 2860d74f2bc4..ef6fa345a8b3 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.272 2021/01/26 11:25:01 dtucker Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.273 2021/01/27 00:37:26 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -438,7 +438,7 @@ process_sign_request2(SocketEntry *e) debug_f("entering"); - if ((msg = sshbuf_new()) == NULL | (data = sshbuf_new()) == NULL) + if ((msg = sshbuf_new()) == NULL || (data = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); if ((r = sshkey_froms(e->request, &key)) != 0 || (r = sshbuf_get_stringb(e->request, data)) != 0 || From 1b83185593a90a73860a503d753a95ca6d726c00 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 27 Jan 2021 11:58:26 +1100 Subject: [PATCH 0182/1788] Run one test with -Werror to catch warnings. --- .github/setup_ci.sh | 2 +- .github/workflows/c-cpp.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 593e8ef13a63..02f8feda1c4c 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -20,7 +20,7 @@ lsb_release -a for TARGET in $TARGETS; do case $TARGET in - ""|--without-openssl|--without-zlib) + ""|--without-openssl|--without-zlib|--with-Werror) # nothing to do ;; "--with-kerberos5") diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 974404cbda3d..121d43b20d0a 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -15,7 +15,7 @@ jobs: matrix: configs: - "" - - "--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin --with-selinux" + - "--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin --with-selinux --with-Werror" - "--with-ldflags=-lhardened_malloc" steps: From bba229b6f3328171f5e3ae85de443002523c0452 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 27 Jan 2021 12:34:07 +1100 Subject: [PATCH 0183/1788] Install moduli file before tests. Reduces warnings during test runs. --- .github/workflows/c-cpp.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 121d43b20d0a..d8677e2fe224 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -28,6 +28,8 @@ jobs: run: ./configure ${{ matrix.configs }} - name: make run: make + - name: copy moduli + run: sudo cp moduli /usr/local/etc/ - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: @@ -61,6 +63,8 @@ jobs: run: ./configure ${{ matrix.configs }} - name: make run: make + - name: copy moduli + run: sudo cp moduli /usr/local/etc/ - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: @@ -88,6 +92,8 @@ jobs: run: ./configure ${{ matrix.configs }} - name: make run: make + - name: copy moduli + run: sudo cp moduli /usr/local/etc/ - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: @@ -113,6 +119,8 @@ jobs: run: ./configure --with-ssl-dir=/usr/local/opt/openssl ${{ matrix.configs }} - name: make run: make + - name: copy moduli + run: sudo cp moduli /usr/local/etc/ - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: From 4ca6a1fac328477c642329676d6469dba59019a3 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 27 Jan 2021 09:26:53 +0000 Subject: [PATCH 0184/1788] upstream: remove global variable used to stash compat flags and use the purpose-built ssh->compat variable instead; feedback/ok markus@ OpenBSD-Commit-ID: 7c4f200e112dae6bcf99f5bae1a5629288378a06 --- channels.c | 10 +++++----- clientloop.c | 4 ++-- compat.c | 36 +++++++++++++++++------------------- compat.h | 12 ++++++------ kex.c | 4 ++-- kexgexc.c | 4 ++-- monitor.c | 10 +++++----- nchan.c | 6 +++--- ssh-keyscan.c | 7 +++---- ssh.c | 4 ++-- ssh_api.c | 4 ++-- sshconnect2.c | 28 ++++++++++++++-------------- sshd.c | 10 +++++----- ttymodes.c | 4 ++-- 14 files changed, 70 insertions(+), 73 deletions(-) diff --git a/channels.c b/channels.c index cb19a7b03d1c..4fccd0b376b8 100644 --- a/channels.c +++ b/channels.c @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.c,v 1.403 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: channels.c,v 1.404 2021/01/27 09:26:53 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2997,7 +2997,7 @@ channel_input_extended_data(int type, u_int32_t seq, struct ssh *ssh) return 0; } if (c->flags & CHAN_EOF_RCVD) { - if (datafellows & SSH_BUG_EXTEOF) + if (ssh->compat & SSH_BUG_EXTEOF) debug("channel %d: accepting ext data after eof", c->self); else @@ -3260,7 +3260,7 @@ channel_fwd_bind_addr(struct ssh *ssh, const char *listen_addr, int *wildcardp, if (fwd_opts->gateway_ports) wildcard = 1; } else if (fwd_opts->gateway_ports || is_client) { - if (((datafellows & SSH_OLD_FORWARD_ADDR) && + if (((ssh->compat & SSH_OLD_FORWARD_ADDR) && strcmp(listen_addr, "0.0.0.0") == 0 && is_client == 0) || *listen_addr == '\0' || strcmp(listen_addr, "*") == 0 || (!is_client && fwd_opts->gateway_ports == 1)) { @@ -3449,7 +3449,7 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type, c->host_port = fwd->connect_port; c->listening_addr = addr == NULL ? NULL : xstrdup(addr); if (fwd->listen_port == 0 && allocated_listen_port != NULL && - !(datafellows & SSH_BUG_DYNAMIC_RPORT)) + !(ssh->compat & SSH_BUG_DYNAMIC_RPORT)) c->listening_port = *allocated_listen_port; else c->listening_port = fwd->listen_port; @@ -4087,7 +4087,7 @@ channel_update_permission(struct ssh *ssh, int idx, int newport) fwd_perm_clear(&pset->permitted_user[idx]); else { pset->permitted_user[idx].listen_port = - (datafellows & SSH_BUG_DYNAMIC_RPORT) ? 0 : newport; + (ssh->compat & SSH_BUG_DYNAMIC_RPORT) ? 0 : newport; } } diff --git a/clientloop.c b/clientloop.c index 63ba59f07138..148e87c929ac 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.356 2020/12/20 23:36:51 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.357 2021/01/27 09:26:54 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1024,7 +1024,7 @@ process_escapes(struct ssh *ssh, Channel *c, continue; case 'R': - if (datafellows & SSH_BUG_NOREKEY) + if (ssh->compat & SSH_BUG_NOREKEY) logit("Server does not " "support re-keying"); else diff --git a/compat.c b/compat.c index a9d46e303ac3..69befa96f057 100644 --- a/compat.c +++ b/compat.c @@ -1,4 +1,4 @@ -/* $OpenBSD: compat.c,v 1.116 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: compat.c,v 1.117 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved. * @@ -38,11 +38,9 @@ #include "match.h" #include "kex.h" -int datafellows = 0; - -/* datafellows bug compatibility */ -u_int -compat_datafellows(const char *version) +/* determine bug flags from SSH protocol banner */ +void +compat_banner(struct ssh *ssh, const char *version) { int i; static struct { @@ -145,22 +143,22 @@ compat_datafellows(const char *version) }; /* process table, return first match */ + ssh->compat = 0; for (i = 0; check[i].pat; i++) { if (match_pattern_list(version, check[i].pat, 0) == 1) { - debug("match: %s pat %s compat 0x%08x", + debug_f("match: %s pat %s compat 0x%08x", version, check[i].pat, check[i].bugs); - datafellows = check[i].bugs; /* XXX for now */ - return check[i].bugs; + ssh->compat = check[i].bugs; + return; } } - debug("no match: %s", version); - return 0; + debug_f("no match: %s", version); } char * -compat_cipher_proposal(char *cipher_prop) +compat_cipher_proposal(struct ssh *ssh, char *cipher_prop) { - if (!(datafellows & SSH_BUG_BIGENDIANAES)) + if (!(ssh->compat & SSH_BUG_BIGENDIANAES)) return cipher_prop; debug2_f("original cipher proposal: %s", cipher_prop); if ((cipher_prop = match_filter_denylist(cipher_prop, "aes*")) == NULL) @@ -172,9 +170,9 @@ compat_cipher_proposal(char *cipher_prop) } char * -compat_pkalg_proposal(char *pkalg_prop) +compat_pkalg_proposal(struct ssh *ssh, char *pkalg_prop) { - if (!(datafellows & SSH_BUG_RSASIGMD5)) + if (!(ssh->compat & SSH_BUG_RSASIGMD5)) return pkalg_prop; debug2_f("original public key proposal: %s", pkalg_prop); if ((pkalg_prop = match_filter_denylist(pkalg_prop, "ssh-rsa")) == NULL) @@ -186,16 +184,16 @@ compat_pkalg_proposal(char *pkalg_prop) } char * -compat_kex_proposal(char *p) +compat_kex_proposal(struct ssh *ssh, char *p) { - if ((datafellows & (SSH_BUG_CURVE25519PAD|SSH_OLD_DHGEX)) == 0) + if ((ssh->compat & (SSH_BUG_CURVE25519PAD|SSH_OLD_DHGEX)) == 0) return p; debug2_f("original KEX proposal: %s", p); - if ((datafellows & SSH_BUG_CURVE25519PAD) != 0) + if ((ssh->compat & SSH_BUG_CURVE25519PAD) != 0) if ((p = match_filter_denylist(p, "curve25519-sha256@libssh.org")) == NULL) fatal("match_filter_denylist failed"); - if ((datafellows & SSH_OLD_DHGEX) != 0) { + if ((ssh->compat & SSH_OLD_DHGEX) != 0) { if ((p = match_filter_denylist(p, "diffie-hellman-group-exchange-sha256," "diffie-hellman-group-exchange-sha1")) == NULL) diff --git a/compat.h b/compat.h index 66db42cc0322..c197fafc539c 100644 --- a/compat.h +++ b/compat.h @@ -1,4 +1,4 @@ -/* $OpenBSD: compat.h,v 1.55 2020/06/01 07:11:38 dtucker Exp $ */ +/* $OpenBSD: compat.h,v 1.56 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright (c) 1999, 2000, 2001 Markus Friedl. All rights reserved. @@ -58,10 +58,10 @@ #define SSH_BUG_HOSTKEYS 0x20000000 #define SSH_BUG_DHGEX_LARGE 0x40000000 -u_int compat_datafellows(const char *); -char *compat_cipher_proposal(char *); -char *compat_pkalg_proposal(char *); -char *compat_kex_proposal(char *); +struct ssh; -extern int datafellows; +void compat_banner(struct ssh *, const char *); +char *compat_cipher_proposal(struct ssh *, char *); +char *compat_pkalg_proposal(struct ssh *, char *); +char *compat_kex_proposal(struct ssh *, char *); #endif diff --git a/kex.c b/kex.c index 3269b2c3152f..c95025ff0adc 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.163 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.164 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -1322,7 +1322,7 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, } debug("Remote protocol version %d.%d, remote software version %.100s", remote_major, remote_minor, remote_version); - ssh->compat = compat_datafellows(remote_version); + compat_banner(ssh, remote_version); mismatch = 0; switch (remote_major) { diff --git a/kexgexc.c b/kexgexc.c index 323a659b77c5..c3702c922dc5 100644 --- a/kexgexc.c +++ b/kexgexc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexgexc.c,v 1.35 2019/11/25 00:51:37 djm Exp $ */ +/* $OpenBSD: kexgexc.c,v 1.36 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright (c) 2000 Niels Provos. All rights reserved. * Copyright (c) 2001 Markus Friedl. All rights reserved. @@ -68,7 +68,7 @@ kexgex_client(struct ssh *ssh) kex->min = DH_GRP_MIN; kex->max = DH_GRP_MAX; kex->nbits = nbits; - if (datafellows & SSH_BUG_DHGEX_LARGE) + if (ssh->compat & SSH_BUG_DHGEX_LARGE) kex->nbits = MINIMUM(kex->nbits, 4096); /* New GEX request */ if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_DH_GEX_REQUEST)) != 0 || diff --git a/monitor.c b/monitor.c index 6a63aa990f1d..81e29a889640 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.221 2021/01/26 05:32:21 dtucker Exp $ */ +/* $OpenBSD: monitor.c,v 1.222 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -1175,7 +1175,7 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) if (key != NULL && authctxt->valid) { /* These should not make it past the privsep child */ if (sshkey_type_plain(key->type) == KEY_RSA && - (datafellows & SSH_BUG_RSASIGMD5) != 0) + (ssh->compat & SSH_BUG_RSASIGMD5) != 0) fatal_f("passed a SSH_BUG_RSASIGMD5 key"); switch (type) { @@ -1252,7 +1252,7 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) } static int -monitor_valid_userblob(const u_char *data, u_int datalen) +monitor_valid_userblob(struct ssh *ssh, const u_char *data, u_int datalen) { struct sshbuf *b; const u_char *p; @@ -1264,7 +1264,7 @@ monitor_valid_userblob(const u_char *data, u_int datalen) if ((b = sshbuf_from(data, datalen)) == NULL) fatal_f("sshbuf_from"); - if (datafellows & SSH_OLD_SESSIONID) { + if (ssh->compat & SSH_OLD_SESSIONID) { p = sshbuf_ptr(b); len = sshbuf_len(b); if ((session_id2 == NULL) || @@ -1418,7 +1418,7 @@ mm_answer_keyverify(struct ssh *ssh, int sock, struct sshbuf *m) switch (key_blobtype) { case MM_USERKEY: - valid_data = monitor_valid_userblob(data, datalen); + valid_data = monitor_valid_userblob(ssh, data, datalen); auth_method = "publickey"; break; case MM_HOSTKEY: diff --git a/nchan.c b/nchan.c index 76bfc85a85f8..4a4494b861de 100644 --- a/nchan.c +++ b/nchan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: nchan.c,v 1.71 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: nchan.c,v 1.72 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved. * @@ -233,7 +233,7 @@ chan_send_eow2(struct ssh *ssh, Channel *c) c->self); return; } - if (!(datafellows & SSH_NEW_OPENSSH)) + if (!(ssh->compat & SSH_NEW_OPENSSH)) return; if (!c->have_remote_id) fatal_f("channel %d: no remote_id", c->self); @@ -334,7 +334,7 @@ chan_is_dead(struct ssh *ssh, Channel *c, int do_send) } if (c->istate != CHAN_INPUT_CLOSED || c->ostate != CHAN_OUTPUT_CLOSED) return 0; - if ((datafellows & SSH_BUG_EXTEOF) && + if ((ssh->compat & SSH_BUG_EXTEOF) && c->extended_usage == CHAN_EXTENDED_WRITE && c->efd != -1 && sshbuf_len(c->extended) > 0) { diff --git a/ssh-keyscan.c b/ssh-keyscan.c index ab71adf9f828..7abbcbff5d00 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.138 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.139 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright 1995, 1996 by David Mazieres . * @@ -522,11 +522,10 @@ congreet(int s) fatal("ssh_packet_set_connection failed"); ssh_packet_set_timeout(c->c_ssh, timeout, 1); ssh_set_app_data(c->c_ssh, c); /* back link */ + c->c_ssh->compat = 0; if (sscanf(buf, "SSH-%d.%d-%[^\n]\n", &remote_major, &remote_minor, remote_version) == 3) - c->c_ssh->compat = compat_datafellows(remote_version); - else - c->c_ssh->compat = 0; + compat_banner(c->c_ssh, remote_version); if (!ssh2_capable(remote_major, remote_minor)) { debug("%s doesn't support ssh2", c->c_name); confree(s); diff --git a/ssh.c b/ssh.c index dc6bd16d0603..5b340fa1649c 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.548 2021/01/26 05:32:22 dtucker Exp $ */ +/* $OpenBSD: ssh.c,v 1.549 2021/01/27 09:26:54 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2118,7 +2118,7 @@ ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo) /* If we don't expect to open a new session, then disallow it */ if (options.control_master == SSHCTL_MASTER_NO && - (datafellows & SSH_NEW_OPENSSH)) { + (ssh->compat & SSH_NEW_OPENSSH)) { debug("Requesting no-more-sessions@openssh.com"); if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 || (r = sshpkt_put_cstring(ssh, diff --git a/ssh_api.c b/ssh_api.c index a65b1fa85d3f..8d65bdaecc20 100644 --- a/ssh_api.c +++ b/ssh_api.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh_api.c,v 1.24 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: ssh_api.c,v 1.25 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright (c) 2012 Markus Friedl. All rights reserved. * @@ -392,7 +392,7 @@ _ssh_read_banner(struct ssh *ssh, struct sshbuf *banner) debug("Remote protocol version %d.%d, remote software version %.100s", remote_major, remote_minor, remote_version); - ssh->compat = compat_datafellows(remote_version); + compat_banner(ssh, remote_version); if (remote_major == 1 && remote_minor == 99) { remote_major = 2; remote_minor = 0; diff --git a/sshconnect2.c b/sshconnect2.c index 4bbe8d3428c2..efd1def49f94 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.344 2021/01/26 05:32:22 dtucker Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.345 2021/01/27 09:26:54 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -246,11 +246,11 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port, if ((s = kex_names_cat(options.kex_algorithms, "ext-info-c")) == NULL) fatal_f("kex_names_cat"); - myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal(s); + myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal(ssh, s); myproposal[PROPOSAL_ENC_ALGS_CTOS] = - compat_cipher_proposal(options.ciphers); + compat_cipher_proposal(ssh, options.ciphers); myproposal[PROPOSAL_ENC_ALGS_STOC] = - compat_cipher_proposal(options.ciphers); + compat_cipher_proposal(ssh, options.ciphers); myproposal[PROPOSAL_COMP_ALGS_CTOS] = myproposal[PROPOSAL_COMP_ALGS_STOC] = (char *)compression_alg_list(options.compression); @@ -259,12 +259,12 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port, if (use_known_hosts_order) { /* Query known_hosts and prefer algorithms that appear there */ myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = - compat_pkalg_proposal( + compat_pkalg_proposal(ssh, order_hostkeyalgs(host, hostaddr, port, cinfo)); } else { /* Use specified HostkeyAlgorithms exactly */ myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = - compat_pkalg_proposal(options.hostkeyalgorithms); + compat_pkalg_proposal(ssh, options.hostkeyalgorithms); } if (options.rekey_limit || options.rekey_interval) @@ -294,7 +294,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port, /* remove ext-info from the KEX proposals for rekeying */ myproposal[PROPOSAL_KEX_ALGS] = - compat_kex_proposal(options.kex_algorithms); + compat_kex_proposal(ssh, options.kex_algorithms); if ((r = kex_prop2buf(ssh->kex->my, myproposal)) != 0) fatal_r(r, "kex_prop2buf"); @@ -1188,7 +1188,7 @@ key_sig_algorithm(struct ssh *ssh, const struct sshkey *key) */ if (ssh == NULL || ssh->kex->server_sig_algs == NULL || (key->type != KEY_RSA && key->type != KEY_RSA_CERT) || - (key->type == KEY_RSA_CERT && (datafellows & SSH_BUG_SIGTYPE))) { + (key->type == KEY_RSA_CERT && (ssh->compat & SSH_BUG_SIGTYPE))) { /* Filter base key signature alg against our configuration */ return match_list(sshkey_ssh_name(key), options.pubkey_accepted_algos, NULL); @@ -1408,7 +1408,7 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) sshbuf_free(b); if ((b = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); - if (datafellows & SSH_OLD_SESSIONID) { + if (ssh->compat & SSH_OLD_SESSIONID) { if ((r = sshbuf_put(b, session_id2, session_id2_len)) != 0) fatal_fr(r, "sshbuf_put"); @@ -1430,7 +1430,7 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) /* generate signature */ r = identity_sign(sign_id, &signature, &slen, - sshbuf_ptr(b), sshbuf_len(b), datafellows, alg); + sshbuf_ptr(b), sshbuf_len(b), ssh->compat, alg); if (r == 0) break; else if (r == SSH_ERR_KEY_NOT_FOUND) @@ -1808,12 +1808,12 @@ pubkey_reset(Authctxt *authctxt) } static int -try_identity(Identity *id) +try_identity(struct ssh *ssh, Identity *id) { if (!id->key) return (0); if (sshkey_type_plain(id->key->type) == KEY_RSA && - (datafellows & SSH_BUG_RSASIGMD5) != 0) { + (ssh->compat & SSH_BUG_RSASIGMD5) != 0) { debug("Skipped %s key %s for RSA/MD5 server", sshkey_type(id->key), id->filename); return (0); @@ -1841,7 +1841,7 @@ userauth_pubkey(struct ssh *ssh) * private key instead */ if (id->key != NULL) { - if (try_identity(id)) { + if (try_identity(ssh, id)) { ident = format_identity(id); debug("Offering public key: %s", ident); free(ident); @@ -1851,7 +1851,7 @@ userauth_pubkey(struct ssh *ssh) debug("Trying private key: %s", id->filename); id->key = load_identity_file(id); if (id->key != NULL) { - if (try_identity(id)) { + if (try_identity(ssh, id)) { id->isprivate = 1; sent = sign_and_send_pubkey(ssh, id); } diff --git a/sshd.c b/sshd.c index 1333ef5e691f..c99a5ac055de 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.567 2021/01/09 12:10:02 dtucker Exp $ */ +/* $OpenBSD: sshd.c,v 1.568 2021/01/27 09:26:54 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2352,11 +2352,11 @@ do_ssh2_kex(struct ssh *ssh) struct kex *kex; int r; - myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal( + myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal(ssh, options.kex_algorithms); - myproposal[PROPOSAL_ENC_ALGS_CTOS] = compat_cipher_proposal( + myproposal[PROPOSAL_ENC_ALGS_CTOS] = compat_cipher_proposal(ssh, options.ciphers); - myproposal[PROPOSAL_ENC_ALGS_STOC] = compat_cipher_proposal( + myproposal[PROPOSAL_ENC_ALGS_STOC] = compat_cipher_proposal(ssh, options.ciphers); myproposal[PROPOSAL_MAC_ALGS_CTOS] = myproposal[PROPOSAL_MAC_ALGS_STOC] = options.macs; @@ -2371,7 +2371,7 @@ do_ssh2_kex(struct ssh *ssh) options.rekey_interval); myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = compat_pkalg_proposal( - list_hostkey_types()); + ssh, list_hostkey_types()); /* start key exchange */ if ((r = kex_setup(ssh, myproposal)) != 0) diff --git a/ttymodes.c b/ttymodes.c index 172ab99f47d4..1d20ce8005bf 100644 --- a/ttymodes.c +++ b/ttymodes.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ttymodes.c,v 1.35 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ttymodes.c,v 1.36 2021/01/27 09:26:54 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -316,7 +316,7 @@ ssh_tty_make_modes(struct ssh *ssh, int fd, struct termios *tiop) #define SSH_TTYMODE_IUTF8 42 /* for SSH_BUG_UTF8TTYMODE */ #define TTYMODE(NAME, FIELD, OP) \ - if (OP == SSH_TTYMODE_IUTF8 && (datafellows & SSH_BUG_UTF8TTYMODE)) { \ + if (OP == SSH_TTYMODE_IUTF8 && (ssh->compat & SSH_BUG_UTF8TTYMODE)) { \ debug3_f("SSH_BUG_UTF8TTYMODE"); \ } else if ((r = sshbuf_put_u8(buf, OP)) != 0 || \ (r = sshbuf_put_u32(buf, ((tio.FIELD & NAME) != 0))) != 0) \ From 39be3dc209f28f9c1ebfeba42adde8963b01e1cd Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 27 Jan 2021 10:05:28 +0000 Subject: [PATCH 0185/1788] upstream: make ssh->kex->session_id a sshbuf instead of u_char*/size_t and use that instead of global variables containing copies of it. feedback/ok markus@ OpenBSD-Commit-ID: a4b1b1ca4afd2e37cb9f64f737b30a6a7f96af68 --- auth2-gss.c | 4 ++-- auth2-hostbased.c | 7 +++---- auth2-pubkey.c | 11 +++++------ auth2.c | 4 +--- clientloop.c | 9 +++------ gss-genr.c | 9 +++------ kex.c | 22 +++++++++++---------- kex.h | 5 ++--- monitor.c | 49 +++++++++++++++++++++++++++-------------------- packet.c | 11 +++++------ serverloop.c | 6 +++--- ssh-gss.h | 4 ++-- ssh_api.c | 6 +----- sshconnect2.c | 24 +++++++++-------------- sshd.c | 12 +----------- 15 files changed, 80 insertions(+), 103 deletions(-) diff --git a/auth2-gss.c b/auth2-gss.c index 9dae012235b7..0dbabd353876 100644 --- a/auth2-gss.c +++ b/auth2-gss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-gss.c,v 1.30 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: auth2-gss.c,v 1.31 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved. @@ -299,7 +299,7 @@ input_gssapi_mic(int type, u_int32_t plen, struct ssh *ssh) mic.value = p; mic.length = len; ssh_gssapi_buildmic(b, authctxt->user, authctxt->service, - "gssapi-with-mic"); + "gssapi-with-mic", ssh->kex->session_id); if ((gssbuf.value = sshbuf_mutable_ptr(b)) == NULL) fatal_f("sshbuf_mutable_ptr failed"); diff --git a/auth2-hostbased.c b/auth2-hostbased.c index 3bc799c42697..002e7e4ee213 100644 --- a/auth2-hostbased.c +++ b/auth2-hostbased.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-hostbased.c,v 1.45 2021/01/26 05:32:21 dtucker Exp $ */ +/* $OpenBSD: auth2-hostbased.c,v 1.46 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -35,6 +35,7 @@ #include "xmalloc.h" #include "ssh2.h" #include "packet.h" +#include "kex.h" #include "sshbuf.h" #include "log.h" #include "misc.h" @@ -54,8 +55,6 @@ /* import */ extern ServerOptions options; -extern u_char *session_id2; -extern u_int session_id2_len; static int userauth_hostbased(struct ssh *ssh) @@ -129,7 +128,7 @@ userauth_hostbased(struct ssh *ssh) if ((b = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); /* reconstruct packet */ - if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || + if ((r = sshbuf_put_stringb(b, ssh->kex->session_id)) != 0 || (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || (r = sshbuf_put_cstring(b, authctxt->user)) != 0 || (r = sshbuf_put_cstring(b, authctxt->service)) != 0 || diff --git a/auth2-pubkey.c b/auth2-pubkey.c index 5a24af8914cb..411d2d885144 100644 --- a/auth2-pubkey.c +++ b/auth2-pubkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-pubkey.c,v 1.105 2021/01/26 00:49:30 djm Exp $ */ +/* $OpenBSD: auth2-pubkey.c,v 1.106 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -47,6 +47,7 @@ #include "ssh.h" #include "ssh2.h" #include "packet.h" +#include "kex.h" #include "sshbuf.h" #include "log.h" #include "misc.h" @@ -72,8 +73,6 @@ /* import */ extern ServerOptions options; -extern u_char *session_id2; -extern u_int session_id2_len; static char * format_key(const struct sshkey *key) @@ -175,11 +174,11 @@ userauth_pubkey(struct ssh *ssh) if ((b = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); if (ssh->compat & SSH_OLD_SESSIONID) { - if ((r = sshbuf_put(b, session_id2, session_id2_len)) != 0) + if ((r = sshbuf_putb(b, ssh->kex->session_id)) != 0) fatal_fr(r, "put old session id"); } else { - if ((r = sshbuf_put_string(b, session_id2, - session_id2_len)) != 0) + if ((r = sshbuf_put_stringb(b, + ssh->kex->session_id)) != 0) fatal_fr(r, "put session id"); } if (!authctxt->valid || authctxt->user == NULL) { diff --git a/auth2.c b/auth2.c index fbbf1961d1f6..3c8a67bbc595 100644 --- a/auth2.c +++ b/auth2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2.c,v 1.159 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: auth2.c,v 1.160 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -61,8 +61,6 @@ /* import */ extern ServerOptions options; -extern u_char *session_id2; -extern u_int session_id2_len; extern struct sshbuf *loginmsg; /* methods */ diff --git a/clientloop.c b/clientloop.c index 148e87c929ac..70f492f89371 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.357 2021/01/27 09:26:54 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.358 2021/01/27 10:05:28 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2125,9 +2125,6 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, if ((signdata = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); - /* Don't want to accidentally accept an unbound signature */ - if (ssh->kex->session_id_len == 0) - fatal_f("ssh->kex->session_id_len == 0"); /* * Expect a signature for each of the ctx->nnew private keys we * haven't seen before. They will be in the same order as the @@ -2140,8 +2137,8 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, sshbuf_reset(signdata); if ( (r = sshbuf_put_cstring(signdata, "hostkeys-prove-00@openssh.com")) != 0 || - (r = sshbuf_put_string(signdata, ssh->kex->session_id, - ssh->kex->session_id_len)) != 0 || + (r = sshbuf_put_stringb(signdata, + ssh->kex->session_id)) != 0 || (r = sshkey_puts(ctx->keys[i], signdata)) != 0) fatal_fr(r, "compose signdata"); /* Extract and verify signature */ diff --git a/gss-genr.c b/gss-genr.c index 84f242bc8d6f..6852805171a8 100644 --- a/gss-genr.c +++ b/gss-genr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: gss-genr.c,v 1.27 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: gss-genr.c,v 1.28 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2001-2007 Simon Wilkinson. All rights reserved. @@ -44,9 +44,6 @@ #include "ssh-gss.h" -extern u_char *session_id2; -extern u_int session_id2_len; - /* sshbuf_get for gss_buffer_desc */ int ssh_gssapi_get_buffer_desc(struct sshbuf *b, gss_buffer_desc *g) @@ -259,12 +256,12 @@ ssh_gssapi_sign(Gssctxt *ctx, gss_buffer_t buffer, gss_buffer_t hash) void ssh_gssapi_buildmic(struct sshbuf *b, const char *user, const char *service, - const char *context) + const char *context, const struct sshbuf *session_id) { int r; sshbuf_reset(b); - if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || + if ((r = sshbuf_put_stringb(b, session_id)) != 0 || (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || (r = sshbuf_put_cstring(b, user)) != 0 || (r = sshbuf_put_cstring(b, service)) != 0 || diff --git a/kex.c b/kex.c index c95025ff0adc..56c68449f945 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.164 2021/01/27 09:26:54 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.165 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -637,7 +637,8 @@ kex_new(void) (kex->peer = sshbuf_new()) == NULL || (kex->my = sshbuf_new()) == NULL || (kex->client_version = sshbuf_new()) == NULL || - (kex->server_version = sshbuf_new()) == NULL) { + (kex->server_version = sshbuf_new()) == NULL || + (kex->session_id = sshbuf_new()) == NULL) { kex_free(kex); return NULL; } @@ -697,7 +698,7 @@ kex_free(struct kex *kex) sshbuf_free(kex->client_version); sshbuf_free(kex->server_version); sshbuf_free(kex->client_pub); - free(kex->session_id); + sshbuf_free(kex->session_id); free(kex->failed_choice); free(kex->hostkey_alg); free(kex->name); @@ -1015,8 +1016,7 @@ derive_key(struct ssh *ssh, int id, u_int need, u_char *hash, u_int hashlen, ssh_digest_update_buffer(hashctx, shared_secret) != 0 || ssh_digest_update(hashctx, hash, hashlen) != 0 || ssh_digest_update(hashctx, &c, 1) != 0 || - ssh_digest_update(hashctx, kex->session_id, - kex->session_id_len) != 0 || + ssh_digest_update_buffer(hashctx, kex->session_id) != 0 || ssh_digest_final(hashctx, digest, mdsz) != 0) { r = SSH_ERR_LIBCRYPTO_ERROR; error_f("KEX hash failed"); @@ -1067,12 +1067,14 @@ kex_derive_keys(struct ssh *ssh, u_char *hash, u_int hashlen, int r; /* save initial hash as session id */ - if (kex->session_id == NULL) { - kex->session_id_len = hashlen; - kex->session_id = malloc(kex->session_id_len); - if (kex->session_id == NULL) + if ((kex->flags & KEX_INITIAL) != 0) { + if ((kex->session_id = sshbuf_new()) == NULL) return SSH_ERR_ALLOC_FAIL; - memcpy(kex->session_id, hash, kex->session_id_len); + if ((r = sshbuf_put(kex->session_id, hash, hashlen)) != 0) + return r; + } else if (sshbuf_len(kex->session_id) == 0) { + error_f("no session ID in rekex"); + return SSH_ERR_INTERNAL_ERROR; } for (i = 0; i < NKEYS; i++) { if ((r = derive_key(ssh, 'A'+i, kex->we_need, hash, hashlen, diff --git a/kex.h b/kex.h index 5f59166a068d..18bfa923f1c6 100644 --- a/kex.h +++ b/kex.h @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.h,v 1.112 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: kex.h,v 1.113 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. @@ -132,8 +132,6 @@ struct newkeys { struct ssh; struct kex { - u_char *session_id; - size_t session_id_len; struct newkeys *newkeys[MODE_MAX]; u_int we_need; u_int dh_need; @@ -149,6 +147,7 @@ struct kex { struct sshbuf *peer; struct sshbuf *client_version; struct sshbuf *server_version; + struct sshbuf *session_id; sig_atomic_t done; u_int flags; int hash_alg; diff --git a/monitor.c b/monitor.c index 81e29a889640..f6d6efc1b1b7 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.222 2021/01/27 09:26:54 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.223 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -104,7 +104,6 @@ static Gssctxt *gsscontext = NULL; /* Imports */ extern ServerOptions options; extern u_int utmp_len; -extern u_char session_id[]; extern struct sshbuf *loginmsg; extern struct sshauthopt *auth_opts; /* XXX move to permanent ssh->authctxt? */ @@ -1431,7 +1430,9 @@ mm_answer_keyverify(struct ssh *ssh, int sock, struct sshbuf *m) break; } if (!valid_data) - fatal_f("bad signature data blob"); + fatal_f("bad %s signature data blob", + key_blobtype == MM_USERKEY ? "userkey" : + (key_blobtype == MM_HOSTKEY ? "hostkey" : "unknown")); if ((fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL) @@ -1716,28 +1717,34 @@ monitor_apply_keystate(struct ssh *ssh, struct monitor *pmonitor) fatal_fr(r, "packet_set_state"); sshbuf_free(child_state); child_state = NULL; - - if ((kex = ssh->kex) != NULL) { - /* XXX set callbacks */ + if ((kex = ssh->kex) == NULL) + fatal_f("internal error: ssh->kex == NULL"); + if (session_id2_len != sshbuf_len(ssh->kex->session_id)) { + fatal_f("incorrect session id length %zu (expected %u)", + sshbuf_len(ssh->kex->session_id), session_id2_len); + } + if (memcmp(sshbuf_ptr(ssh->kex->session_id), session_id2, + session_id2_len) != 0) + fatal_f("session ID mismatch"); + /* XXX set callbacks */ #ifdef WITH_OPENSSL - kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server; - kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server; - kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_server; - kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_server; - kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server; - kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; - kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; + kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server; + kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server; + kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_server; + kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_server; + kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server; + kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; + kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; # ifdef OPENSSL_HAS_ECC - kex->kex[KEX_ECDH_SHA2] = kex_gen_server; + kex->kex[KEX_ECDH_SHA2] = kex_gen_server; # endif #endif /* WITH_OPENSSL */ - kex->kex[KEX_C25519_SHA256] = kex_gen_server; - kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server; - kex->load_host_public_key=&get_hostkey_public_by_type; - kex->load_host_private_key=&get_hostkey_private_by_type; - kex->host_key_index=&get_hostkey_index; - kex->sign = sshd_hostkey_sign; - } + kex->kex[KEX_C25519_SHA256] = kex_gen_server; + kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server; + kex->load_host_public_key=&get_hostkey_public_by_type; + kex->load_host_private_key=&get_hostkey_private_by_type; + kex->host_key_index=&get_hostkey_index; + kex->sign = sshd_hostkey_sign; } /* This function requires careful sanity checking */ diff --git a/packet.c b/packet.c index 742cf3a590ea..4bd8b4ec9e05 100644 --- a/packet.c +++ b/packet.c @@ -1,4 +1,4 @@ -/* $OpenBSD: packet.c,v 1.298 2020/11/27 00:49:58 djm Exp $ */ +/* $OpenBSD: packet.c,v 1.299 2021/01/27 10:05:28 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2196,9 +2196,7 @@ kex_to_blob(struct sshbuf *m, struct kex *kex) { int r; - if ((r = sshbuf_put_string(m, kex->session_id, - kex->session_id_len)) != 0 || - (r = sshbuf_put_u32(m, kex->we_need)) != 0 || + if ((r = sshbuf_put_u32(m, kex->we_need)) != 0 || (r = sshbuf_put_cstring(m, kex->hostkey_alg)) != 0 || (r = sshbuf_put_u32(m, kex->hostkey_type)) != 0 || (r = sshbuf_put_u32(m, kex->hostkey_nid)) != 0 || @@ -2207,6 +2205,7 @@ kex_to_blob(struct sshbuf *m, struct kex *kex) (r = sshbuf_put_stringb(m, kex->peer)) != 0 || (r = sshbuf_put_stringb(m, kex->client_version)) != 0 || (r = sshbuf_put_stringb(m, kex->server_version)) != 0 || + (r = sshbuf_put_stringb(m, kex->session_id)) != 0 || (r = sshbuf_put_u32(m, kex->flags)) != 0) return r; return 0; @@ -2359,8 +2358,7 @@ kex_from_blob(struct sshbuf *m, struct kex **kexp) if ((kex = kex_new()) == NULL) return SSH_ERR_ALLOC_FAIL; - if ((r = sshbuf_get_string(m, &kex->session_id, &kex->session_id_len)) != 0 || - (r = sshbuf_get_u32(m, &kex->we_need)) != 0 || + if ((r = sshbuf_get_u32(m, &kex->we_need)) != 0 || (r = sshbuf_get_cstring(m, &kex->hostkey_alg, NULL)) != 0 || (r = sshbuf_get_u32(m, (u_int *)&kex->hostkey_type)) != 0 || (r = sshbuf_get_u32(m, (u_int *)&kex->hostkey_nid)) != 0 || @@ -2369,6 +2367,7 @@ kex_from_blob(struct sshbuf *m, struct kex **kexp) (r = sshbuf_get_stringb(m, kex->peer)) != 0 || (r = sshbuf_get_stringb(m, kex->client_version)) != 0 || (r = sshbuf_get_stringb(m, kex->server_version)) != 0 || + (r = sshbuf_get_stringb(m, kex->session_id)) != 0 || (r = sshbuf_get_u32(m, &kex->flags)) != 0) goto out; kex->server = 1; diff --git a/serverloop.c b/serverloop.c index 5fc465babe9d..306658cbcc21 100644 --- a/serverloop.c +++ b/serverloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: serverloop.c,v 1.224 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: serverloop.c,v 1.225 2021/01/27 10:05:28 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -779,8 +779,8 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp) sshkey_type_plain(key->type) == KEY_RSA; if ((r = sshbuf_put_cstring(sigbuf, "hostkeys-prove-00@openssh.com")) != 0 || - (r = sshbuf_put_string(sigbuf, - ssh->kex->session_id, ssh->kex->session_id_len)) != 0 || + (r = sshbuf_put_stringb(sigbuf, + ssh->kex->session_id)) != 0 || (r = sshkey_puts(key, sigbuf)) != 0 || (r = ssh->kex->sign(ssh, key_prv, key_pub, &sig, &slen, sshbuf_ptr(sigbuf), sshbuf_len(sigbuf), diff --git a/ssh-gss.h b/ssh-gss.h index 36180d07a4c1..a8af117d2ef2 100644 --- a/ssh-gss.h +++ b/ssh-gss.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-gss.h,v 1.14 2018/07/10 09:13:30 djm Exp $ */ +/* $OpenBSD: ssh-gss.h,v 1.15 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved. * @@ -122,7 +122,7 @@ void ssh_gssapi_build_ctx(Gssctxt **); void ssh_gssapi_delete_ctx(Gssctxt **); OM_uint32 ssh_gssapi_sign(Gssctxt *, gss_buffer_t, gss_buffer_t); void ssh_gssapi_buildmic(struct sshbuf *, const char *, - const char *, const char *); + const char *, const char *, const struct sshbuf *); int ssh_gssapi_check_mechanism(Gssctxt **, gss_OID, const char *); /* In the server */ diff --git a/ssh_api.c b/ssh_api.c index 8d65bdaecc20..bceff0f0c5ae 100644 --- a/ssh_api.c +++ b/ssh_api.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh_api.c,v 1.25 2021/01/27 09:26:54 djm Exp $ */ +/* $OpenBSD: ssh_api.c,v 1.26 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2012 Markus Friedl. All rights reserved. * @@ -60,10 +60,6 @@ int mm_sshkey_sign(struct sshkey *, u_char **, u_int *, DH *mm_choose_dh(int, int, int); #endif -/* Define these two variables here so that they are part of the library */ -u_char *session_id2 = NULL; -u_int session_id2_len = 0; - int mm_sshkey_sign(struct sshkey *key, u_char **sigp, u_int *lenp, const u_char *data, u_int datalen, const char *alg, diff --git a/sshconnect2.c b/sshconnect2.c index efd1def49f94..059c9480db6a 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.345 2021/01/27 09:26:54 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.346 2021/01/27 10:05:28 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -89,9 +89,6 @@ extern Options options; * SSH2 key exchange */ -u_char *session_id2 = NULL; -u_int session_id2_len = 0; - static char *xxx_host; static struct sockaddr *xxx_hostaddr; static const struct ssh_conn_info *xxx_conn_info; @@ -298,9 +295,6 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port, if ((r = kex_prop2buf(ssh->kex->my, myproposal)) != 0) fatal_r(r, "kex_prop2buf"); - session_id2 = ssh->kex->session_id; - session_id2_len = ssh->kex->session_id_len; - #ifdef DEBUG_KEXDH /* send 1st encrypted/maced/compressed message */ if ((r = sshpkt_start(ssh, SSH2_MSG_IGNORE)) != 0 || @@ -878,7 +872,8 @@ process_gssapi_token(struct ssh *ssh, gss_buffer_t recv_tok) if ((b = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); ssh_gssapi_buildmic(b, authctxt->server_user, - authctxt->service, "gssapi-with-mic"); + authctxt->service, "gssapi-with-mic", + ssh->kex->session_id); if ((gssbuf.value = sshbuf_mutable_ptr(b)) == NULL) fatal_f("sshbuf_mutable_ptr failed"); @@ -1409,13 +1404,12 @@ sign_and_send_pubkey(struct ssh *ssh, Identity *id) if ((b = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); if (ssh->compat & SSH_OLD_SESSIONID) { - if ((r = sshbuf_put(b, session_id2, - session_id2_len)) != 0) - fatal_fr(r, "sshbuf_put"); + if ((r = sshbuf_putb(b, ssh->kex->session_id)) != 0) + fatal_fr(r, "sshbuf_putb"); } else { - if ((r = sshbuf_put_string(b, session_id2, - session_id2_len)) != 0) - fatal_fr(r, "sshbuf_put_string"); + if ((r = sshbuf_put_stringb(b, + ssh->kex->session_id)) != 0) + fatal_fr(r, "sshbuf_put_stringb"); } skip = sshbuf_len(b); if ((r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || @@ -2172,7 +2166,7 @@ userauth_hostbased(struct ssh *ssh) error_fr(r, "sshkey_to_blob"); goto out; } - if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || + if ((r = sshbuf_put_stringb(b, ssh->kex->session_id)) != 0 || (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || (r = sshbuf_put_cstring(b, authctxt->server_user)) != 0 || (r = sshbuf_put_cstring(b, authctxt->service)) != 0 || diff --git a/sshd.c b/sshd.c index c99a5ac055de..41afed7c93c0 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.568 2021/01/27 09:26:54 djm Exp $ */ +/* $OpenBSD: sshd.c,v 1.569 2021/01/27 10:05:28 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -205,13 +205,6 @@ struct { static volatile sig_atomic_t received_sighup = 0; static volatile sig_atomic_t received_sigterm = 0; -/* session identifier, used by RSA-auth */ -u_char session_id[16]; - -/* same for ssh2 */ -u_char *session_id2 = NULL; -u_int session_id2_len = 0; - /* record remote hostname or ip */ u_int utmp_len = HOST_NAME_MAX+1; @@ -2398,9 +2391,6 @@ do_ssh2_kex(struct ssh *ssh) ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &kex->done); - session_id2 = kex->session_id; - session_id2_len = kex->session_id_len; - #ifdef DEBUG_KEXDH /* send 1st encrypted/maced/compressed message */ if ((r = sshpkt_start(ssh, SSH2_MSG_IGNORE)) != 0 || From 67f47f1965abafc1830a287761125c2f4790857e Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 27 Jan 2021 10:15:08 +0000 Subject: [PATCH 0186/1788] upstream: this needs kex.h now OpenBSD-Commit-ID: c5a42166c5aa002197217421a971e48be7cb5d41 --- auth2-gss.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/auth2-gss.c b/auth2-gss.c index 0dbabd353876..60e36961ce0a 100644 --- a/auth2-gss.c +++ b/auth2-gss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-gss.c,v 1.31 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: auth2-gss.c,v 1.32 2021/01/27 10:15:08 djm Exp $ */ /* * Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved. @@ -44,6 +44,7 @@ #include "misc.h" #include "servconf.h" #include "packet.h" +#include "kex.h" #include "ssh-gss.h" #include "monitor_wrap.h" From 1134a48cdcef8e7363b9f6c73ebdd24405066738 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Thu, 28 Jan 2021 08:57:31 +1100 Subject: [PATCH 0187/1788] correct kex name in disabled code --- regress/misc/fuzz-harness/kex_fuzz.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regress/misc/fuzz-harness/kex_fuzz.cc b/regress/misc/fuzz-harness/kex_fuzz.cc index c463cebac3d4..68ed892ca7d4 100644 --- a/regress/misc/fuzz-harness/kex_fuzz.cc +++ b/regress/misc/fuzz-harness/kex_fuzz.cc @@ -392,7 +392,7 @@ int main(void) struct test_state *ts; const int keytypes[] = { KEY_RSA, KEY_DSA, KEY_ECDSA, KEY_ED25519, -1 }; const char *kextypes[] = { - "sntrup4591761x25519-sha512@tinyssh.org", + "sntrup761x25519-sha512@openssh.com", "curve25519-sha256@libssh.org", "ecdh-sha2-nistp256", "diffie-hellman-group1-sha1", From d983e1732b8135d7ee8d92290d6dce35f736ab88 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 27 Jan 2021 23:49:46 +0000 Subject: [PATCH 0188/1788] upstream: fix leak: was double allocating kex->session_id buffer OpenBSD-Commit-ID: 3765f4cc3ae1df874dba9102a3588ba7b48b8183 --- kex.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kex.c b/kex.c index 56c68449f945..b73f14d3dd0b 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.165 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.166 2021/01/27 23:49:46 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -1068,13 +1068,15 @@ kex_derive_keys(struct ssh *ssh, u_char *hash, u_int hashlen, /* save initial hash as session id */ if ((kex->flags & KEX_INITIAL) != 0) { - if ((kex->session_id = sshbuf_new()) == NULL) - return SSH_ERR_ALLOC_FAIL; + if (sshbuf_len(kex->session_id) != 0) { + error_f("already have session ID at kex"); + return SSH_ERR_INTERNAL_ERROR; + } if ((r = sshbuf_put(kex->session_id, hash, hashlen)) != 0) return r; } else if (sshbuf_len(kex->session_id) == 0) { error_f("no session ID in rekex"); - return SSH_ERR_INTERNAL_ERROR; + return SSH_ERR_INTERNAL_ERROR; } for (i = 0; i < NKEYS; i++) { if ((r = derive_key(ssh, 'A'+i, kex->we_need, hash, hashlen, From 237dbb34e24b6b7ea888d54bda4d17da0a0fd0fa Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 28 Jan 2021 14:30:50 +1100 Subject: [PATCH 0189/1788] Remove whitespace. --- .github/workflows/c-cpp.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index d8677e2fe224..4b55da603e58 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -38,9 +38,7 @@ jobs: ubuntu-18_04: - runs-on: ubuntu-18.04 - strategy: matrix: configs: @@ -52,7 +50,6 @@ jobs: - "--with-selinux" - "--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin --with-selinux" - "--without-openssl --without-zlib" - steps: - uses: actions/checkout@v2 - name: setup CI system @@ -73,15 +70,12 @@ jobs: ubuntu-16_04: - runs-on: ubuntu-16.04 - strategy: matrix: configs: - "" - "--with-pam --with-selinux --with-libedit --with-kerberos5 " - steps: - uses: actions/checkout@v2 - name: setup CI system From 66dd9ddb5d2ea8c407908c8e8468c9d6e71db05b Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 28 Jan 2021 14:31:01 +1100 Subject: [PATCH 0190/1788] Add test against openssl head and libressl head. --- .github/setup_ci.sh | 24 +++++++++++++++++++++++- .github/workflows/c-cpp.yml | 5 ++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 02f8feda1c4c..5f6cbf8deb45 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -20,7 +20,7 @@ lsb_release -a for TARGET in $TARGETS; do case $TARGET in - ""|--without-openssl|--without-zlib|--with-Werror) + ""|--without-openssl|--without-zlib|--with-Werror|--with-rpath*) # nothing to do ;; "--with-kerberos5") @@ -43,6 +43,12 @@ for TARGET in $TARGETS; do "--with-ldflags=-lhardened_malloc") INSTALL_HARDENED_MALLOC=yes ;; + "--with-ssl-dir=/opt/openssl/head") + INSTALL_OPENSSL_HEAD=yes + ;; + "--with-ssl-dir=/opt/libressl/head") + INSTALL_LIBRESSL_HEAD=yes + ;; *) echo "Invalid option '${TARGET}'" exit 1 ;; @@ -66,3 +72,19 @@ if [ "${INSTALL_HARDENED_MALLOC}" = "yes" ]; then cd ${HOME}/hardened_malloc && make && sudo cp libhardened_malloc.so /usr/lib/) fi + +if [ "${INSTALL_OPENSSL_HEAD}" = "yes" ];then + (cd ${HOME} && + git clone https://github.com/openssl/openssl.git && + cd ${HOME}/openssl && + ./config no-threads no-engine no-fips no-shared --prefix=/opt/openssl/head && + make && sudo make install_sw) +fi + +if [ "${INSTALL_LIBRESSL_HEAD}" = "yes" ];then + (mkdir -p ${HOME}/libressl && cd ${HOME}/libressl && + git clone https://github.com/libressl-portable/portable.git && + cd ${HOME}/libressl/portable && sh update.sh && sh autogen.sh && + ./configure --prefix=/opt/libressl/head && + make && sudo make install_sw) +fi diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 4b55da603e58..e31ae668a59f 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -8,16 +8,15 @@ on: jobs: ubuntu-20_04: - runs-on: ubuntu-20.04 - strategy: matrix: configs: - "" - "--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin --with-selinux --with-Werror" - "--with-ldflags=-lhardened_malloc" - + - "--with-ssl-dir=/opt/openssl/head --with-rpath=-Wl,-rpath," + - "--with-ssl-dir=/opt/libressl/head --with-rpath=-Wl,-rpath," steps: - uses: actions/checkout@v2 - name: setup CI system From 3d59e88c0e42182c3749b446ccd9027933c84be4 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 28 Jan 2021 20:55:16 +1100 Subject: [PATCH 0191/1788] make with -j2 to use available CPUs. --- .github/setup_ci.sh | 6 +++--- .github/workflows/c-cpp.yml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 5f6cbf8deb45..67a76a5d530a 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -70,7 +70,7 @@ if [ "${INSTALL_HARDENED_MALLOC}" = "yes" ]; then (cd ${HOME} && git clone https://github.com/GrapheneOS/hardened_malloc.git && cd ${HOME}/hardened_malloc && - make && sudo cp libhardened_malloc.so /usr/lib/) + make -j2 && sudo cp libhardened_malloc.so /usr/lib/) fi if [ "${INSTALL_OPENSSL_HEAD}" = "yes" ];then @@ -78,7 +78,7 @@ if [ "${INSTALL_OPENSSL_HEAD}" = "yes" ];then git clone https://github.com/openssl/openssl.git && cd ${HOME}/openssl && ./config no-threads no-engine no-fips no-shared --prefix=/opt/openssl/head && - make && sudo make install_sw) + make -j2 && sudo make install_sw) fi if [ "${INSTALL_LIBRESSL_HEAD}" = "yes" ];then @@ -86,5 +86,5 @@ if [ "${INSTALL_LIBRESSL_HEAD}" = "yes" ];then git clone https://github.com/libressl-portable/portable.git && cd ${HOME}/libressl/portable && sh update.sh && sh autogen.sh && ./configure --prefix=/opt/libressl/head && - make && sudo make install_sw) + make -j2 && sudo make install_sw) fi diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index e31ae668a59f..e546a9c58787 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -26,7 +26,7 @@ jobs: - name: configure run: ./configure ${{ matrix.configs }} - name: make - run: make + run: make -j2 - name: copy moduli run: sudo cp moduli /usr/local/etc/ - name: make tests @@ -58,7 +58,7 @@ jobs: - name: configure run: ./configure ${{ matrix.configs }} - name: make - run: make + run: make -j2 - name: copy moduli run: sudo cp moduli /usr/local/etc/ - name: make tests @@ -84,7 +84,7 @@ jobs: - name: configure run: ./configure ${{ matrix.configs }} - name: make - run: make + run: make -j2 - name: copy moduli run: sudo cp moduli /usr/local/etc/ - name: make tests @@ -111,7 +111,7 @@ jobs: - name: configure run: ./configure --with-ssl-dir=/usr/local/opt/openssl ${{ matrix.configs }} - name: make - run: make + run: make -j2 - name: copy moduli run: sudo cp moduli /usr/local/etc/ - name: make tests From be5f0048ea2aaeddd27be7dcca23aaad345fa16c Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 29 Jan 2021 11:03:35 +1100 Subject: [PATCH 0192/1788] support for running kex fuzzer with null cipher --- regress/misc/fuzz-harness/kex_fuzz.cc | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/regress/misc/fuzz-harness/kex_fuzz.cc b/regress/misc/fuzz-harness/kex_fuzz.cc index 68ed892ca7d4..0c89bdd3e292 100644 --- a/regress/misc/fuzz-harness/kex_fuzz.cc +++ b/regress/misc/fuzz-harness/kex_fuzz.cc @@ -21,7 +21,7 @@ extern "C" { #include "log.h" // Define if you want to generate traces. -// #define STANDALONE 1 +/* #define STANDALONE 1 */ #define PRIV_RSA \ "-----BEGIN OPENSSH PRIVATE KEY-----\n"\ @@ -269,11 +269,21 @@ do_kex_with_key(struct shared_state *st, struct test_state *ts, pubkey = get_pubkey(st, keytype); privkey = get_privkey(st, keytype); keyname = xstrdup(sshkey_ssh_name(privkey)); - debug_f("%s %s clobber %s %zu", kex, keyname, - ts->cin == NULL ? "server" : "client", - ts->cin == NULL ? sshbuf_len(ts->sin) : sshbuf_len(ts->cin)); + if (ts->cin != NULL) { + debug_f("%s %s clobber client %zu", kex, keyname, + sshbuf_len(ts->cin)); + } else if (ts->sin != NULL) { + debug_f("%s %s clobber server %zu", kex, keyname, + sshbuf_len(ts->sin)); + } else + debug_f("%s %s noclobber", kex, keyname); + for (i = 0; i < PROPOSAL_MAX; i++) { ccp = proposal[i]; +#ifdef CIPHER_NONE_AVAIL + if (i == PROPOSAL_ENC_ALGS_CTOS || i == PROPOSAL_ENC_ALGS_STOC) + ccp = "none"; +#endif if (i == PROPOSAL_SERVER_HOST_KEY_ALGS) ccp = keyname; else if (i == PROPOSAL_KEX_ALGS && kex != NULL) @@ -396,12 +406,15 @@ int main(void) "curve25519-sha256@libssh.org", "ecdh-sha2-nistp256", "diffie-hellman-group1-sha1", + "diffie-hellman-group-exchange-sha1", NULL, }; int i, j; char *path; FILE *f; + log_init("kex_fuzz", SYSLOG_LEVEL_DEBUG3, SYSLOG_FACILITY_AUTH, 1); + if (st == NULL) { st = (struct shared_state *)xcalloc(1, sizeof(*st)); prepare_keys(st); From 1e660115f0c7c4a750cd31e468ff889f33dd8088 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 29 Jan 2021 11:09:14 +1100 Subject: [PATCH 0193/1788] fuzz diffie-hellman-group-exchange-sha1 kex too --- regress/misc/fuzz-harness/kex_fuzz.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/regress/misc/fuzz-harness/kex_fuzz.cc b/regress/misc/fuzz-harness/kex_fuzz.cc index 0c89bdd3e292..34b60dd69b58 100644 --- a/regress/misc/fuzz-harness/kex_fuzz.cc +++ b/regress/misc/fuzz-harness/kex_fuzz.cc @@ -486,6 +486,7 @@ kex_tests(struct shared_state *st, struct test_state *ts) do_kex(st, ts, "curve25519-sha256@libssh.org"); do_kex(st, ts, "ecdh-sha2-nistp256"); do_kex(st, ts, "diffie-hellman-group1-sha1"); + do_kex(st, ts, "diffie-hellman-group-exchange-sha1"); } int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) From 8afaa7d7918419d3da6c0477b83db2159879cb33 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 29 Jan 2021 06:28:10 +0000 Subject: [PATCH 0194/1788] upstream: give typedef'd struct a struct name; makes the fuzzer I'm writing a bit easier OpenBSD-Commit-ID: 1052ab521505a4d8384d67acb3974ef81b8896cb --- ssh-agent.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index ef6fa345a8b3..9fb0f0656462 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.273 2021/01/27 00:37:26 dtucker Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.274 2021/01/29 06:28:10 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -108,7 +108,7 @@ typedef enum { AUTH_CONNECTION } sock_type; -typedef struct { +typedef struct socket_entry { int fd; sock_type type; struct sshbuf *input; From 1a4b92758690faa12f49079dd3b72567f909466d Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 29 Jan 2021 06:29:46 +0000 Subject: [PATCH 0195/1788] upstream: fix the values of enum sock_type OpenBSD-Commit-ID: 18d048f4dbfbb159ff500cfc2700b8fb1407facd --- ssh-agent.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index 9fb0f0656462..ea1ebb3e32ae 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.274 2021/01/29 06:28:10 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.275 2021/01/29 06:29:46 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -103,9 +103,9 @@ #define AGENT_RBUF_LEN (4096) typedef enum { - AUTH_UNUSED, - AUTH_SOCKET, - AUTH_CONNECTION + AUTH_UNUSED = 0, + AUTH_SOCKET = 1, + AUTH_CONNECTION = 2, } sock_type; typedef struct socket_entry { From 7c2e3d6de1f2edb0c8b4725b4c2b56360e032b19 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 30 Jan 2021 00:56:38 +0000 Subject: [PATCH 0196/1788] upstream: add a SK_DUMMY_INTEGRATE define that allows the dummy security key middleware to be directly linked; useful for writing fuzzers, etc. OpenBSD-Regress-ID: 0ebd00159b58ebd85e61d8270fc02f1e45df1544 --- regress/misc/sk-dummy/sk-dummy.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/regress/misc/sk-dummy/sk-dummy.c b/regress/misc/sk-dummy/sk-dummy.c index bf1feec1537a..4003362d7960 100644 --- a/regress/misc/sk-dummy/sk-dummy.c +++ b/regress/misc/sk-dummy/sk-dummy.c @@ -51,6 +51,13 @@ # error SK API has changed, sk-dummy.c needs an update #endif +#ifdef SK_DUMMY_INTEGRATE +# define sk_api_version ssh_sk_api_version +# define sk_enroll ssh_sk_enroll +# define sk_sign ssh_sk_sign +# define sk_load_resident_keys ssh_sk_load_resident_keys +#endif /* !SK_STANDALONE */ + static void skdebug(const char *func, const char *fmt, ...) __attribute__((__format__ (printf, 2, 3))); From 76f46d75664fdaa1112739ca523ff85ee4eb52b4 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 30 Jan 2021 12:02:10 +1100 Subject: [PATCH 0197/1788] some fixed test data (mostly keys) for fuzzing --- regress/misc/fuzz-harness/testdata/README | 4 ++ .../testdata/create-agent-corpus.sh | 44 +++++++++++++++++++ regress/misc/fuzz-harness/testdata/id_dsa | 21 +++++++++ .../fuzz-harness/testdata/id_dsa-cert.pub | 1 + regress/misc/fuzz-harness/testdata/id_dsa.pub | 1 + regress/misc/fuzz-harness/testdata/id_ecdsa | 8 ++++ .../fuzz-harness/testdata/id_ecdsa-cert.pub | 1 + .../misc/fuzz-harness/testdata/id_ecdsa.pub | 1 + .../misc/fuzz-harness/testdata/id_ecdsa_sk | 14 ++++++ .../testdata/id_ecdsa_sk-cert.pub | 1 + .../fuzz-harness/testdata/id_ecdsa_sk.pub | 1 + regress/misc/fuzz-harness/testdata/id_ed25519 | 7 +++ .../fuzz-harness/testdata/id_ed25519-cert.pub | 1 + .../misc/fuzz-harness/testdata/id_ed25519.pub | 2 + .../misc/fuzz-harness/testdata/id_ed25519_sk | 8 ++++ .../testdata/id_ed25519_sk-cert.pub | 1 + .../fuzz-harness/testdata/id_ed25519_sk.pub | 1 + regress/misc/fuzz-harness/testdata/id_rsa | 27 ++++++++++++ .../fuzz-harness/testdata/id_rsa-cert.pub | 1 + regress/misc/fuzz-harness/testdata/id_rsa.pub | 1 + 20 files changed, 146 insertions(+) create mode 100644 regress/misc/fuzz-harness/testdata/README create mode 100755 regress/misc/fuzz-harness/testdata/create-agent-corpus.sh create mode 100644 regress/misc/fuzz-harness/testdata/id_dsa create mode 100644 regress/misc/fuzz-harness/testdata/id_dsa-cert.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_dsa.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_ecdsa create mode 100644 regress/misc/fuzz-harness/testdata/id_ecdsa-cert.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_ecdsa.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_ecdsa_sk create mode 100644 regress/misc/fuzz-harness/testdata/id_ecdsa_sk-cert.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_ecdsa_sk.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_ed25519 create mode 100644 regress/misc/fuzz-harness/testdata/id_ed25519-cert.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_ed25519.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_ed25519_sk create mode 100644 regress/misc/fuzz-harness/testdata/id_ed25519_sk-cert.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_ed25519_sk.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_rsa create mode 100644 regress/misc/fuzz-harness/testdata/id_rsa-cert.pub create mode 100644 regress/misc/fuzz-harness/testdata/id_rsa.pub diff --git a/regress/misc/fuzz-harness/testdata/README b/regress/misc/fuzz-harness/testdata/README new file mode 100644 index 000000000000..752053001ac4 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/README @@ -0,0 +1,4 @@ +This is preparatory data for fuzzing testing including scripts and test keys, +corresponding to ../fixed-keys that are used in the fuzz tests and consequent +fuzzing seed corpora. They should not be changed unless the affected seed +corpora are also regenerated. diff --git a/regress/misc/fuzz-harness/testdata/create-agent-corpus.sh b/regress/misc/fuzz-harness/testdata/create-agent-corpus.sh new file mode 100755 index 000000000000..1043b9ff47d7 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/create-agent-corpus.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +# Exercise ssh-agent to generate fuzzing corpus + +# XXX assumes agent hacked up with sk-dummy.o and ssh-sk.o linked directly +# and dumping of e->request for each message. + +set -xe +SSH_AUTH_SOCK=$PWD/sock +rm -f agent-[0-9]* $SSH_AUTH_SOCK +export SSH_AUTH_SOCK +../../../../ssh-agent -D -a $SSH_AUTH_SOCK & +sleep 1 +AGENT_PID=$! +trap "kill $AGENT_PID" EXIT + +PRIV="id_dsa id_ecdsa id_ecdsa_sk id_ed25519 id_ed25519_sk id_rsa" + +# add keys +ssh-add $PRIV + +# sign +ssh-add -T *.pub + +# list +ssh-add -l + +# remove individually +ssh-add -d $PRIV + +# re-add with constraints +ssh-add -c -t 3h $PRIV + +# delete all +ssh-add -D + +# attempt to add a PKCS#11 token +ssh-add -s /fake || : + +# attempt to delete PKCS#11 +ssh-add -e /fake || : + +ssh-add -L + diff --git a/regress/misc/fuzz-harness/testdata/id_dsa b/regress/misc/fuzz-harness/testdata/id_dsa new file mode 100644 index 000000000000..88bf5566c93b --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_dsa @@ -0,0 +1,21 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsgAAAAdzc2gtZH +NzAAAAgQCsGTfjpQ465EOkfQXJM9BOvfRQE0fqlykAls+ncz+T7hrbeScRu8xpwzsznJNm +xlW8o6cUDiHmBJ5OHgamUC9N7YJeU/6fnOAZifgN8mqK6k8pKHuje8ANOiYgHLl0yiASQA +3//qMyzZ+W/hemoLSmLAbEqlfWVeyYx+wta1Vm+QAAABUAvWyehvUvdHvQxavYgS5p0t5Q +d7UAAACBAIRA9Yy+f4Kzqpv/qICPO3zk42UuP7WAhSW2nCbQdLlCiSTxcjKgcvXNRckwJP +44JjSHOtJy/AMtJrPIbLYG6KuWTdBlEHFiG6DafvLG+qPMSL2bPjXTOhuOMbCHIZ+5WBkW +THeG/Nv11iI01Of9V6tXkig23K370flkRkXFi9MdAAAAgCt6YUcQkNwG7B/e5M1FZsLP9O +kVB3BwLAOjmWdHpyhu3HpwSJa3XLEvhXN0i6IVI2KgPo/2GtYA6rHt14L+6u1pmhh8sAvQ +ksp3qZB+xh/NP+hBqf0sbHX0yYbzKOvI5SCc/kKK6yagcBZOsubM/KC8TxyVgmD5c6WzYs +h5TEpvAAAB2PHjRbbx40W2AAAAB3NzaC1kc3MAAACBAKwZN+OlDjrkQ6R9Bckz0E699FAT +R+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4B +mJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1r +VWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS +4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIb +oNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRc +WL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SL +ohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJ +z+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8AAAAUUA+OGldMi76ClO/sstpdbBUE +lq8AAAAAAQI= +-----END OPENSSH PRIVATE KEY----- diff --git a/regress/misc/fuzz-harness/testdata/id_dsa-cert.pub b/regress/misc/fuzz-harness/testdata/id_dsa-cert.pub new file mode 100644 index 000000000000..3afb87fe62f7 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_dsa-cert.pub @@ -0,0 +1 @@ +ssh-dss-cert-v01@openssh.com AAAAHHNzaC1kc3MtY2VydC12MDFAb3BlbnNzaC5jb20AAAAguF716Yub+vVKNlONKLsfxGYWkRe/PyjfYdGRTsFaDvAAAACBAKwZN+OlDjrkQ6R9Bckz0E699FATR+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4BmJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1rVWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIboNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRcWL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SLohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJz+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8AAAAAAAAD6AAAAAEAAAAHdWx5c3NlcwAAABcAAAAHdWx5c3NlcwAAAAhvZHlzc2V1cwAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAFMAAAALc3NoLWVkMjU1MTkAAABAjMQEZcbdUYJBjIC4GxByFDOb8tv71vDZdx7irHwaqIjx5rzpJUuOV1r8ZO4kY+Yaiun1yrWj2QYkfJrHBvD1DA== id_dsa.pub diff --git a/regress/misc/fuzz-harness/testdata/id_dsa.pub b/regress/misc/fuzz-harness/testdata/id_dsa.pub new file mode 100644 index 000000000000..6f91c4e07336 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_dsa.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAKwZN+OlDjrkQ6R9Bckz0E699FATR+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4BmJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1rVWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIboNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRcWL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SLohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJz+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8= diff --git a/regress/misc/fuzz-harness/testdata/id_ecdsa b/regress/misc/fuzz-harness/testdata/id_ecdsa new file mode 100644 index 000000000000..c1a96c6f9eaf --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ecdsa @@ -0,0 +1,8 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS +1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTDJ0VlMv+0rguNzaJ1DF2KueHaxRSQ +6LpIxGbulrg1a8RPbnMXwag5GcDiDllD2lDUJUuBEWyjXA0rZoZX35ELAAAAoE/Bbr5PwW +6+AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43N +onUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQ +sAAAAhAIhE6hCID5oOm1TDktc++KFKyScjLifcZ6Cgv5xSSyLOAAAAAAECAwQFBgc= +-----END OPENSSH PRIVATE KEY----- diff --git a/regress/misc/fuzz-harness/testdata/id_ecdsa-cert.pub b/regress/misc/fuzz-harness/testdata/id_ecdsa-cert.pub new file mode 100644 index 000000000000..9de599917de6 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ecdsa-cert.pub @@ -0,0 +1 @@ +ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgVJZuM/1AOe6n++qRWMyUuAThYqLvvQxj5CGflLODp60AAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43NonUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQsAAAAAAAAD6QAAAAEAAAAHdWx5c3NlcwAAABcAAAAHdWx5c3NlcwAAAAhvZHlzc2V1cwAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAFMAAAALc3NoLWVkMjU1MTkAAABAtdJpcF6ZmQL+ueices4QZeL7AK8Xuo08jyLgiolhjKy2jj4LSUki4aX/ZeZeJuby1ovGrfaeFAgx3itPLR7IAQ== id_ecdsa.pub diff --git a/regress/misc/fuzz-harness/testdata/id_ecdsa.pub b/regress/misc/fuzz-harness/testdata/id_ecdsa.pub new file mode 100644 index 000000000000..30a7cc23b228 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ecdsa.pub @@ -0,0 +1 @@ +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43NonUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQs= diff --git a/regress/misc/fuzz-harness/testdata/id_ecdsa_sk b/regress/misc/fuzz-harness/testdata/id_ecdsa_sk new file mode 100644 index 000000000000..5a364ed39f1e --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ecdsa_sk @@ -0,0 +1,14 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAfwAAACJzay1lY2 +RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tAAAACG5pc3RwMjU2AAAAQQTYyU76zop1 +VOb4DfKWYnR5b0TOC3zw8DzObAfHWB5o6xls+tOYiEleXvIEi00Da2iCK47habZTOhLyeB +X2Avu5AAAABHNzaDoAAAGYqUAQSKlAEEgAAAAic2stZWNkc2Etc2hhMi1uaXN0cDI1NkBv +cGVuc3NoLmNvbQAAAAhuaXN0cDI1NgAAAEEE2MlO+s6KdVTm+A3ylmJ0eW9Ezgt88PA8zm +wHx1geaOsZbPrTmIhJXl7yBItNA2togiuO4Wm2UzoS8ngV9gL7uQAAAARzc2g6AQAAAOMt +LS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KTUhjQ0FRRUVJSHFsZjNsWTkxZFhwUn +dYZDBrS0lYWmNpeDRRcDBNSU15Ny9JMUxXSTFuWG9Bb0dDQ3FHU000OQpBd0VIb1VRRFFn +QUUyTWxPK3M2S2RWVG0rQTN5bG1KMGVXOUV6Z3Q4OFBBOHptd0h4MWdlYU9zWmJQclRtSW +hKClhsN3lCSXROQTJ0b2dpdU80V20yVXpvUzhuZ1Y5Z0w3dVE9PQotLS0tLUVORCBFQyBQ +UklWQVRFIEtFWS0tLS0tCgAAAAAAAAAbZGptQGRqbS5zeWQuY29ycC5nb29nbGUuY29tAQ +IDBAUG +-----END OPENSSH PRIVATE KEY----- diff --git a/regress/misc/fuzz-harness/testdata/id_ecdsa_sk-cert.pub b/regress/misc/fuzz-harness/testdata/id_ecdsa_sk-cert.pub new file mode 100644 index 000000000000..14040fad7aa6 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ecdsa_sk-cert.pub @@ -0,0 +1 @@ +sk-ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAK3NrLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgKLHtIca++5VoDrUAXU/KqGJZ7jZEnuJSTvt7VrYY9foAAAAIbmlzdHAyNTYAAABBBNjJTvrOinVU5vgN8pZidHlvRM4LfPDwPM5sB8dYHmjrGWz605iISV5e8gSLTQNraIIrjuFptlM6EvJ4FfYC+7kAAAAEc3NoOgAAAAAAAAPqAAAAAQAAAAd1bHlzc2VzAAAAFwAAAAd1bHlzc2VzAAAACG9keXNzZXVzAAAAAAAAAAD//////////wAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIDPQXmEVMVLmeFRyafKMVWgPDkv8/uRBTwmcEDatZzMDAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEB1naZOQDLaDr+fwn6E9x8/8HeiaUubDzPexfNQMz+m/7RD0gd5uJhHYUfDb5+/sIx1I7bUEeRIDkBbmZ2foo0E djm@djm.syd.corp.google.com diff --git a/regress/misc/fuzz-harness/testdata/id_ecdsa_sk.pub b/regress/misc/fuzz-harness/testdata/id_ecdsa_sk.pub new file mode 100644 index 000000000000..1b5e829b7418 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ecdsa_sk.pub @@ -0,0 +1 @@ +sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBNjJTvrOinVU5vgN8pZidHlvRM4LfPDwPM5sB8dYHmjrGWz605iISV5e8gSLTQNraIIrjuFptlM6EvJ4FfYC+7kAAAAEc3NoOg== djm@djm.syd.corp.google.com diff --git a/regress/misc/fuzz-harness/testdata/id_ed25519 b/regress/misc/fuzz-harness/testdata/id_ed25519 new file mode 100644 index 000000000000..6a7fbac929d1 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ed25519 @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAIhWlP99VpT/ +fQAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAw +AAAEDE1rlcMC0s0X3TKVZAOVavZOywwkXw8tO5dLObxaCMEDPQXmEVMVLmeFRyafKMVWgP +Dkv8/uRBTwmcEDatZzMDAAAAAAECAwQF +-----END OPENSSH PRIVATE KEY----- diff --git a/regress/misc/fuzz-harness/testdata/id_ed25519-cert.pub b/regress/misc/fuzz-harness/testdata/id_ed25519-cert.pub new file mode 100644 index 000000000000..6a95fed2ac80 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ed25519-cert.pub @@ -0,0 +1 @@ +ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIMDQjYH6XRzH3j3MW1DdjCoAfvrHfgjnVGF+sLK0pBfqAAAAIDPQXmEVMVLmeFRyafKMVWgPDkv8/uRBTwmcEDatZzMDAAAAAAAAA+sAAAABAAAAB3VseXNzZXMAAAAXAAAAB3VseXNzZXMAAAAIb2R5c3NldXMAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgM9BeYRUxUuZ4VHJp8oxVaA8OS/z+5EFPCZwQNq1nMwMAAABTAAAAC3NzaC1lZDI1NTE5AAAAQBj0og+s09/HpwdHZbzN0twooKPDWWrxGfnP1Joy6cDnY2BCSQ7zg9vbq11kLF8H/sKOTZWAQrUZ7LlChOu9Ogw= id_ed25519.pub diff --git a/regress/misc/fuzz-harness/testdata/id_ed25519.pub b/regress/misc/fuzz-harness/testdata/id_ed25519.pub new file mode 100644 index 000000000000..87b61744701f --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ed25519.pub @@ -0,0 +1,2 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDPQXmEVMVLmeFRyafKMVWgPDkv8/uRBTwmcEDatZzMD + diff --git a/regress/misc/fuzz-harness/testdata/id_ed25519_sk b/regress/misc/fuzz-harness/testdata/id_ed25519_sk new file mode 100644 index 000000000000..9dcda6c4626f --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ed25519_sk @@ -0,0 +1,8 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAABpzay1zc2 +gtZWQyNTUxOUBvcGVuc3NoLmNvbQAAACCTJtH10vWhIDxd62edvMLg9u2cwYKyqa7332je +RArHjAAAAARzc2g6AAAAwN7vvE3e77xNAAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY2 +9tAAAAIJMm0fXS9aEgPF3rZ528wuD27ZzBgrKprvffaN5ECseMAAAABHNzaDoBAAAAQEsS +xLFiVzfpH2mt9xh8i/zmHV646Hud4QruNBAGNl8gkybR9dL1oSA8XetnnbzC4PbtnMGCsq +mu999o3kQKx4wAAAAAAAAAG2RqbUBkam0uc3lkLmNvcnAuZ29vZ2xlLmNvbQECAwQFBg== +-----END OPENSSH PRIVATE KEY----- diff --git a/regress/misc/fuzz-harness/testdata/id_ed25519_sk-cert.pub b/regress/misc/fuzz-harness/testdata/id_ed25519_sk-cert.pub new file mode 100644 index 000000000000..9e41eec00df4 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ed25519_sk-cert.pub @@ -0,0 +1 @@ +sk-ssh-ed25519-cert-v01@openssh.com AAAAI3NrLXNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJiT+C/VLMWholFZ4xhOyJr0nSLZSFRIM3I07wUNTRPaAAAAIJMm0fXS9aEgPF3rZ528wuD27ZzBgrKprvffaN5ECseMAAAABHNzaDoAAAAAAAAD7AAAAAEAAAAHdWx5c3NlcwAAABcAAAAHdWx5c3NlcwAAAAhvZHlzc2V1cwAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAFMAAAALc3NoLWVkMjU1MTkAAABAX0Pu13B94pVR3qq8MJQGkOS1Cd7AAM1k6O2VSwyDPM/LfsWIQ4ywgxDmk3hjXWOY7BqljuMxo5VO4JymEIhQBA== djm@djm.syd.corp.google.com diff --git a/regress/misc/fuzz-harness/testdata/id_ed25519_sk.pub b/regress/misc/fuzz-harness/testdata/id_ed25519_sk.pub new file mode 100644 index 000000000000..38d198444b79 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_ed25519_sk.pub @@ -0,0 +1 @@ +sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIJMm0fXS9aEgPF3rZ528wuD27ZzBgrKprvffaN5ECseMAAAABHNzaDo= djm@djm.syd.corp.google.com diff --git a/regress/misc/fuzz-harness/testdata/id_rsa b/regress/misc/fuzz-harness/testdata/id_rsa new file mode 100644 index 000000000000..574fecf47008 --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn +NhAAAAAwEAAQAAAQEA3+epf+VGKoGPaAZXrf6S0cyumQnddkGBnVFX0A5eh37RtLug0qY5 +thxsBUbGGVr9mTd2QXwLujBwYg5l1MP/Fmg+5312Zgx9pHmS+qKULbar0hlNgptNEb+aNU +d3o9qg3aXqXm7+ZnjAV05ef/mxNRN2ZvuEkw7cRppTJcbBI+vF3lXuCXnX2klDI95Gl2AW +3WHRtanqLHZXuBkjjRBDKc7MUq/GP1hmLiAd95dvU7fZjRlIEsP84zGEI1Fb0L/kmPHcOt +iVfHft8CtmC9v6+94JrOiPBBNScV+dyrgAGPsdKdr/1vIpQmCNiI8s3PCiD8J7ZiBaYm0I +8fq5G/qnUwAAA7ggw2dXIMNnVwAAAAdzc2gtcnNhAAABAQDf56l/5UYqgY9oBlet/pLRzK +6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZm +DH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGml +MlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29T +t9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v +/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdTAAAAAwEAAQAAAQEArWm5B4tFasppjUHM +SsAuajtCxtizI1Hc10EW59cZM4vvUzE2f6+qZvdgWj3UU/L7Et23w0QVuSCnCerox379ZB +ddEOFFAAiQjwBx65hbd4RRUymxtIQfjq18++LcMJW1nbVQ7c69ThQbtALIggmbS+ZE/8Gx +jkwmIrCH0Ww8TlpsPe+mNHuyNk7UEZoXLm22lNLqq5qkIL5JgT6M2iNJpMOJy9/CKi6kO4 +JPuVwjdG4C5pBPaMN3KJ1IvAlSlLGNaXnfXcn85gWfsCjsZmH3liey2NJamqp/w83BrKUg +YZvMR2qeWZaKkFTahpzN5KRK1BFeB37O0P84Dzh1biDX8QAAAIEAiWXW8ePYFwLpa2mFIh +VvRTdcrN70rVK5eWVaL3pyS4vGA56Jixq86dHveOnbSY+iNb1jQidtXc8SWUt2wtHqZ32h +Lji9/hMSKqe9SEP3xvDRDmUJqsVw0ySyrFrzm4160QY6RKU3CIQCVFslMZ9fxmrfZ/hxoU +0X3FVsxmC4+kwAAACBAPOc1YERpV6PjANBrGR+1o1RCdACbm5myc42QzSNIaOZmgrYs+Gt +7+EcoqSdbJzHJNCNQfF+A+vjbIkFiuZqq/5wwr59qXx5OAlijLB/ywwKmTWq6lp//Zxny+ +ka3sIGNO14eQvmxNDnlLL+RIZleCTEKBXSW6CZhr+uHMZFKKMtAAAAgQDrSkm+LbILB7H9 +jxEBZLhv53aAn4u81kFKQOJ7PzzpBGSoD12i7oIJu5siSD5EKDNVEr+SvCf0ISU3BuMpzl +t3YrPrHRheOFhn5e3j0e//zB8rBC0DGB4CtTDdeh7rOXUL4K0pz+8wEpNkV62SWxhC6NRW +I79JhtGkh+GtcnkEfwAAAAAB +-----END OPENSSH PRIVATE KEY----- diff --git a/regress/misc/fuzz-harness/testdata/id_rsa-cert.pub b/regress/misc/fuzz-harness/testdata/id_rsa-cert.pub new file mode 100644 index 000000000000..01761a38fa0f --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_rsa-cert.pub @@ -0,0 +1 @@ +ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg89JX6OBMYDSxER8fnU5y8xxeMCHR/hI0uVqdEhNyCpcAAAADAQABAAABAQDf56l/5UYqgY9oBlet/pLRzK6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZmDH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGmlMlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29Tt9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdTAAAAAAAAA+0AAAABAAAAB3VseXNzZXMAAAAXAAAAB3VseXNzZXMAAAAIb2R5c3NldXMAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgM9BeYRUxUuZ4VHJp8oxVaA8OS/z+5EFPCZwQNq1nMwMAAABTAAAAC3NzaC1lZDI1NTE5AAAAQGCDA6PWw4x9bHQl0w7NqifHepumqD3dmyMx+hZGuPRon+TsyCjfytu7hWmV7l9XUF0fPQNFQ7FGat5e+7YUNgE= id_rsa.pub diff --git a/regress/misc/fuzz-harness/testdata/id_rsa.pub b/regress/misc/fuzz-harness/testdata/id_rsa.pub new file mode 100644 index 000000000000..05015e12bfaa --- /dev/null +++ b/regress/misc/fuzz-harness/testdata/id_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf56l/5UYqgY9oBlet/pLRzK6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZmDH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGmlMlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29Tt9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdT From 7e96c877bcb2fb645355a687b8cb7347987c1c58 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 30 Jan 2021 12:02:46 +1100 Subject: [PATCH 0198/1788] move keys out of kex_fuzz.cc into separate header add certificates and missing key types --- regress/misc/fuzz-harness/fixed-keys.h | 119 +++++++++++++++++++++++++ regress/misc/fuzz-harness/kex_fuzz.cc | 78 +--------------- 2 files changed, 121 insertions(+), 76 deletions(-) create mode 100644 regress/misc/fuzz-harness/fixed-keys.h diff --git a/regress/misc/fuzz-harness/fixed-keys.h b/regress/misc/fuzz-harness/fixed-keys.h new file mode 100644 index 000000000000..c6e7c6cc1828 --- /dev/null +++ b/regress/misc/fuzz-harness/fixed-keys.h @@ -0,0 +1,119 @@ +/* + * Some keys used by fuzzers + */ + +#define PRIV_RSA \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn\n"\ +"NhAAAAAwEAAQAAAQEA3+epf+VGKoGPaAZXrf6S0cyumQnddkGBnVFX0A5eh37RtLug0qY5\n"\ +"thxsBUbGGVr9mTd2QXwLujBwYg5l1MP/Fmg+5312Zgx9pHmS+qKULbar0hlNgptNEb+aNU\n"\ +"d3o9qg3aXqXm7+ZnjAV05ef/mxNRN2ZvuEkw7cRppTJcbBI+vF3lXuCXnX2klDI95Gl2AW\n"\ +"3WHRtanqLHZXuBkjjRBDKc7MUq/GP1hmLiAd95dvU7fZjRlIEsP84zGEI1Fb0L/kmPHcOt\n"\ +"iVfHft8CtmC9v6+94JrOiPBBNScV+dyrgAGPsdKdr/1vIpQmCNiI8s3PCiD8J7ZiBaYm0I\n"\ +"8fq5G/qnUwAAA7ggw2dXIMNnVwAAAAdzc2gtcnNhAAABAQDf56l/5UYqgY9oBlet/pLRzK\n"\ +"6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZm\n"\ +"DH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGml\n"\ +"MlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29T\n"\ +"t9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v\n"\ +"/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdTAAAAAwEAAQAAAQEArWm5B4tFasppjUHM\n"\ +"SsAuajtCxtizI1Hc10EW59cZM4vvUzE2f6+qZvdgWj3UU/L7Et23w0QVuSCnCerox379ZB\n"\ +"ddEOFFAAiQjwBx65hbd4RRUymxtIQfjq18++LcMJW1nbVQ7c69ThQbtALIggmbS+ZE/8Gx\n"\ +"jkwmIrCH0Ww8TlpsPe+mNHuyNk7UEZoXLm22lNLqq5qkIL5JgT6M2iNJpMOJy9/CKi6kO4\n"\ +"JPuVwjdG4C5pBPaMN3KJ1IvAlSlLGNaXnfXcn85gWfsCjsZmH3liey2NJamqp/w83BrKUg\n"\ +"YZvMR2qeWZaKkFTahpzN5KRK1BFeB37O0P84Dzh1biDX8QAAAIEAiWXW8ePYFwLpa2mFIh\n"\ +"VvRTdcrN70rVK5eWVaL3pyS4vGA56Jixq86dHveOnbSY+iNb1jQidtXc8SWUt2wtHqZ32h\n"\ +"Lji9/hMSKqe9SEP3xvDRDmUJqsVw0ySyrFrzm4160QY6RKU3CIQCVFslMZ9fxmrfZ/hxoU\n"\ +"0X3FVsxmC4+kwAAACBAPOc1YERpV6PjANBrGR+1o1RCdACbm5myc42QzSNIaOZmgrYs+Gt\n"\ +"7+EcoqSdbJzHJNCNQfF+A+vjbIkFiuZqq/5wwr59qXx5OAlijLB/ywwKmTWq6lp//Zxny+\n"\ +"ka3sIGNO14eQvmxNDnlLL+RIZleCTEKBXSW6CZhr+uHMZFKKMtAAAAgQDrSkm+LbILB7H9\n"\ +"jxEBZLhv53aAn4u81kFKQOJ7PzzpBGSoD12i7oIJu5siSD5EKDNVEr+SvCf0ISU3BuMpzl\n"\ +"t3YrPrHRheOFhn5e3j0e//zB8rBC0DGB4CtTDdeh7rOXUL4K0pz+8wEpNkV62SWxhC6NRW\n"\ +"I79JhtGkh+GtcnkEfwAAAAAB\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_RSA \ +"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf56l/5UYqgY9oBlet/pLRzK6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZmDH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGmlMlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29Tt9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdT" +#define CERT_RSA \ +"ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg89JX6OBMYDSxER8fnU5y8xxeMCHR/hI0uVqdEhNyCpcAAAADAQABAAABAQDf56l/5UYqgY9oBlet/pLRzK6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZmDH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGmlMlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29Tt9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdTAAAAAAAAA+0AAAABAAAAB3VseXNzZXMAAAAXAAAAB3VseXNzZXMAAAAIb2R5c3NldXMAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgM9BeYRUxUuZ4VHJp8oxVaA8OS/z+5EFPCZwQNq1nMwMAAABTAAAAC3NzaC1lZDI1NTE5AAAAQGCDA6PWw4x9bHQl0w7NqifHepumqD3dmyMx+hZGuPRon+TsyCjfytu7hWmV7l9XUF0fPQNFQ7FGat5e+7YUNgE= id_rsa.pub" +#define PRIV_DSA \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsgAAAAdzc2gtZH\n"\ +"NzAAAAgQCsGTfjpQ465EOkfQXJM9BOvfRQE0fqlykAls+ncz+T7hrbeScRu8xpwzsznJNm\n"\ +"xlW8o6cUDiHmBJ5OHgamUC9N7YJeU/6fnOAZifgN8mqK6k8pKHuje8ANOiYgHLl0yiASQA\n"\ +"3//qMyzZ+W/hemoLSmLAbEqlfWVeyYx+wta1Vm+QAAABUAvWyehvUvdHvQxavYgS5p0t5Q\n"\ +"d7UAAACBAIRA9Yy+f4Kzqpv/qICPO3zk42UuP7WAhSW2nCbQdLlCiSTxcjKgcvXNRckwJP\n"\ +"44JjSHOtJy/AMtJrPIbLYG6KuWTdBlEHFiG6DafvLG+qPMSL2bPjXTOhuOMbCHIZ+5WBkW\n"\ +"THeG/Nv11iI01Of9V6tXkig23K370flkRkXFi9MdAAAAgCt6YUcQkNwG7B/e5M1FZsLP9O\n"\ +"kVB3BwLAOjmWdHpyhu3HpwSJa3XLEvhXN0i6IVI2KgPo/2GtYA6rHt14L+6u1pmhh8sAvQ\n"\ +"ksp3qZB+xh/NP+hBqf0sbHX0yYbzKOvI5SCc/kKK6yagcBZOsubM/KC8TxyVgmD5c6WzYs\n"\ +"h5TEpvAAAB2PHjRbbx40W2AAAAB3NzaC1kc3MAAACBAKwZN+OlDjrkQ6R9Bckz0E699FAT\n"\ +"R+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4B\n"\ +"mJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1r\n"\ +"VWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS\n"\ +"4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIb\n"\ +"oNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRc\n"\ +"WL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SL\n"\ +"ohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJ\n"\ +"z+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8AAAAUUA+OGldMi76ClO/sstpdbBUE\n"\ +"lq8AAAAAAQI=\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_DSA \ +"ssh-dss AAAAB3NzaC1kc3MAAACBAKwZN+OlDjrkQ6R9Bckz0E699FATR+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4BmJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1rVWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIboNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRcWL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SLohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJz+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8=" +#define CERT_DSA \ +"ssh-dss-cert-v01@openssh.com AAAAHHNzaC1kc3MtY2VydC12MDFAb3BlbnNzaC5jb20AAAAguF716Yub+vVKNlONKLsfxGYWkRe/PyjfYdGRTsFaDvAAAACBAKwZN+OlDjrkQ6R9Bckz0E699FATR+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4BmJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1rVWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIboNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRcWL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SLohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJz+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8AAAAAAAAD6AAAAAEAAAAHdWx5c3NlcwAAABcAAAAHdWx5c3NlcwAAAAhvZHlzc2V1cwAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAFMAAAALc3NoLWVkMjU1MTkAAABAjMQEZcbdUYJBjIC4GxByFDOb8tv71vDZdx7irHwaqIjx5rzpJUuOV1r8ZO4kY+Yaiun1yrWj2QYkfJrHBvD1DA== id_dsa.pub" +#define PRIV_ECDSA \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS\n"\ +"1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTDJ0VlMv+0rguNzaJ1DF2KueHaxRSQ\n"\ +"6LpIxGbulrg1a8RPbnMXwag5GcDiDllD2lDUJUuBEWyjXA0rZoZX35ELAAAAoE/Bbr5PwW\n"\ +"6+AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43N\n"\ +"onUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQ\n"\ +"sAAAAhAIhE6hCID5oOm1TDktc++KFKyScjLifcZ6Cgv5xSSyLOAAAAAAECAwQFBgc=\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_ECDSA \ +"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43NonUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQs=" +#define CERT_ECDSA \ +"ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgVJZuM/1AOe6n++qRWMyUuAThYqLvvQxj5CGflLODp60AAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43NonUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQsAAAAAAAAD6QAAAAEAAAAHdWx5c3NlcwAAABcAAAAHdWx5c3NlcwAAAAhvZHlzc2V1cwAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAFMAAAALc3NoLWVkMjU1MTkAAABAtdJpcF6ZmQL+ueices4QZeL7AK8Xuo08jyLgiolhjKy2jj4LSUki4aX/ZeZeJuby1ovGrfaeFAgx3itPLR7IAQ== id_ecdsa.pub" +#define PRIV_ED25519 \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\n"\ +"QyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAIhWlP99VpT/\n"\ +"fQAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAw\n"\ +"AAAEDE1rlcMC0s0X3TKVZAOVavZOywwkXw8tO5dLObxaCMEDPQXmEVMVLmeFRyafKMVWgP\n"\ +"Dkv8/uRBTwmcEDatZzMDAAAAAAECAwQF\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_ED25519 \ +"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDPQXmEVMVLmeFRyafKMVWgPDkv8/uRBTwmcEDatZzMD" +#define CERT_ED25519 \ +"ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIMDQjYH6XRzH3j3MW1DdjCoAfvrHfgjnVGF+sLK0pBfqAAAAIDPQXmEVMVLmeFRyafKMVWgPDkv8/uRBTwmcEDatZzMDAAAAAAAAA+sAAAABAAAAB3VseXNzZXMAAAAXAAAAB3VseXNzZXMAAAAIb2R5c3NldXMAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgM9BeYRUxUuZ4VHJp8oxVaA8OS/z+5EFPCZwQNq1nMwMAAABTAAAAC3NzaC1lZDI1NTE5AAAAQBj0og+s09/HpwdHZbzN0twooKPDWWrxGfnP1Joy6cDnY2BCSQ7zg9vbq11kLF8H/sKOTZWAQrUZ7LlChOu9Ogw= id_ed25519.pub" +#define PRIV_ECDSA_SK \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAfwAAACJzay1lY2\n"\ +"RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tAAAACG5pc3RwMjU2AAAAQQTYyU76zop1\n"\ +"VOb4DfKWYnR5b0TOC3zw8DzObAfHWB5o6xls+tOYiEleXvIEi00Da2iCK47habZTOhLyeB\n"\ +"X2Avu5AAAABHNzaDoAAAGYqUAQSKlAEEgAAAAic2stZWNkc2Etc2hhMi1uaXN0cDI1NkBv\n"\ +"cGVuc3NoLmNvbQAAAAhuaXN0cDI1NgAAAEEE2MlO+s6KdVTm+A3ylmJ0eW9Ezgt88PA8zm\n"\ +"wHx1geaOsZbPrTmIhJXl7yBItNA2togiuO4Wm2UzoS8ngV9gL7uQAAAARzc2g6AQAAAOMt\n"\ +"LS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KTUhjQ0FRRUVJSHFsZjNsWTkxZFhwUn\n"\ +"dYZDBrS0lYWmNpeDRRcDBNSU15Ny9JMUxXSTFuWG9Bb0dDQ3FHU000OQpBd0VIb1VRRFFn\n"\ +"QUUyTWxPK3M2S2RWVG0rQTN5bG1KMGVXOUV6Z3Q4OFBBOHptd0h4MWdlYU9zWmJQclRtSW\n"\ +"hKClhsN3lCSXROQTJ0b2dpdU80V20yVXpvUzhuZ1Y5Z0w3dVE9PQotLS0tLUVORCBFQyBQ\n"\ +"UklWQVRFIEtFWS0tLS0tCgAAAAAAAAAbZGptQGRqbS5zeWQuY29ycC5nb29nbGUuY29tAQ\n"\ +"IDBAUG\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_ECDSA_SK \ +"sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBNjJTvrOinVU5vgN8pZidHlvRM4LfPDwPM5sB8dYHmjrGWz605iISV5e8gSLTQNraIIrjuFptlM6EvJ4FfYC+7kAAAAEc3NoOg==" +#define CERT_ECDSA_SK \ +"sk-ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAK3NrLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgKLHtIca++5VoDrUAXU/KqGJZ7jZEnuJSTvt7VrYY9foAAAAIbmlzdHAyNTYAAABBBNjJTvrOinVU5vgN8pZidHlvRM4LfPDwPM5sB8dYHmjrGWz605iISV5e8gSLTQNraIIrjuFptlM6EvJ4FfYC+7kAAAAEc3NoOgAAAAAAAAPqAAAAAQAAAAd1bHlzc2VzAAAAFwAAAAd1bHlzc2VzAAAACG9keXNzZXVzAAAAAAAAAAD//////////wAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIDPQXmEVMVLmeFRyafKMVWgPDkv8/uRBTwmcEDatZzMDAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEB1naZOQDLaDr+fwn6E9x8/8HeiaUubDzPexfNQMz+m/7RD0gd5uJhHYUfDb5+/sIx1I7bUEeRIDkBbmZ2foo0E" +#define PRIV_ED25519_SK \ +"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ +"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAABpzay1zc2\n"\ +"gtZWQyNTUxOUBvcGVuc3NoLmNvbQAAACCTJtH10vWhIDxd62edvMLg9u2cwYKyqa7332je\n"\ +"RArHjAAAAARzc2g6AAAAwN7vvE3e77xNAAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY2\n"\ +"9tAAAAIJMm0fXS9aEgPF3rZ528wuD27ZzBgrKprvffaN5ECseMAAAABHNzaDoBAAAAQEsS\n"\ +"xLFiVzfpH2mt9xh8i/zmHV646Hud4QruNBAGNl8gkybR9dL1oSA8XetnnbzC4PbtnMGCsq\n"\ +"mu999o3kQKx4wAAAAAAAAAG2RqbUBkam0uc3lkLmNvcnAuZ29vZ2xlLmNvbQECAwQFBg==\n"\ +"-----END OPENSSH PRIVATE KEY-----\n" +#define PUB_ED25519_SK \ +"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIJMm0fXS9aEgPF3rZ528wuD27ZzBgrKprvffaN5ECseMAAAABHNzaDo=" +#define CERT_ED25519_SK \ +"sk-ssh-ed25519-cert-v01@openssh.com AAAAI3NrLXNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJiT+C/VLMWholFZ4xhOyJr0nSLZSFRIM3I07wUNTRPaAAAAIJMm0fXS9aEgPF3rZ528wuD27ZzBgrKprvffaN5ECseMAAAABHNzaDoAAAAAAAAD7AAAAAEAAAAHdWx5c3NlcwAAABcAAAAHdWx5c3NlcwAAAAhvZHlzc2V1cwAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAFMAAAALc3NoLWVkMjU1MTkAAABAX0Pu13B94pVR3qq8MJQGkOS1Cd7AAM1k6O2VSwyDPM/LfsWIQ4ywgxDmk3hjXWOY7BqljuMxo5VO4JymEIhQBA==" diff --git a/regress/misc/fuzz-harness/kex_fuzz.cc b/regress/misc/fuzz-harness/kex_fuzz.cc index 34b60dd69b58..4740a7cb04c1 100644 --- a/regress/misc/fuzz-harness/kex_fuzz.cc +++ b/regress/misc/fuzz-harness/kex_fuzz.cc @@ -20,85 +20,11 @@ extern "C" { #include "authfile.h" #include "log.h" +#include "fixed-keys.h" + // Define if you want to generate traces. /* #define STANDALONE 1 */ -#define PRIV_RSA \ -"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ -"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn\n"\ -"NhAAAAAwEAAQAAAQEA3+epf+VGKoGPaAZXrf6S0cyumQnddkGBnVFX0A5eh37RtLug0qY5\n"\ -"thxsBUbGGVr9mTd2QXwLujBwYg5l1MP/Fmg+5312Zgx9pHmS+qKULbar0hlNgptNEb+aNU\n"\ -"d3o9qg3aXqXm7+ZnjAV05ef/mxNRN2ZvuEkw7cRppTJcbBI+vF3lXuCXnX2klDI95Gl2AW\n"\ -"3WHRtanqLHZXuBkjjRBDKc7MUq/GP1hmLiAd95dvU7fZjRlIEsP84zGEI1Fb0L/kmPHcOt\n"\ -"iVfHft8CtmC9v6+94JrOiPBBNScV+dyrgAGPsdKdr/1vIpQmCNiI8s3PCiD8J7ZiBaYm0I\n"\ -"8fq5G/qnUwAAA7ggw2dXIMNnVwAAAAdzc2gtcnNhAAABAQDf56l/5UYqgY9oBlet/pLRzK\n"\ -"6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZm\n"\ -"DH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGml\n"\ -"MlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29T\n"\ -"t9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v\n"\ -"/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdTAAAAAwEAAQAAAQEArWm5B4tFasppjUHM\n"\ -"SsAuajtCxtizI1Hc10EW59cZM4vvUzE2f6+qZvdgWj3UU/L7Et23w0QVuSCnCerox379ZB\n"\ -"ddEOFFAAiQjwBx65hbd4RRUymxtIQfjq18++LcMJW1nbVQ7c69ThQbtALIggmbS+ZE/8Gx\n"\ -"jkwmIrCH0Ww8TlpsPe+mNHuyNk7UEZoXLm22lNLqq5qkIL5JgT6M2iNJpMOJy9/CKi6kO4\n"\ -"JPuVwjdG4C5pBPaMN3KJ1IvAlSlLGNaXnfXcn85gWfsCjsZmH3liey2NJamqp/w83BrKUg\n"\ -"YZvMR2qeWZaKkFTahpzN5KRK1BFeB37O0P84Dzh1biDX8QAAAIEAiWXW8ePYFwLpa2mFIh\n"\ -"VvRTdcrN70rVK5eWVaL3pyS4vGA56Jixq86dHveOnbSY+iNb1jQidtXc8SWUt2wtHqZ32h\n"\ -"Lji9/hMSKqe9SEP3xvDRDmUJqsVw0ySyrFrzm4160QY6RKU3CIQCVFslMZ9fxmrfZ/hxoU\n"\ -"0X3FVsxmC4+kwAAACBAPOc1YERpV6PjANBrGR+1o1RCdACbm5myc42QzSNIaOZmgrYs+Gt\n"\ -"7+EcoqSdbJzHJNCNQfF+A+vjbIkFiuZqq/5wwr59qXx5OAlijLB/ywwKmTWq6lp//Zxny+\n"\ -"ka3sIGNO14eQvmxNDnlLL+RIZleCTEKBXSW6CZhr+uHMZFKKMtAAAAgQDrSkm+LbILB7H9\n"\ -"jxEBZLhv53aAn4u81kFKQOJ7PzzpBGSoD12i7oIJu5siSD5EKDNVEr+SvCf0ISU3BuMpzl\n"\ -"t3YrPrHRheOFhn5e3j0e//zB8rBC0DGB4CtTDdeh7rOXUL4K0pz+8wEpNkV62SWxhC6NRW\n"\ -"I79JhtGkh+GtcnkEfwAAAAAB\n"\ -"-----END OPENSSH PRIVATE KEY-----\n" -#define PUB_RSA \ -"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf56l/5UYqgY9oBlet/pLRzK6ZCd12QYGdUVfQDl6HftG0u6DSpjm2HGwFRsYZWv2ZN3ZBfAu6MHBiDmXUw/8WaD7nfXZmDH2keZL6opQttqvSGU2Cm00Rv5o1R3ej2qDdpepebv5meMBXTl5/+bE1E3Zm+4STDtxGmlMlxsEj68XeVe4JedfaSUMj3kaXYBbdYdG1qeosdle4GSONEEMpzsxSr8Y/WGYuIB33l29Tt9mNGUgSw/zjMYQjUVvQv+SY8dw62JV8d+3wK2YL2/r73gms6I8EE1JxX53KuAAY+x0p2v/W8ilCYI2Ijyzc8KIPwntmIFpibQjx+rkb+qdT" -#define PRIV_DSA \ -"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ -"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsgAAAAdzc2gtZH\n"\ -"NzAAAAgQCsGTfjpQ465EOkfQXJM9BOvfRQE0fqlykAls+ncz+T7hrbeScRu8xpwzsznJNm\n"\ -"xlW8o6cUDiHmBJ5OHgamUC9N7YJeU/6fnOAZifgN8mqK6k8pKHuje8ANOiYgHLl0yiASQA\n"\ -"3//qMyzZ+W/hemoLSmLAbEqlfWVeyYx+wta1Vm+QAAABUAvWyehvUvdHvQxavYgS5p0t5Q\n"\ -"d7UAAACBAIRA9Yy+f4Kzqpv/qICPO3zk42UuP7WAhSW2nCbQdLlCiSTxcjKgcvXNRckwJP\n"\ -"44JjSHOtJy/AMtJrPIbLYG6KuWTdBlEHFiG6DafvLG+qPMSL2bPjXTOhuOMbCHIZ+5WBkW\n"\ -"THeG/Nv11iI01Of9V6tXkig23K370flkRkXFi9MdAAAAgCt6YUcQkNwG7B/e5M1FZsLP9O\n"\ -"kVB3BwLAOjmWdHpyhu3HpwSJa3XLEvhXN0i6IVI2KgPo/2GtYA6rHt14L+6u1pmhh8sAvQ\n"\ -"ksp3qZB+xh/NP+hBqf0sbHX0yYbzKOvI5SCc/kKK6yagcBZOsubM/KC8TxyVgmD5c6WzYs\n"\ -"h5TEpvAAAB2PHjRbbx40W2AAAAB3NzaC1kc3MAAACBAKwZN+OlDjrkQ6R9Bckz0E699FAT\n"\ -"R+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4B\n"\ -"mJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1r\n"\ -"VWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS\n"\ -"4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIb\n"\ -"oNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRc\n"\ -"WL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SL\n"\ -"ohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJ\n"\ -"z+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8AAAAUUA+OGldMi76ClO/sstpdbBUE\n"\ -"lq8AAAAAAQI=\n"\ -"-----END OPENSSH PRIVATE KEY-----\n" -#define PUB_DSA \ -"ssh-dss AAAAB3NzaC1kc3MAAACBAKwZN+OlDjrkQ6R9Bckz0E699FATR+qXKQCWz6dzP5PuGtt5JxG7zGnDOzOck2bGVbyjpxQOIeYEnk4eBqZQL03tgl5T/p+c4BmJ+A3yaorqTykoe6N7wA06JiAcuXTKIBJADf/+ozLNn5b+F6agtKYsBsSqV9ZV7JjH7C1rVWb5AAAAFQC9bJ6G9S90e9DFq9iBLmnS3lB3tQAAAIEAhED1jL5/grOqm/+ogI87fOTjZS4/tYCFJbacJtB0uUKJJPFyMqBy9c1FyTAk/jgmNIc60nL8Ay0ms8hstgboq5ZN0GUQcWIboNp+8sb6o8xIvZs+NdM6G44xsIchn7lYGRZMd4b82/XWIjTU5/1Xq1eSKDbcrfvR+WRGRcWL0x0AAACAK3phRxCQ3AbsH97kzUVmws/06RUHcHAsA6OZZ0enKG7cenBIlrdcsS+Fc3SLohUjYqA+j/Ya1gDqse3Xgv7q7WmaGHywC9CSynepkH7GH80/6EGp/SxsdfTJhvMo68jlIJz+QorrJqBwFk6y5sz8oLxPHJWCYPlzpbNiyHlMSm8=" -#define PRIV_ECDSA \ -"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ -"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS\n"\ -"1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTDJ0VlMv+0rguNzaJ1DF2KueHaxRSQ\n"\ -"6LpIxGbulrg1a8RPbnMXwag5GcDiDllD2lDUJUuBEWyjXA0rZoZX35ELAAAAoE/Bbr5PwW\n"\ -"6+AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43N\n"\ -"onUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQ\n"\ -"sAAAAhAIhE6hCID5oOm1TDktc++KFKyScjLifcZ6Cgv5xSSyLOAAAAAAECAwQFBgc=\n"\ -"-----END OPENSSH PRIVATE KEY-----\n" -#define PUB_ECDSA \ -"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMnRWUy/7SuC43NonUMXYq54drFFJDoukjEZu6WuDVrxE9ucxfBqDkZwOIOWUPaUNQlS4ERbKNcDStmhlffkQs=" -#define PRIV_ED25519 \ -"-----BEGIN OPENSSH PRIVATE KEY-----\n"\ -"b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\n"\ -"QyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAwAAAIhWlP99VpT/\n"\ -"fQAAAAtzc2gtZWQyNTUxOQAAACAz0F5hFTFS5nhUcmnyjFVoDw5L/P7kQU8JnBA2rWczAw\n"\ -"AAAEDE1rlcMC0s0X3TKVZAOVavZOywwkXw8tO5dLObxaCMEDPQXmEVMVLmeFRyafKMVWgP\n"\ -"Dkv8/uRBTwmcEDatZzMDAAAAAAECAwQF\n"\ -"-----END OPENSSH PRIVATE KEY-----\n" -#define PUB_ED25519 \ -"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDPQXmEVMVLmeFRyafKMVWgPDkv8/uRBTwmcEDatZzMD" - static int prepare_key(struct shared_state *st, int keytype, int bits); struct shared_state { From de613f2713d2dfcd3b03c00e5558a40997f52712 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 30 Jan 2021 12:03:30 +1100 Subject: [PATCH 0199/1788] ssh-agent fuzzer --- regress/misc/fuzz-harness/Makefile | 47 +++-- regress/misc/fuzz-harness/agent_fuzz.cc | 15 ++ regress/misc/fuzz-harness/agent_fuzz_helper.c | 169 ++++++++++++++++++ 3 files changed, 213 insertions(+), 18 deletions(-) create mode 100644 regress/misc/fuzz-harness/agent_fuzz.cc create mode 100644 regress/misc/fuzz-harness/agent_fuzz_helper.c diff --git a/regress/misc/fuzz-harness/Makefile b/regress/misc/fuzz-harness/Makefile index f5fda72f4b21..e879fcdae297 100644 --- a/regress/misc/fuzz-harness/Makefile +++ b/regress/misc/fuzz-harness/Makefile @@ -1,41 +1,52 @@ # NB. libssh and libopenbsd-compat should be built with the same sanitizer opts. -CXX=clang++-9 -FUZZ_FLAGS=-fsanitize=address,fuzzer +CC=clang-11 +CXX=clang++-11 +FUZZ_FLAGS=-fsanitize=address,fuzzer -fno-omit-frame-pointer FUZZ_LIBS=-lFuzzer CXXFLAGS=-O2 -g -Wall -Wextra -Wno-unused-parameter -I ../../.. $(FUZZ_FLAGS) +CFLAGS=$(CXXFLAGS) LDFLAGS=-L ../../.. -L ../../../openbsd-compat -g $(FUZZ_FLAGS) LIBS=-lssh -lopenbsd-compat -lcrypto -lfido2 -lcbor $(FUZZ_LIBS) -COMMON_OBJS=ssh-sk-null.o +SK_NULL_OBJS=ssh-sk-null.o +COMMON_DEPS=../../../libssh.a TARGETS=pubkey_fuzz sig_fuzz authopt_fuzz sshsig_fuzz \ - sshsigopt_fuzz privkey_fuzz kex_fuzz + sshsigopt_fuzz privkey_fuzz kex_fuzz agent_fuzz all: $(TARGETS) .cc.o: $(CXX) $(CXXFLAGS) -c $< -o $@ -pubkey_fuzz: pubkey_fuzz.o $(COMMON_OBJS) - $(CXX) -o $@ pubkey_fuzz.o $(COMMON_OBJS) $(LDFLAGS) $(LIBS) +pubkey_fuzz: pubkey_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS) + $(CXX) -o $@ pubkey_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(LIBS) -sig_fuzz: sig_fuzz.o $(COMMON_OBJS) - $(CXX) -o $@ sig_fuzz.o $(COMMON_OBJS) $(LDFLAGS) $(LIBS) +sig_fuzz: sig_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS) + $(CXX) -o $@ sig_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(LIBS) -authopt_fuzz: authopt_fuzz.o $(COMMON_OBJS) - $(CXX) -o $@ authopt_fuzz.o $(COMMON_OBJS) ../../../auth-options.o $(LDFLAGS) $(LIBS) +authopt_fuzz: authopt_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS) + $(CXX) -o $@ authopt_fuzz.o $(SK_NULL_OBJS) ../../../auth-options.o $(LDFLAGS) $(LIBS) -sshsig_fuzz: sshsig_fuzz.o $(COMMON_OBJS) - $(CXX) -o $@ sshsig_fuzz.o $(COMMON_OBJS) ../../../sshsig.o $(LDFLAGS) $(LIBS) +sshsig_fuzz: sshsig_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS) + $(CXX) -o $@ sshsig_fuzz.o $(SK_NULL_OBJS) ../../../sshsig.o $(LDFLAGS) $(LIBS) -sshsigopt_fuzz: sshsigopt_fuzz.o $(COMMON_OBJS) - $(CXX) -o $@ sshsigopt_fuzz.o $(COMMON_OBJS) ../../../sshsig.o $(LDFLAGS) $(LIBS) +sshsigopt_fuzz: sshsigopt_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS) + $(CXX) -o $@ sshsigopt_fuzz.o $(SK_NULL_OBJS) ../../../sshsig.o $(LDFLAGS) $(LIBS) -privkey_fuzz: privkey_fuzz.o $(COMMON_OBJS) - $(CXX) -o $@ privkey_fuzz.o $(COMMON_OBJS) $(LDFLAGS) $(LIBS) +privkey_fuzz: privkey_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS) + $(CXX) -o $@ privkey_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(LIBS) -kex_fuzz: kex_fuzz.o $(COMMON_OBJS) - $(CXX) -o $@ kex_fuzz.o $(COMMON_OBJS) $(LDFLAGS) $(LIBS) -lz +kex_fuzz: kex_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS) + $(CXX) -o $@ kex_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(LIBS) -lz + +agent_fuzz: agent_fuzz.o agent_fuzz_helper.o sk-dummy.o ../../../ssh-sk.o $(COMMON_DEPS) + $(CXX) -o $@ agent_fuzz.o agent_fuzz_helper.o sk-dummy.o ../../../ssh-sk.o $(LDFLAGS) $(LIBS) -lz + +agent_fuzz_helper.o: agent_fuzz_helper.c ../../../ssh-agent.c + +sk-dummy.o: ../sk-dummy/sk-dummy.c + $(CC) $(CFLAGS) -c -o $@ ../sk-dummy/sk-dummy.c -DSK_DUMMY_INTEGRATE=1 $(LDFLAGS) clean: -rm -f *.o $(TARGETS) diff --git a/regress/misc/fuzz-harness/agent_fuzz.cc b/regress/misc/fuzz-harness/agent_fuzz.cc new file mode 100644 index 000000000000..ad85b2f9a297 --- /dev/null +++ b/regress/misc/fuzz-harness/agent_fuzz.cc @@ -0,0 +1,15 @@ +// cc_fuzz_target test for ssh-agent. +extern "C" { + +#include +#include + +extern void test_one(const uint8_t* s, size_t slen); + +int LLVMFuzzerTestOneInput(const uint8_t* s, size_t slen) +{ + test_one(s, slen); + return 0; +} + +} // extern diff --git a/regress/misc/fuzz-harness/agent_fuzz_helper.c b/regress/misc/fuzz-harness/agent_fuzz_helper.c new file mode 100644 index 000000000000..79cdc6102c3c --- /dev/null +++ b/regress/misc/fuzz-harness/agent_fuzz_helper.c @@ -0,0 +1,169 @@ +#include "fixed-keys.h" +#include + +#define main(ac, av) xxxmain(ac, av) +#include "../../../ssh-agent.c" + +void test_one(const uint8_t* s, size_t slen); + +static int +devnull_or_die(void) +{ + int fd; + + if ((fd = open("/dev/null", O_RDWR)) == -1) { + error_f("open /dev/null: %s", strerror(errno)); + abort(); + } + return fd; +} + +static struct sshkey * +pubkey_or_die(const char *s) +{ + char *tmp, *cp; + struct sshkey *pubkey; + int r; + + tmp = cp = xstrdup(s); + if ((pubkey = sshkey_new(KEY_UNSPEC)) == NULL) + abort(); + if ((r = sshkey_read(pubkey, &cp)) != 0) { + error_fr(r, "parse"); + abort(); + } + free(tmp); + return pubkey; +} + +static struct sshkey * +privkey_or_die(const char *s) +{ + int r; + struct sshbuf *b; + struct sshkey *privkey; + + if ((b = sshbuf_from(s, strlen(s))) == NULL) { + error_f("sshbuf_from failed"); + abort(); + } + if ((r = sshkey_parse_private_fileblob(b, "", &privkey, NULL)) != 0) { + error_fr(r, "parse"); + abort(); + } + sshbuf_free(b); + return privkey; +} + +static void +add_key(const char *privkey, const char *certpath) +{ + Identity *id; + int r; + struct sshkey *cert; + + id = xcalloc(1, sizeof(Identity)); + TAILQ_INSERT_TAIL(&idtab->idlist, id, next); + idtab->nentries++; + id->key = privkey_or_die(privkey); + id->comment = xstrdup("rhododaktulos Eos"); + if (sshkey_is_sk(id->key)) + id->sk_provider = xstrdup("internal"); + + /* Now the cert too */ + id = xcalloc(1, sizeof(Identity)); + TAILQ_INSERT_TAIL(&idtab->idlist, id, next); + idtab->nentries++; + id->key = privkey_or_die(privkey); + cert = pubkey_or_die(certpath); + if ((r = sshkey_to_certified(id->key)) != 0) { + error_fr(r, "sshkey_to_certified"); + abort(); + } + if ((r = sshkey_cert_copy(cert, id->key)) != 0) { + error_fr(r, "sshkey_cert_copy"); + abort(); + } + sshkey_free(cert); + id->comment = xstrdup("outis"); + if (sshkey_is_sk(id->key)) + id->sk_provider = xstrdup("internal"); +} + +static void +cleanup_idtab(void) +{ + Identity *id; + + if (idtab == NULL) return; + for (id = TAILQ_FIRST(&idtab->idlist); id; + id = TAILQ_FIRST(&idtab->idlist)) { + TAILQ_REMOVE(&idtab->idlist, id, next); + free_identity(id); + } + free(idtab); + idtab = NULL; +} + +static void +reset_idtab(void) +{ + cleanup_idtab(); + idtab_init(); + // Load keys. + add_key(PRIV_RSA, CERT_RSA); + add_key(PRIV_DSA, CERT_DSA); + add_key(PRIV_ECDSA, CERT_ECDSA); + add_key(PRIV_ED25519, CERT_ED25519); + add_key(PRIV_ECDSA_SK, CERT_ECDSA_SK); + add_key(PRIV_ED25519_SK, CERT_ED25519_SK); +} + +static void +cleanup_sockettab(void) +{ + u_int i; + for (i = 0; i < sockets_alloc; i++) { + if (sockets[i].type != AUTH_UNUSED) + close_socket(sockets + i); + } + free(sockets); + sockets = NULL; + sockets_alloc = 0; +} + +static void +reset_sockettab(int devnull) +{ + int fd; + + cleanup_sockettab(); + if ((fd = dup(devnull)) == -1) { + error_f("dup: %s", strerror(errno)); + abort(); + } + new_socket(AUTH_CONNECTION, fd); + assert(sockets[0].type == AUTH_CONNECTION); + assert(sockets[0].fd == fd); +} + +void +test_one(const uint8_t* s, size_t slen) +{ + static int devnull = -1; + + if (devnull == -1) { + log_init(__progname, SYSLOG_LEVEL_DEBUG3, + SYSLOG_FACILITY_AUTH, 1); + devnull = devnull_or_die(); + allowed_providers = xstrdup(""); + setenv("DISPLAY", "", 1); /* ban askpass */ + } + + reset_idtab(); + reset_sockettab(devnull); + (void)sshbuf_put_string(sockets[0].input, s, slen); + process_message(0); + cleanup_idtab(); + cleanup_sockettab(); +} From 0ef24ad60204022f7e33b6e9d171172c50514132 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 30 Jan 2021 16:28:23 +1100 Subject: [PATCH 0200/1788] expect fuzz cases to have length prefix might make life a little easier for the fuzzer, e.g. it can now produce valid (multi-request) messages by smashing two cases together. --- regress/misc/fuzz-harness/agent_fuzz_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regress/misc/fuzz-harness/agent_fuzz_helper.c b/regress/misc/fuzz-harness/agent_fuzz_helper.c index 79cdc6102c3c..1ea1576379f7 100644 --- a/regress/misc/fuzz-harness/agent_fuzz_helper.c +++ b/regress/misc/fuzz-harness/agent_fuzz_helper.c @@ -162,7 +162,7 @@ test_one(const uint8_t* s, size_t slen) reset_idtab(); reset_sockettab(devnull); - (void)sshbuf_put_string(sockets[0].input, s, slen); + (void)sshbuf_put(sockets[0].input, s, slen); process_message(0); cleanup_idtab(); cleanup_sockettab(); From a5dfc5bae8c16e2a7caf564758d812c7672480b5 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 30 Jan 2021 16:32:29 +1100 Subject: [PATCH 0201/1788] allow a fuzz case to contain more than one request loop until input buffer empty, no message consumed or 256 messages processed --- regress/misc/fuzz-harness/agent_fuzz_helper.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/regress/misc/fuzz-harness/agent_fuzz_helper.c b/regress/misc/fuzz-harness/agent_fuzz_helper.c index 1ea1576379f7..1d419820cc5d 100644 --- a/regress/misc/fuzz-harness/agent_fuzz_helper.c +++ b/regress/misc/fuzz-harness/agent_fuzz_helper.c @@ -147,10 +147,12 @@ reset_sockettab(int devnull) assert(sockets[0].fd == fd); } +#define MAX_MESSAGES 256 void test_one(const uint8_t* s, size_t slen) { static int devnull = -1; + size_t i, olen, nlen; if (devnull == -1) { log_init(__progname, SYSLOG_LEVEL_DEBUG3, @@ -163,7 +165,13 @@ test_one(const uint8_t* s, size_t slen) reset_idtab(); reset_sockettab(devnull); (void)sshbuf_put(sockets[0].input, s, slen); - process_message(0); + for (i = 0; i < MAX_MESSAGES; i++) { + olen = sshbuf_len(sockets[0].input); + process_message(0); + nlen = sshbuf_len(sockets[0].input); + if (nlen == 0 || nlen == olen) + break; + } cleanup_idtab(); cleanup_sockettab(); } From 7a92a324a2e351fabd0ba8ef9b434d3b12d54ee3 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sun, 31 Jan 2021 10:50:10 +0000 Subject: [PATCH 0202/1788] upstream: Set linesize returned by getline to zero when freeing and NULLing the returned string. OpenBSD's getline handles this just fine, but some implementations used by -portable do not. ok djm@ OpenBSD-Commit-ID: 4d7bd5169d3397654247db9655cc69a9908d165c --- sshsig.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sshsig.c b/sshsig.c index 0b2203059ce0..4ce4674cd423 100644 --- a/sshsig.c +++ b/sshsig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshsig.c,v 1.19 2021/01/26 00:49:30 djm Exp $ */ +/* $OpenBSD: sshsig.c,v 1.20 2021/01/31 10:50:10 dtucker Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -853,6 +853,7 @@ sshsig_check_allowed_keys(const char *path, const struct sshkey *sign_key, principal, sig_namespace); free(line); line = NULL; + linesize = 0; if (r == SSH_ERR_KEY_NOT_FOUND) continue; else if (r == 0) { @@ -998,6 +999,7 @@ sshsig_find_principals(const char *path, const struct sshkey *sign_key, sign_key, principals); free(line); line = NULL; + linesize = 0; if (r == SSH_ERR_KEY_NOT_FOUND) continue; else if (r == 0) { From 3dd0c64e08f1bba21d71996d635c7256c8c139d1 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sun, 31 Jan 2021 22:55:29 +0000 Subject: [PATCH 0203/1788] upstream: more strictly enforce KEX state-machine by banning packet types once they are received. Fixes memleak caused by duplicate SSH2_MSG_KEX_DH_GEX_REQUEST (spotted by portable OpenSSH kex_fuzz via oss-fuzz #30078). ok markus@ OpenBSD-Commit-ID: 87331c715c095b587d5c88724694cdeb701c9def --- kex.c | 4 ++-- kex.h | 3 ++- kexgen.c | 8 +++++++- kexgexc.c | 12 ++++++++---- kexgexs.c | 7 ++++++- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/kex.c b/kex.c index b73f14d3dd0b..30425ab8ab9b 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.166 2021/01/27 23:49:46 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.167 2021/01/31 22:55:29 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -405,7 +405,7 @@ kex_prop_free(char **proposal) } /* ARGSUSED */ -static int +int kex_protocol_error(int type, u_int32_t seq, struct ssh *ssh) { int r; diff --git a/kex.h b/kex.h index 18bfa923f1c6..9605ed528ea4 100644 --- a/kex.h +++ b/kex.h @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.h,v 1.113 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: kex.h,v 1.114 2021/01/31 22:55:29 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. @@ -193,6 +193,7 @@ int kex_verify_host_key(struct ssh *, struct sshkey *); int kex_send_kexinit(struct ssh *); int kex_input_kexinit(int, u_int32_t, struct ssh *); int kex_input_ext_info(int, u_int32_t, struct ssh *); +int kex_protocol_error(int, u_int32_t, struct ssh *); int kex_derive_keys(struct ssh *, u_char *, u_int, const struct sshbuf *); int kex_send_newkeys(struct ssh *); int kex_start_rekex(struct ssh *); diff --git a/kexgen.c b/kexgen.c index 39a848f25952..35b83ccfb0f3 100644 --- a/kexgen.c +++ b/kexgen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexgen.c,v 1.5 2020/12/29 00:59:15 djm Exp $ */ +/* $OpenBSD: kexgen.c,v 1.6 2021/01/31 22:55:29 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl. All rights reserved. * @@ -148,6 +148,9 @@ input_kex_gen_reply(int type, u_int32_t seq, struct ssh *ssh) size_t slen, hashlen; int r; + debug("SSH2_MSG_KEX_ECDH_REPLY received"); + ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_REPLY, &kex_protocol_error); + /* hostkey */ if ((r = sshpkt_getb_froms(ssh, &server_host_key_blob)) != 0) goto out; @@ -254,6 +257,9 @@ input_kex_gen_init(int type, u_int32_t seq, struct ssh *ssh) size_t slen, hashlen; int r; + debug("SSH2_MSG_KEX_ECDH_INIT received"); + ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_INIT, &kex_protocol_error); + if ((r = kex_load_hostkey(ssh, &server_host_private, &server_host_public)) != 0) goto out; diff --git a/kexgexc.c b/kexgexc.c index c3702c922dc5..4a2e741d8458 100644 --- a/kexgexc.c +++ b/kexgexc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexgexc.c,v 1.36 2021/01/27 09:26:54 djm Exp $ */ +/* $OpenBSD: kexgexc.c,v 1.37 2021/01/31 22:55:29 djm Exp $ */ /* * Copyright (c) 2000 Niels Provos. All rights reserved. * Copyright (c) 2001 Markus Friedl. All rights reserved. @@ -83,6 +83,7 @@ kexgex_client(struct ssh *ssh) fprintf(stderr, "\nmin = %d, nbits = %d, max = %d\n", kex->min, kex->nbits, kex->max); #endif + debug("expecting SSH2_MSG_KEX_DH_GEX_GROUP"); ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_GROUP, &input_kex_dh_gex_group); r = 0; @@ -98,7 +99,8 @@ input_kex_dh_gex_group(int type, u_int32_t seq, struct ssh *ssh) const BIGNUM *pub_key; int r, bits; - debug("got SSH2_MSG_KEX_DH_GEX_GROUP"); + debug("SSH2_MSG_KEX_DH_GEX_GROUP received"); + ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_GROUP, &kex_protocol_error); if ((r = sshpkt_get_bignum2(ssh, &p)) != 0 || (r = sshpkt_get_bignum2(ssh, &g)) != 0 || @@ -130,7 +132,7 @@ input_kex_dh_gex_group(int type, u_int32_t seq, struct ssh *ssh) BN_print_fp(stderr, pub_key); fprintf(stderr, "\n"); #endif - ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_GROUP, NULL); + debug("expecting SSH2_MSG_KEX_DH_GEX_REPLY"); ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_REPLY, &input_kex_dh_gex_reply); r = 0; out: @@ -153,7 +155,9 @@ input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh) size_t slen, hashlen; int r; - debug("got SSH2_MSG_KEX_DH_GEX_REPLY"); + debug("SSH2_MSG_KEX_DH_GEX_REPLY received"); + ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_REPLY, &kex_protocol_error); + /* key, cert */ if ((r = sshpkt_getb_froms(ssh, &server_host_key_blob)) != 0) goto out; diff --git a/kexgexs.c b/kexgexs.c index 8ee3aaccb992..f0fbcb912543 100644 --- a/kexgexs.c +++ b/kexgexs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexgexs.c,v 1.42 2019/01/23 00:30:41 djm Exp $ */ +/* $OpenBSD: kexgexs.c,v 1.43 2021/01/31 22:55:29 djm Exp $ */ /* * Copyright (c) 2000 Niels Provos. All rights reserved. * Copyright (c) 2001 Markus Friedl. All rights reserved. @@ -77,6 +77,8 @@ input_kex_dh_gex_request(int type, u_int32_t seq, struct ssh *ssh) const BIGNUM *dh_p, *dh_g; debug("SSH2_MSG_KEX_DH_GEX_REQUEST received"); + ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_REQUEST, &kex_protocol_error); + if ((r = sshpkt_get_u32(ssh, &min)) != 0 || (r = sshpkt_get_u32(ssh, &nbits)) != 0 || (r = sshpkt_get_u32(ssh, &max)) != 0 || @@ -136,6 +138,9 @@ input_kex_dh_gex_init(int type, u_int32_t seq, struct ssh *ssh) size_t slen, hashlen; int r; + debug("SSH2_MSG_KEX_DH_GEX_INIT received"); + ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_INIT, &kex_protocol_error); + if ((r = kex_load_hostkey(ssh, &server_host_private, &server_host_public)) != 0) goto out; From 3287790e78bf5b53c4a3cafb67bb5aa03e3910f0 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 2 Feb 2021 22:35:14 +0000 Subject: [PATCH 0204/1788] upstream: memleak on error path; ok markus@ OpenBSD-Commit-ID: 2091a36d6ca3980c81891a6c4bdc544e63cb13a8 --- ssh-agent.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index ea1ebb3e32ae..9bf6b0805008 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.275 2021/01/29 06:29:46 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.276 2021/02/02 22:35:14 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -522,9 +522,9 @@ process_remove_identity(SocketEntry *e) TAILQ_REMOVE(&idtab->idlist, id, next); free_identity(id); idtab->nentries--; - sshkey_free(key); success = 1; done: + sshkey_free(key); send_status(e, success); } From f71219a01d8f71c4b3ed7e456337a84ddba1653e Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 2 Feb 2021 22:36:46 +0000 Subject: [PATCH 0205/1788] upstream: fix memleaks in private key deserialisation; enforce more consistency between redundant fields in private key certificate and private key body; ok markus@ OpenBSD-Commit-ID: dec344e414d47f0a7adc13aecf3760fe58101240 --- sshkey.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/sshkey.c b/sshkey.c index 24d8ec2034c9..b25c59a208ec 100644 --- a/sshkey.c +++ b/sshkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.c,v 1.114 2021/01/26 00:49:30 djm Exp $ */ +/* $OpenBSD: sshkey.c,v 1.115 2021/02/02 22:36:46 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * Copyright (c) 2008 Alexander von Gernler. All rights reserved. @@ -3411,10 +3411,12 @@ int sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp) { char *tname = NULL, *curve = NULL, *xmss_name = NULL; + char *expect_sk_application = NULL; struct sshkey *k = NULL; size_t pklen = 0, sklen = 0; int type, r = SSH_ERR_INTERNAL_ERROR; u_char *ed25519_pk = NULL, *ed25519_sk = NULL; + u_char *expect_ed25519_pk = NULL; u_char *xmss_pk = NULL, *xmss_sk = NULL; #ifdef WITH_OPENSSL BIGNUM *exponent = NULL; @@ -3447,6 +3449,14 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp) r = SSH_ERR_KEY_CERT_MISMATCH; goto out; } + /* + * Several fields are redundant between certificate and + * private key body, we require these to match. + */ + expect_sk_application = k->sk_application; + expect_ed25519_pk = k->ed25519_pk; + k->sk_application = NULL; + k->ed25519_pk = NULL; } else { if ((k = sshkey_new(type)) == NULL) { r = SSH_ERR_ALLOC_FAIL; @@ -3668,6 +3678,13 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp) break; } #endif /* WITH_OPENSSL */ + if ((expect_sk_application != NULL && (k->sk_application == NULL || + strcmp(expect_sk_application, k->sk_application) != 0)) || + (expect_ed25519_pk != NULL && (k->ed25519_pk == NULL || + memcmp(expect_ed25519_pk, k->ed25519_pk, ED25519_PK_SZ) != 0))) { + r = SSH_ERR_KEY_CERT_MISMATCH; + goto out; + } /* success */ r = 0; if (kp != NULL) { @@ -3697,6 +3714,8 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp) free(xmss_name); freezero(xmss_pk, pklen); freezero(xmss_sk, sklen); + free(expect_sk_application); + free(expect_ed25519_pk); return r; } From 69338ab46afe9e3dfb7762ad65351d854077c998 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 2 Feb 2021 22:36:59 +0000 Subject: [PATCH 0206/1788] upstream: whitespace OpenBSD-Commit-ID: 544bb092e03fcbecb420196cd0f70af13ea868ad --- ssh.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ssh.c b/ssh.c index 5b340fa1649c..21f3fca7a6e7 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.549 2021/01/27 09:26:54 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.550 2021/02/02 22:36:59 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -648,7 +648,6 @@ main(int ac, char **av) u_int j; struct ssh_conn_info *cinfo = NULL; - /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ sanitise_stdfd(); From a35d3e911e193a652bd09eed40907e3e165b0a7b Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 5 Feb 2021 02:20:23 +0000 Subject: [PATCH 0207/1788] upstream: Remove debug message from sigchld handler. While this works on OpenBSD it can cause problems on other platforms. From kircherlike at outlook.com via bz#3259, ok djm@ OpenBSD-Commit-ID: 3e241d7ac1ee77e3de3651780b5dc47b283a7668 --- sshd.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sshd.c b/sshd.c index 41afed7c93c0..6277e6d6db89 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.569 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: sshd.c,v 1.570 2021/02/05 02:20:23 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -340,8 +340,6 @@ main_sigchld_handler(int sig) pid_t pid; int status; - debug("main_sigchld_handler: %s", strsignal(sig)); - while ((pid = waitpid(-1, &status, WNOHANG)) > 0 || (pid == -1 && errno == EINTR)) ; From 2e0beff67def2120f4b051b1016d7fbf84823e78 Mon Sep 17 00:00:00 2001 From: Luca Weiss Date: Sun, 8 Nov 2020 14:19:23 +0100 Subject: [PATCH 0208/1788] Deny (non-fatal) statx in preauth privsep child. --- sandbox-seccomp-filter.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c index 5065ae7efc53..d942b5e167af 100644 --- a/sandbox-seccomp-filter.c +++ b/sandbox-seccomp-filter.c @@ -181,6 +181,9 @@ static const struct sock_filter preauth_insns[] = { #ifdef __NR_ipc SC_DENY(__NR_ipc, EACCES), #endif +#ifdef __NR_statx + SC_DENY(__NR_statx, EACCES), +#endif /* Syscalls to permit */ #ifdef __NR_brk From 1cb6ce98d658e5fbdae025a3bd65793980e3b5d9 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sat, 21 Nov 2020 12:22:23 +0000 Subject: [PATCH 0209/1788] Using explicit_memset for the explicit_bzero compatibility layer. Favoriting the native implementation in this case. --- configure.ac | 1 + openbsd-compat/explicit_bzero.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 0cd1025f6fac..63c239e094a1 100644 --- a/configure.ac +++ b/configure.ac @@ -1805,6 +1805,7 @@ AC_CHECK_FUNCS([ \ err \ errx \ explicit_bzero \ + explicit_memset \ fchmod \ fchmodat \ fchown \ diff --git a/openbsd-compat/explicit_bzero.c b/openbsd-compat/explicit_bzero.c index 6ef9825a9ad3..68cd2c10b3c8 100644 --- a/openbsd-compat/explicit_bzero.c +++ b/openbsd-compat/explicit_bzero.c @@ -15,7 +15,15 @@ #ifndef HAVE_EXPLICIT_BZERO -#ifdef HAVE_MEMSET_S +#ifdef HAVE_EXPLICIT_MEMSET + +void +explicit_bzero(void *p, size_t n) +{ + (void)explicit_memset(p, 0, n); +} + +#elif defined(HAVE_MEMSET_S) void explicit_bzero(void *p, size_t n) From b446c214279de50ed8388e54897eb1be5281c894 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 5 Feb 2021 06:01:58 +0000 Subject: [PATCH 0210/1788] upstream: hostname is not specified by POSIX but uname -n is, so use the latter for portability. Patch from Geert Hendrickx via github PR#208. OpenBSD-Regress-ID: d6a79c7c4d141a0d05ade4a042eb57dddbce89f3 --- regress/percent.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/regress/percent.sh b/regress/percent.sh index 28781117e576..e39f069616e0 100644 --- a/regress/percent.sh +++ b/regress/percent.sh @@ -1,4 +1,4 @@ -# $OpenBSD: percent.sh,v 1.9 2020/07/17 07:10:24 dtucker Exp $ +# $OpenBSD: percent.sh,v 1.10 2021/02/05 06:01:58 dtucker Exp $ # Placed in the Public Domain. tid="percent expansions" @@ -10,8 +10,8 @@ fi USER=`id -u -n` USERID=`id -u` -HOST=`hostname | cut -f1 -d.` -HOSTNAME=`hostname` +HOST=`uname -n | cut -f1 -d.` +HOSTNAME=`uname -n` # Localcommand is evaluated after connection because %T is not available # until then. Because of this we use a different method of exercising it, From 5e385a71ef2317856f37c91a98658eb12eb5a89c Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 5 Feb 2021 22:03:40 +0000 Subject: [PATCH 0211/1788] upstream: Roll back the hostname->uname change in rev 1.10. It turns out uname -n doesn't do what we need for some platforms in portable, so we'll fix the original problem (that some other platforms don't have hostname at all) by providing wrapper function to implement it. OpenBSD-Regress-ID: 827a707d6201d5a8e196a8c28aec1d2c76c52341 --- regress/percent.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/regress/percent.sh b/regress/percent.sh index e39f069616e0..72f07f4b8adb 100644 --- a/regress/percent.sh +++ b/regress/percent.sh @@ -1,4 +1,4 @@ -# $OpenBSD: percent.sh,v 1.10 2021/02/05 06:01:58 dtucker Exp $ +# $OpenBSD: percent.sh,v 1.11 2021/02/05 22:03:40 dtucker Exp $ # Placed in the Public Domain. tid="percent expansions" @@ -10,8 +10,8 @@ fi USER=`id -u -n` USERID=`id -u` -HOST=`uname -n | cut -f1 -d.` -HOSTNAME=`uname -n` +HOST=`hostname | cut -f1 -d.` +HOSTNAME=`hostname` # Localcommand is evaluated after connection because %T is not available # until then. Because of this we use a different method of exercising it, From f88a7a431212a16e572ecabd559e632f369c363e Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 6 Feb 2021 09:37:01 +1100 Subject: [PATCH 0212/1788] Add a hostname function for systems that don't have it. Some systems don't have a hostname command (it's not required by POSIX). The do have uname -n (which is), but as found by tim@ some others (eg UnixWare) do not report the FQDN from uname -n. --- regress/test-exec.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/regress/test-exec.sh b/regress/test-exec.sh index ee47f572c464..db5d2f9c90c6 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -323,6 +323,15 @@ md5 () { wc -c fi } + +# Some platforms don't have hostname at all, but on others uname -n doesn't +# provide the fully qualified name we need, so in the former case we create +# our own hostname function. +if ! have_prog hostname; then + hostname() { + uname -n + } +fi # End of portable specific functions stop_sshd () From 1bb130ed34721d46452529d094d9bbf045607d79 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 11 Feb 2021 10:18:05 +1100 Subject: [PATCH 0213/1788] Add __NR_futex_time64 to seccomp sandbox. This is apparently needed for (some) 32 bit platforms with glibc 2.33. Patch from nix at esperi.org.uk and jjelen at redhat.com via bz#3260. --- sandbox-seccomp-filter.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c index d942b5e167af..d8dc7120bdd4 100644 --- a/sandbox-seccomp-filter.c +++ b/sandbox-seccomp-filter.c @@ -207,6 +207,9 @@ static const struct sock_filter preauth_insns[] = { #ifdef __NR_futex SC_ALLOW(__NR_futex), #endif +#ifdef __NR_futex_time64 + SC_ALLOW(__NR_futex_time64), +#endif #ifdef __NR_geteuid SC_ALLOW(__NR_geteuid), #endif From e04fd6dde16de1cdc5a4d9946397ff60d96568db Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 12 Feb 2021 03:14:18 +0000 Subject: [PATCH 0214/1788] upstream: factor SSH_AGENT_CONSTRAIN_EXTENSION parsing into its own function and remove an unused variable; ok dtucker@ OpenBSD-Commit-ID: e1a938657fbf7ef0ba5e73b30365734a0cc96559 --- ssh-agent.c | 100 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 41 deletions(-) diff --git a/ssh-agent.c b/ssh-agent.c index 9bf6b0805008..58fe6ddf7526 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.276 2021/02/02 22:35:14 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.277 2021/02/12 03:14:18 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -574,6 +574,44 @@ reaper(void) return (deadline - now); } +static int +parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp) +{ + char *ext_name = NULL; + int r; + + if ((r = sshbuf_get_cstring(m, &ext_name, NULL)) != 0) { + error_fr(r, "parse constraint extension"); + goto out; + } + debug_f("constraint ext %s", ext_name); + if (strcmp(ext_name, "sk-provider@openssh.com") == 0) { + if (sk_providerp == NULL) { + error_f("%s not valid here", ext_name); + r = SSH_ERR_INVALID_FORMAT; + goto out; + } + if (*sk_providerp != NULL) { + error_f("%s already set", ext_name); + r = SSH_ERR_INVALID_FORMAT; + goto out; + } + if ((r = sshbuf_get_cstring(m, sk_providerp, NULL)) != 0) { + error_fr(r, "parse %s", ext_name); + goto out; + } + } else { + error_f("unsupported constraint \"%s\"", ext_name); + r = SSH_ERR_FEATURE_UNSUPPORTED; + goto out; + } + /* success */ + r = 0; + out: + free(ext_name); + return r; +} + static int parse_key_constraints(struct sshbuf *m, struct sshkey *k, time_t *deathp, u_int *secondsp, int *confirmp, char **sk_providerp) @@ -581,23 +619,22 @@ parse_key_constraints(struct sshbuf *m, struct sshkey *k, time_t *deathp, u_char ctype; int r; u_int seconds, maxsign = 0; - char *ext_name = NULL; - struct sshbuf *b = NULL; while (sshbuf_len(m)) { if ((r = sshbuf_get_u8(m, &ctype)) != 0) { error_fr(r, "parse constraint type"); - goto err; + goto out; } switch (ctype) { case SSH_AGENT_CONSTRAIN_LIFETIME: if (*deathp != 0) { error_f("lifetime already set"); - goto err; + r = SSH_ERR_INVALID_FORMAT; + goto out; } if ((r = sshbuf_get_u32(m, &seconds)) != 0) { error_fr(r, "parse lifetime constraint"); - goto err; + goto out; } *deathp = monotime() + seconds; *secondsp = seconds; @@ -605,65 +642,46 @@ parse_key_constraints(struct sshbuf *m, struct sshkey *k, time_t *deathp, case SSH_AGENT_CONSTRAIN_CONFIRM: if (*confirmp != 0) { error_f("confirm already set"); - goto err; + r = SSH_ERR_INVALID_FORMAT; + goto out; } *confirmp = 1; break; case SSH_AGENT_CONSTRAIN_MAXSIGN: if (k == NULL) { error_f("maxsign not valid here"); - goto err; + r = SSH_ERR_INVALID_FORMAT; + goto out; } if (maxsign != 0) { error_f("maxsign already set"); - goto err; + r = SSH_ERR_INVALID_FORMAT; + goto out; } if ((r = sshbuf_get_u32(m, &maxsign)) != 0) { error_fr(r, "parse maxsign constraint"); - goto err; + goto out; } if ((r = sshkey_enable_maxsign(k, maxsign)) != 0) { error_fr(r, "enable maxsign"); - goto err; + goto out; } break; case SSH_AGENT_CONSTRAIN_EXTENSION: - if ((r = sshbuf_get_cstring(m, &ext_name, NULL)) != 0) { - error_fr(r, "parse constraint extension"); - goto err; - } - debug_f("constraint ext %s", ext_name); - if (strcmp(ext_name, "sk-provider@openssh.com") == 0) { - if (sk_providerp == NULL) { - error_f("%s not valid here", ext_name); - goto err; - } - if (*sk_providerp != NULL) { - error_f("%s already set", ext_name); - goto err; - } - if ((r = sshbuf_get_cstring(m, - sk_providerp, NULL)) != 0) { - error_fr(r, "parse %s", ext_name); - goto err; - } - } else { - error_f("unsupported constraint \"%s\"", - ext_name); - goto err; - } - free(ext_name); + if ((r = parse_key_constraint_extension(m, + sk_providerp)) != 0) + goto out; /* error already logged */ break; default: error_f("Unknown constraint %d", ctype); - err: - free(ext_name); - sshbuf_free(b); - return -1; + r = SSH_ERR_FEATURE_UNSUPPORTED; + goto out; } } /* success */ - return 0; + r = 0; + out: + return r; } static void From 16eacdb016ccf38dd9959c78edd3a6282513aa53 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 12 Feb 2021 03:49:09 +0000 Subject: [PATCH 0215/1788] upstream: sftp: add missing lsetstat@openssh.com documentation patch from Mike Frysinger OpenBSD-Commit-ID: 9c114db88d505864075bfe7888b7c8745549715b --- PROTOCOL | 18 +++++++++++++++++- sftp-server.c | 3 ++- sftp.1 | 31 ++++++++++++++++++++----------- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/PROTOCOL b/PROTOCOL index ecdacb9dc75e..5c5e042e592c 100644 --- a/PROTOCOL +++ b/PROTOCOL @@ -465,6 +465,22 @@ respond with a SSH_FXP_STATUS message. This extension is advertised in the SSH_FXP_VERSION hello with version "1". +3.7. sftp: Extension request "lsetstat@openssh.com" + +This request is like the "setstat" command, but sets file attributes on +symlinks. It is implemented as a SSH_FXP_EXTENDED request with the +following format: + + uint32 id + string "lsetstat@openssh.com" + string path + ATTRS attrs + +See the "setstat" command for more details. + +This extension is advertised in the SSH_FXP_VERSION hello with version +"1". + 4. Miscellaneous changes 4.1 Public key format @@ -496,4 +512,4 @@ OpenSSH's connection multiplexing uses messages as described in PROTOCOL.mux over a Unix domain socket for communications between a master instance and later clients. -$OpenBSD: PROTOCOL,v 1.38 2020/07/05 23:59:45 djm Exp $ +$OpenBSD: PROTOCOL,v 1.39 2021/02/12 03:49:09 djm Exp $ diff --git a/sftp-server.c b/sftp-server.c index f00f39e64f68..c80f0d3f0be9 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-server.c,v 1.120 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: sftp-server.c,v 1.121 2021/02/12 03:49:09 djm Exp $ */ /* * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * @@ -671,6 +671,7 @@ process_init(void) /* fsync extension */ (r = sshbuf_put_cstring(msg, "fsync@openssh.com")) != 0 || (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ + /* lsetstat extension */ (r = sshbuf_put_cstring(msg, "lsetstat@openssh.com")) != 0 || (r = sshbuf_put_cstring(msg, "1")) != 0) /* version */ fatal_fr(r, "compose"); diff --git a/sftp.1 b/sftp.1 index 052d4d8e4ed2..a1a6373029a4 100644 --- a/sftp.1 +++ b/sftp.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: sftp.1,v 1.136 2021/01/26 15:40:17 naddy Exp $ +.\" $OpenBSD: sftp.1,v 1.137 2021/02/12 03:49:09 djm Exp $ .\" .\" Copyright (c) 2001 Damien Miller. All rights reserved. .\" @@ -22,7 +22,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: January 26 2021 $ +.Dd $Mdocdate: February 12 2021 $ .Dt SFTP 1 .Os .Sh NAME @@ -349,15 +349,18 @@ Change group of file .Ar path to .Ar grp . -If the -.Fl h -flag is specified, then symlinks will not be followed. .Ar path may contain .Xr glob 7 characters and may match multiple files. .Ar grp must be a numeric GID. +.Pp +If the +.Fl h +flag is specified, then symlinks will not be followed. +Note that this is only supported by servers that implement +the "lsetstat@openssh.com" extension. .It Xo Ic chmod .Op Fl h .Ar mode @@ -367,13 +370,16 @@ Change permissions of file .Ar path to .Ar mode . -If the -.Fl h -flag is specified, then symlinks will not be followed. .Ar path may contain .Xr glob 7 characters and may match multiple files. +.Pp +If the +.Fl h +flag is specified, then symlinks will not be followed. +Note that this is only supported by servers that implement +the "lsetstat@openssh.com" extension. .It Xo Ic chown .Op Fl h .Ar own @@ -383,15 +389,18 @@ Change owner of file .Ar path to .Ar own . -If the -.Fl h -flag is specified, then symlinks will not be followed. .Ar path may contain .Xr glob 7 characters and may match multiple files. .Ar own must be a numeric UID. +.Pp +If the +.Fl h +flag is specified, then symlinks will not be followed. +Note that this is only supported by servers that implement +the "lsetstat@openssh.com" extension. .It Xo Ic df .Op Fl hi .Op Ar path From ad74fc127cc45567e170e8c6dfa2cfd9767324ec Mon Sep 17 00:00:00 2001 From: "dlg@openbsd.org" Date: Mon, 15 Feb 2021 11:09:22 +0000 Subject: [PATCH 0216/1788] upstream: ProxyJump takes "none" to disable processing like ProxyCommand does ok djm@ jmc@ OpenBSD-Commit-ID: 941a2399da2193356bdc30b879d6e1692f18b6d3 --- ssh_config.5 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index 1a36427d02ef..fb3a3a41afa4 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.345 2021/01/26 15:40:17 naddy Exp $ -.Dd $Mdocdate: January 26 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.346 2021/02/15 11:09:22 dlg Exp $ +.Dd $Mdocdate: February 15 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1370,6 +1370,9 @@ connection to the specified .Cm ProxyJump host and then establishing a TCP forwarding to the ultimate target from there. +Setting the host to +.Cm none +disables this option entirely. .Pp Note that this option will compete with the .Cm ProxyCommand From b696858a7f9db72a83d02cb6edaca4b30a91b386 Mon Sep 17 00:00:00 2001 From: "markus@openbsd.org" Date: Mon, 15 Feb 2021 20:36:35 +0000 Subject: [PATCH 0217/1788] upstream: factor out opt_array_append; ok djm@ OpenBSD-Commit-ID: 571bc5dd35f99c5cf9de6aaeac428b168218e74a --- misc.c | 28 ++++++++++++++++++++++++++- misc.h | 10 +++++++++- servconf.c | 56 +++++++++++++++--------------------------------------- 3 files changed, 51 insertions(+), 43 deletions(-) diff --git a/misc.c b/misc.c index 3835056adfb5..f333e1abd4c5 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.160 2021/01/15 02:58:11 dtucker Exp $ */ +/* $OpenBSD: misc.c,v 1.161 2021/02/15 20:36:35 markus Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -2439,6 +2439,32 @@ opt_match(const char **opts, const char *term) return 0; } +void +opt_array_append2(const char *file, const int line, const char *directive, + char ***array, int **iarray, u_int *lp, const char *s, int i) +{ + + if (*lp >= INT_MAX) + fatal("%s line %d: Too many %s entries", file, line, directive); + + if (iarray != NULL) { + *iarray = xrecallocarray(*iarray, *lp, *lp + 1, + sizeof(**iarray)); + (*iarray)[*lp] = i; + } + + *array = xrecallocarray(*array, *lp, *lp + 1, sizeof(**array)); + (*array)[*lp] = xstrdup(s); + (*lp)++; +} + +void +opt_array_append(const char *file, const int line, const char *directive, + char ***array, u_int *lp, const char *s) +{ + opt_array_append2(file, line, directive, array, NULL, lp, s, 0); +} + sshsig_t ssh_signal(int signum, sshsig_t handler) { diff --git a/misc.h b/misc.h index 558ba5a3e072..2de7eb5bfae2 100644 --- a/misc.h +++ b/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.92 2021/01/11 02:12:57 dtucker Exp $ */ +/* $OpenBSD: misc.h,v 1.93 2021/02/15 20:36:35 markus Exp $ */ /* * Author: Tatu Ylonen @@ -190,6 +190,13 @@ int opt_flag(const char *opt, int allow_negate, const char **optsp); char *opt_dequote(const char **sp, const char **errstrp); int opt_match(const char **opts, const char *term); +/* readconf/servconf option lists */ +void opt_array_append(const char *file, const int line, + const char *directive, char ***array, u_int *lp, const char *s); +void opt_array_append2(const char *file, const int line, + const char *directive, char ***array, int **iarray, u_int *lp, + const char *s, int i); + /* readpass.c */ #define RP_ECHO 0x0001 @@ -212,4 +219,5 @@ void notify_complete(struct notifier_ctx *, const char *, ...) typedef void (*sshsig_t)(int); sshsig_t ssh_signal(int, sshsig_t); + #endif /* _MISC_H */ diff --git a/servconf.c b/servconf.c index 7f336a123a30..b782ccbbad8a 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.375 2021/01/26 05:32:21 dtucker Exp $ */ +/* $OpenBSD: servconf.c,v 1.376 2021/02/15 20:36:35 markus Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -248,39 +248,13 @@ assemble_algorithms(ServerOptions *o) free(def_sig); } -static void -array_append2(const char *file, const int line, const char *directive, - char ***array, int **iarray, u_int *lp, const char *s, int i) -{ - - if (*lp >= INT_MAX) - fatal("%s line %d: Too many %s entries", file, line, directive); - - if (iarray != NULL) { - *iarray = xrecallocarray(*iarray, *lp, *lp + 1, - sizeof(**iarray)); - (*iarray)[*lp] = i; - } - - *array = xrecallocarray(*array, *lp, *lp + 1, sizeof(**array)); - (*array)[*lp] = xstrdup(s); - (*lp)++; -} - -static void -array_append(const char *file, const int line, const char *directive, - char ***array, u_int *lp, const char *s) -{ - array_append2(file, line, directive, array, NULL, lp, s, 0); -} - void servconf_add_hostkey(const char *file, const int line, ServerOptions *options, const char *path, int userprovided) { char *apath = derelativise_path(path); - array_append2(file, line, "HostKey", + opt_array_append2(file, line, "HostKey", &options->host_key_files, &options->host_key_file_userprovided, &options->num_host_key_files, apath, userprovided); free(apath); @@ -292,7 +266,7 @@ servconf_add_hostcert(const char *file, const int line, { char *apath = derelativise_path(path); - array_append(file, line, "HostCertificate", + opt_array_append(file, line, "HostCertificate", &options->host_cert_files, &options->num_host_cert_files, apath); free(apath); } @@ -439,11 +413,11 @@ fill_default_server_options(ServerOptions *options) if (options->client_alive_count_max == -1) options->client_alive_count_max = 3; if (options->num_authkeys_files == 0) { - array_append("[default]", 0, "AuthorizedKeysFiles", + opt_array_append("[default]", 0, "AuthorizedKeysFiles", &options->authorized_keys_files, &options->num_authkeys_files, _PATH_SSH_USER_PERMITTED_KEYS); - array_append("[default]", 0, "AuthorizedKeysFiles", + opt_array_append("[default]", 0, "AuthorizedKeysFiles", &options->authorized_keys_files, &options->num_authkeys_files, _PATH_SSH_USER_PERMITTED_KEYS2); @@ -1737,7 +1711,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, while ((arg = strdelim(&cp)) && *arg != '\0') { if (!*activep) continue; - array_append(filename, linenum, "oLogVerbose", + opt_array_append(filename, linenum, "oLogVerbose", &options->log_verbose, &options->num_log_verbose, arg); } @@ -1768,7 +1742,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, "\"%.100s\"", filename, linenum, arg); if (!*activep) continue; - array_append(filename, linenum, "AllowUsers", + opt_array_append(filename, linenum, "AllowUsers", &options->allow_users, &options->num_allow_users, arg); } @@ -1781,7 +1755,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, "\"%.100s\"", filename, linenum, arg); if (!*activep) continue; - array_append(filename, linenum, "DenyUsers", + opt_array_append(filename, linenum, "DenyUsers", &options->deny_users, &options->num_deny_users, arg); } @@ -1791,7 +1765,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, while ((arg = strdelim(&cp)) && *arg != '\0') { if (!*activep) continue; - array_append(filename, linenum, "AllowGroups", + opt_array_append(filename, linenum, "AllowGroups", &options->allow_groups, &options->num_allow_groups, arg); } @@ -1801,7 +1775,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, while ((arg = strdelim(&cp)) && *arg != '\0') { if (!*activep) continue; - array_append(filename, linenum, "DenyGroups", + opt_array_append(filename, linenum, "DenyGroups", &options->deny_groups, &options->num_deny_groups, arg); } @@ -1965,7 +1939,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, if (*activep && options->num_authkeys_files == 0) { while ((arg = strdelim(&cp)) && *arg != '\0') { arg = tilde_expand_filename(arg, getuid()); - array_append(filename, linenum, + opt_array_append(filename, linenum, "AuthorizedKeysFile", &options->authorized_keys_files, &options->num_authkeys_files, arg); @@ -2003,7 +1977,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, filename, linenum); if (!*activep) continue; - array_append(filename, linenum, "AcceptEnv", + opt_array_append(filename, linenum, "AcceptEnv", &options->accept_env, &options->num_accept_env, arg); } @@ -2017,7 +1991,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, filename, linenum); if (!*activep || uvalue != 0) continue; - array_append(filename, linenum, "SetEnv", + opt_array_append(filename, linenum, "SetEnv", &options->setenv, &options->num_setenv, arg); } break; @@ -2196,7 +2170,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, lookup_opcode_name(opcode)); } if (*activep && uvalue == 0) { - array_append(filename, linenum, + opt_array_append(filename, linenum, lookup_opcode_name(opcode), chararrayptr, uintptr, arg2); } @@ -2358,7 +2332,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, value2 = 1; if (!*activep) continue; - array_append(filename, linenum, + opt_array_append(filename, linenum, "AuthenticationMethods", &options->auth_methods, &options->num_auth_methods, arg); From da0a9afcc446a30ca49dd216612c41ac3cb1f2d4 Mon Sep 17 00:00:00 2001 From: "markus@openbsd.org" Date: Mon, 15 Feb 2021 20:43:15 +0000 Subject: [PATCH 0218/1788] upstream: ssh: add PermitRemoteOpen for remote dynamic forwarding with SOCKS ok djm@, dtucker@ OpenBSD-Commit-ID: 64fe7b6360acc4ea56aa61b66498b5ecc0a96a7c --- channels.c | 21 +++++++++++++++++- readconf.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++--- readconf.h | 6 ++++- ssh.1 | 5 +++-- ssh.c | 43 ++++++++++++++++++++++++++++++++++- ssh_config.5 | 41 +++++++++++++++++++++++++++++++++- 6 files changed, 170 insertions(+), 9 deletions(-) diff --git a/channels.c b/channels.c index 4fccd0b376b8..b60d56c48bb8 100644 --- a/channels.c +++ b/channels.c @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.c,v 1.404 2021/01/27 09:26:53 djm Exp $ */ +/* $OpenBSD: channels.c,v 1.405 2021/02/15 20:43:15 markus Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -4478,9 +4478,28 @@ rdynamic_connect_prepare(struct ssh *ssh, char *ctype, char *rname) static int rdynamic_connect_finish(struct ssh *ssh, Channel *c) { + struct ssh_channels *sc = ssh->chanctxt; + struct permission_set *pset = &sc->local_perms; + struct permission *perm; struct channel_connect cctx; + u_int i, permit_adm = 1; int sock; + if (pset->num_permitted_admin > 0) { + permit_adm = 0; + for (i = 0; i < pset->num_permitted_admin; i++) { + perm = &pset->permitted_admin[i]; + if (open_match(perm, c->path, c->host_port)) { + permit_adm = 1; + break; + } + } + } + if (!permit_adm) { + debug_f("requested forward not permitted"); + return -1; + } + memset(&cctx, 0, sizeof(cctx)); sock = connect_to_helper(ssh, c->path, c->host_port, SOCK_STREAM, NULL, NULL, &cctx, NULL, NULL); diff --git a/readconf.c b/readconf.c index c9cd7f7056dd..b0a850977140 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.350 2021/01/26 05:32:21 dtucker Exp $ */ +/* $OpenBSD: readconf.c,v 1.351 2021/02/15 20:43:15 markus Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -147,6 +147,7 @@ typedef enum { oPasswordAuthentication, oChallengeResponseAuthentication, oXAuthLocation, oIdentityFile, oHostname, oPort, oRemoteForward, oLocalForward, + oPermitRemoteOpen, oCertificateFile, oAddKeysToAgent, oIdentityAgent, oUser, oEscapeChar, oProxyCommand, oGlobalKnownHostsFile, oUserKnownHostsFile, oConnectionAttempts, @@ -247,6 +248,7 @@ static struct { { "macs", oMacs }, { "remoteforward", oRemoteForward }, { "localforward", oLocalForward }, + { "permitremoteopen", oPermitRemoteOpen }, { "user", oUser }, { "host", oHost }, { "match", oMatch }, @@ -318,6 +320,7 @@ static struct { { NULL, oBadOption } }; +static const char *lookup_opcode_name(OpCodes code); const char * kex_default_pk_alg(void) @@ -912,9 +915,9 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, const char *original_host, char *line, const char *filename, int linenum, int *activep, int flags, int *want_final_pass, int depth) { - char *s, **charptr, *endofnumber, *keyword, *arg, *arg2; + char *s, **charptr, *endofnumber, *keyword, *arg, *arg2, *p, ch; char **cpptr, ***cppptr, fwdarg[256]; - u_int i, *uintptr, max_entries = 0; + u_int i, *uintptr, uvalue, max_entries = 0; int r, oactive, negated, opcode, *intptr, value, value2, cmdline = 0; int remotefwd, dynamicfwd; LogLevel *log_level_ptr; @@ -1482,6 +1485,51 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, } break; + case oPermitRemoteOpen: + uintptr = &options->num_permitted_remote_opens; + cppptr = &options->permitted_remote_opens; + arg = strdelim(&s); + if (!arg || *arg == '\0') + fatal("%s line %d: missing %s specification", + filename, linenum, lookup_opcode_name(opcode)); + uvalue = *uintptr; /* modified later */ + if (strcmp(arg, "any") == 0 || strcmp(arg, "none") == 0) { + if (*activep && uvalue == 0) { + *uintptr = 1; + *cppptr = xcalloc(1, sizeof(**cppptr)); + (*cppptr)[0] = xstrdup(arg); + } + break; + } + for (; arg != NULL && *arg != '\0'; arg = strdelim(&s)) { + arg2 = xstrdup(arg); + ch = '\0'; + p = hpdelim2(&arg, &ch); + if (p == NULL || ch == '/') { + fatal("%s line %d: missing host in %s", + filename, linenum, + lookup_opcode_name(opcode)); + } + p = cleanhostname(p); + /* + * don't want to use permitopen_port to avoid + * dependency on channels.[ch] here. + */ + if (arg == NULL || + (strcmp(arg, "*") != 0 && a2port(arg) <= 0)) { + fatal("%s line %d: bad port number in %s", + filename, linenum, + lookup_opcode_name(opcode)); + } + if (*activep && uvalue == 0) { + opt_array_append(filename, linenum, + lookup_opcode_name(opcode), + cppptr, uintptr, arg2); + } + free(arg2); + } + break; + case oClearAllForwardings: intptr = &options->clear_forwardings; goto parse_flag; @@ -2173,6 +2221,8 @@ initialize_options(Options * options) options->num_local_forwards = 0; options->remote_forwards = NULL; options->num_remote_forwards = 0; + options->permitted_remote_opens = NULL; + options->num_permitted_remote_opens = 0; options->log_facility = SYSLOG_FACILITY_NOT_SET; options->log_level = SYSLOG_LEVEL_NOT_SET; options->num_log_verbose = 0; @@ -3126,6 +3176,13 @@ dump_client_config(Options *o, const char *host) /* Special cases */ + /* PermitRemoteOpen */ + if (o->num_permitted_remote_opens == 0) + printf("%s any\n", lookup_opcode_name(oPermitRemoteOpen)); + else + dump_cfg_strarray_oneline(oPermitRemoteOpen, + o->num_permitted_remote_opens, o->permitted_remote_opens); + /* AddKeysToAgent */ if (o->add_keys_to_agent_lifespan <= 0) dump_cfg_fmtint(oAddKeysToAgent, o->add_keys_to_agent); diff --git a/readconf.h b/readconf.h index 6e7e95e7fbf1..2fba866eb53a 100644 --- a/readconf.h +++ b/readconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.h,v 1.139 2021/01/26 05:32:21 dtucker Exp $ */ +/* $OpenBSD: readconf.h,v 1.140 2021/02/15 20:43:15 markus Exp $ */ /* * Author: Tatu Ylonen @@ -110,6 +110,10 @@ typedef struct { struct Forward *remote_forwards; int clear_forwardings; + /* Restrict remote dynamic forwarding */ + char **permitted_remote_opens; + u_int num_permitted_remote_opens; + /* stdio forwarding (-W) host and port */ char *stdio_forward_host; int stdio_forward_port; diff --git a/ssh.1 b/ssh.1 index 5884b471ffc7..0a01767ed9a2 100644 --- a/ssh.1 +++ b/ssh.1 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh.1,v 1.418 2021/01/26 15:40:17 naddy Exp $ -.Dd $Mdocdate: January 26 2021 $ +.\" $OpenBSD: ssh.1,v 1.419 2021/02/15 20:43:15 markus Exp $ +.Dd $Mdocdate: February 15 2021 $ .Dt SSH 1 .Os .Sh NAME @@ -531,6 +531,7 @@ For full details of the options listed below, and their possible values, see .It NumberOfPasswordPrompts .It PasswordAuthentication .It PermitLocalCommand +.It PermitRemoteOpen .It PKCS11Provider .It Port .It PreferredAuthentications diff --git a/ssh.c b/ssh.c index 21f3fca7a6e7..220d2080e7f5 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.550 2021/02/02 22:36:59 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.551 2021/02/15 20:43:15 markus Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1874,12 +1874,53 @@ ssh_init_stdio_forwarding(struct ssh *ssh) channel_register_open_confirm(ssh, c->self, ssh_stdio_confirm, NULL); } +static void +ssh_init_forward_permissions(struct ssh *ssh, const char *what, char **opens, + u_int num_opens) +{ + u_int i; + int port; + char *addr, *arg, *oarg, ch; + int where = FORWARD_LOCAL; + + channel_clear_permission(ssh, FORWARD_ADM, where); + if (num_opens == 0) + return; /* permit any */ + + /* handle keywords: "any" / "none" */ + if (num_opens == 1 && strcmp(opens[0], "any") == 0) + return; + if (num_opens == 1 && strcmp(opens[0], "none") == 0) { + channel_disable_admin(ssh, where); + return; + } + /* Otherwise treat it as a list of permitted host:port */ + for (i = 0; i < num_opens; i++) { + oarg = arg = xstrdup(opens[i]); + ch = '\0'; + addr = hpdelim2(&arg, &ch); + if (addr == NULL || ch == '/') + fatal_f("missing host in %s", what); + addr = cleanhostname(addr); + if (arg == NULL || ((port = permitopen_port(arg)) < 0)) + fatal_f("bad port number in %s", what); + /* Send it to channels layer */ + channel_add_permission(ssh, FORWARD_ADM, + where, addr, port); + free(oarg); + } +} + static void ssh_init_forwarding(struct ssh *ssh, char **ifname) { int success = 0; int i; + ssh_init_forward_permissions(ssh, "permitremoteopen", + options.permitted_remote_opens, + options.num_permitted_remote_opens); + if (options.exit_on_forward_failure) forward_confirms_pending = 0; /* track pending requests */ /* Initiate local TCP/IP port forwardings. */ diff --git a/ssh_config.5 b/ssh_config.5 index fb3a3a41afa4..8764e87b52e9 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.346 2021/02/15 11:09:22 dlg Exp $ +.\" $OpenBSD: ssh_config.5,v 1.347 2021/02/15 20:43:15 markus Exp $ .Dd $Mdocdate: February 15 2021 $ .Dt SSH_CONFIG 5 .Os @@ -1290,6 +1290,42 @@ The argument must be or .Cm no (the default). +.It Cm PermitRemoteOpen +Specifies the destinations to which remote TCP port forwarding is permitted when +.Cm RemoteForward +is used as a SOCKS proxy. +The forwarding specification must be one of the following forms: +.Pp +.Bl -item -offset indent -compact +.It +.Cm PermitRemoteOpen +.Sm off +.Ar host : port +.Sm on +.It +.Cm PermitRemoteOpen +.Sm off +.Ar IPv4_addr : port +.Sm on +.It +.Cm PermitRemoteOpen +.Sm off +.Ar \&[ IPv6_addr \&] : port +.Sm on +.El +.Pp +Multiple forwards may be specified by separating them with whitespace. +An argument of +.Cm any +can be used to remove all restrictions and permit any forwarding requests. +An argument of +.Cm none +can be used to prohibit all forwarding requests. +The wildcard +.Sq * +can be used for host or port to allow all hosts or ports respectively. +Otherwise, no pattern matching or address lookups are performed on supplied +names. .It Cm PKCS11Provider Specifies which PKCS#11 provider to use or .Cm none @@ -1484,6 +1520,9 @@ If forwarding to a specific destination then the second argument must be or a Unix domain socket path, otherwise if no destination argument is specified then the remote forwarding will be established as a SOCKS proxy. +When acting as a SOCKS proxy the destination of the connection can be +restricted by +.Cm PermitRemoteOpen . .Pp IPv6 addresses can be specified by enclosing addresses in square brackets. Multiple forwardings may be specified, and additional From 64bbd7444d658ef7ee14a7ea5ccc7f5810279ee7 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Wed, 17 Feb 2021 03:59:00 +0000 Subject: [PATCH 0219/1788] upstream: Make sure puttygen is new enough to successfully run the PuTTY interop tests, otherwise skip them. OpenBSD-Regress-ID: 34565bb50b8aec58331ed02a5e9e0a9a929bef51 --- regress/test-exec.sh | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/regress/test-exec.sh b/regress/test-exec.sh index db5d2f9c90c6..11475938bed6 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -1,4 +1,4 @@ -# $OpenBSD: test-exec.sh,v 1.76 2020/04/04 23:04:41 dtucker Exp $ +# $OpenBSD: test-exec.sh,v 1.77 2021/02/17 03:59:00 dtucker Exp $ # Placed in the Public Domain. #SUDO=sudo @@ -601,10 +601,11 @@ if test -x "$CONCH" ; then REGRESS_INTEROP_CONCH=yes fi -# If PuTTY is present and we are running a PuTTY test, prepare keys and -# configuration +# If PuTTY is present, new enough and we are running a PuTTY test, prepare +# keys and configuration. REGRESS_INTEROP_PUTTY=no -if test -x "$PUTTYGEN" -a -x "$PLINK" ; then +if test -x "$PUTTYGEN" -a -x "$PLINK" && + "$PUTTYGEN" --help 2>&1 | grep -- --new-passphrase >/dev/null; then REGRESS_INTEROP_PUTTY=yes fi case "$SCRIPT" in @@ -617,13 +618,13 @@ if test "$REGRESS_INTEROP_PUTTY" = "yes" ; then # Add a PuTTY key to authorized_keys rm -f ${OBJ}/putty.rsa2 - if ! puttygen -t rsa -o ${OBJ}/putty.rsa2 \ + if ! "$PUTTYGEN" -t rsa -o ${OBJ}/putty.rsa2 \ --random-device=/dev/urandom \ --new-passphrase /dev/null < /dev/null > /dev/null; then - echo "Your installed version of PuTTY is too old to support --new-passphrase; trying without (may require manual interaction) ..." >&2 - puttygen -t rsa -o ${OBJ}/putty.rsa2 < /dev/null > /dev/null + echo "Your installed version of PuTTY is too old to support --new-passphrase, skipping test" >&2 + exit 1 fi - puttygen -O public-openssh ${OBJ}/putty.rsa2 \ + "$PUTTYGEN" -O public-openssh ${OBJ}/putty.rsa2 \ >> $OBJ/authorized_keys_$USER # Convert rsa2 host key to PuTTY format @@ -647,8 +648,6 @@ if test "$REGRESS_INTEROP_PUTTY" = "yes" ; then PUTTYDIR=${OBJ}/.putty export PUTTYDIR - - REGRESS_INTEROP_PUTTY=yes fi # create a proxy version of the client config From f031366535650b88248ed7dbf23033afdf466240 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 15 Jan 2021 14:11:43 +1100 Subject: [PATCH 0220/1788] Add self-hosted runners for VMs of other platforms. Github only hosts a limited number of platforms, and the runner code is only supported on slightly wider range of platforms. To increase our test coverage beyond that, we run the runner natively on a VM host, where it runs a jobs that boot VMs of other platforms, waits for them to come up then runs the build and test by ssh'ing into the guest. This means that the minimum dependencies for the guests are quite low (basically just sshd, a compiler and make). The interface to the VM host is fairly simple (basically 3 scripts: vmstartup, vmrun and vmshutdown), but those are specific to the VM host so are not in the public repo. We also mount the working directory on the host via sshfs, so things like artifact upload by the runner also work. As part of this we are moving the per-test-target configs into a single place (.github/configs) where there will be referenced by a single short "config" key. I plan to make the github-hosted runners use this too. The self-hosted runners are run off a private repo on github since that prevents third parties from accessing them[0], and since runner quota is limited on private repos, we avoid running the tests we run on the public repo. [0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories --- .github/configs | 65 +++++++++++++++++++++++++++++++ .github/configure.sh | 6 +++ .github/run_test.sh | 23 +++++------ .github/setup_ci.sh | 2 +- .github/workflows/c-cpp.yml | 4 ++ .github/workflows/selfhosted.yml | 67 ++++++++++++++++++++++++++++++++ 6 files changed, 153 insertions(+), 14 deletions(-) create mode 100755 .github/configs create mode 100755 .github/configure.sh create mode 100644 .github/workflows/selfhosted.yml diff --git a/.github/configs b/.github/configs new file mode 100755 index 000000000000..1cf80027bee4 --- /dev/null +++ b/.github/configs @@ -0,0 +1,65 @@ +#!/bin/sh +# +# usage: configs vmname test_config (or '' for default) +# +# Sets the following variables: +# CONFIGFLAGS options to ./configure +# SSHD_CONFOPTS sshd_config options +# TEST_TARGET make target used when testing. defaults to "tests". +# LTESTS + +config=$1 + +TEST_TARGET="tests" +LTESTS="" +SUDO=sudo # run with sudo by default +TEST_SSH_UNSAFE_PERMISSIONS=1 + +CONFIGFLAGS="" +LIBCRYPTOFLAGS="" + +case "$config" in + default|sol64) + ;; + *pam) + CONFIGFLAGS="--with-pam" + SSHD_CONFOPTS="UsePam yes" + ;; + without-openssl) + LIBCRYPTOFLAGS="--without-openssl" + TEST_TARGET=t-exec + ;; + *) + echo "Unknown configuration $config" + exit 1 + ;; +esac + +# The Solaris 64bit targets are special since they need a non-flag arg. +case "$config" in + sol64*) + CONFIGFLAGS="x86_64 --with-cflags=-m64 --with-ldflags=-m64 ${CONFIGFLAGS}" + LIBCRYPTOFLAGS="--with-ssl-dir=/usr/local/ssl64" + ;; +esac + +case "${TARGET_HOST}" in + sol10) + # This VM is 32bit and the unit tests are slow. + TEST_TARGET="tests SKIP_UNIT=1" + ;; +esac + +# If we have a local openssl/libressl, use that. +if [ -z "${LIBCRYPTOFLAGS}" ]; then + # last-match + for i in /usr/local /usr/local/ssl; do + if [ -x ${i}/bin/openssl ]; then + LIBCRYPTOFLAGS="--with-ssl-dir=${i}" + fi + done +fi + +CONFIGFLAGS="${CONFIGFLAGS} ${LIBCRYPTOFLAGS}" + +export LTESTS SUDO TEST_TARGET TEST_SSH_UNSAFE_PERMISSIONS diff --git a/.github/configure.sh b/.github/configure.sh new file mode 100755 index 000000000000..869dc8245693 --- /dev/null +++ b/.github/configure.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +. .github/configs $1 $2 + +set -x +./configure ${CONFIGFLAGS} diff --git a/.github/run_test.sh b/.github/run_test.sh index 5a0e65385a0d..c21730202349 100755 --- a/.github/run_test.sh +++ b/.github/run_test.sh @@ -1,23 +1,11 @@ #!/usr/bin/env bash -TARGETS=$@ - -TEST_TARGET="tests" -LTESTS="" # all tests by default +. .github/configs $1 $2 [ -z "${SUDO}" ] || ${SUDO} mkdir -p /var/empty set -ex -for TARGET in $TARGETS; do - case $TARGET in - --without-openssl) - # When built without OpenSSL we can't do the file-based RSA key tests. - TEST_TARGET=t-exec - ;; - esac -done - if [ -z "$LTESTS" ]; then make $TEST_TARGET result=$? @@ -26,6 +14,15 @@ else result=$? fi +if [ ! -z ${SSHD_CONFOPTS} ]; then + echo "rerunning tests with TEST_SSH_SSHD_CONFOPTS='${SSHD_CONFOPTS}'" + make t-exec TEST_SSH_SSHD_CONFOPTS="${SSHD_CONFOPTS}" + result2=$? + if [ "${result2}" -ne 0 ]; then + result="${result2}" + fi +fi + if [ "$result" -ne "0" ]; then for i in regress/failed*; do echo ------------------------------------------------------------------------- diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 67a76a5d530a..187a4fad69a0 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -20,7 +20,7 @@ lsb_release -a for TARGET in $TARGETS; do case $TARGET in - ""|--without-openssl|--without-zlib|--with-Werror|--with-rpath*) + ""|--without-openssl|--without-zlib|--with-Werror|--with-rpath*|--with-ssl-dir=*|--with-zlib=*) # nothing to do ;; "--with-kerberos5") diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index e546a9c58787..7d02bc319ca4 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -8,6 +8,7 @@ on: jobs: ubuntu-20_04: + if: github.repository != 'openssh/openssh-portable-selfhosted' runs-on: ubuntu-20.04 strategy: matrix: @@ -37,6 +38,7 @@ jobs: ubuntu-18_04: + if: github.repository != 'openssh/openssh-portable-selfhosted' runs-on: ubuntu-18.04 strategy: matrix: @@ -69,6 +71,7 @@ jobs: ubuntu-16_04: + if: github.repository != 'openssh/openssh-portable-selfhosted' runs-on: ubuntu-16.04 strategy: matrix: @@ -95,6 +98,7 @@ jobs: macos: + if: github.repository != 'openssh/openssh-portable-selfhosted' strategy: matrix: os: [ macos-10.15, macos-11.0 ] diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml new file mode 100644 index 000000000000..835bfb3203af --- /dev/null +++ b/.github/workflows/selfhosted.yml @@ -0,0 +1,67 @@ +name: C/C++ CI self-hosted + +on: + push: + branches: [ master, ci ] + +jobs: + selfhosted: + runs-on: ${{ matrix.vm }} + env: + TARGET_HOST: ${{ matrix.vm }} + SUDO: sudo + strategy: + fail-fast: false + # We use a matrix in two parts: firstly all of the VMs are tested with the + # default config. "vm" corresponds to a label associated with the worker. + matrix: + vm: [dfly30, dfly48, dfly58, sol10, sol11] + configs: + - default + # Then we include any extra configs we want to test for specific VMs. + include: + - vm: dfly30 + configs: without-openssl + - vm: dfly48 + configs: pam + - vm: dfly58 + configs: pam + - vm: sol10 + configs: pam + - vm: sol11 + configs: pam + - vm: sol11 + configs: sol64 + - vm: sol11 + configs: sol64-pam + steps: + - uses: actions/checkout@v2 + - name: autoreconf + run: autoreconf + - name: shutdown VM if running + run: vmshutdown + - name: startup VM + run: vmstartup + - name: configure + run: vmrun ./.github/configure.sh ${{ matrix.configs }} + - name: save config files + if: always() + uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.vm }}-${{ matrix.configs }}-config-files + path: | + config.h + config.log + - name: make + run: vmrun make + - name: make tests + run: vmrun ./.github/run_test.sh ${{ matrix.configs }} + - name: save regress logs + if: failure() + uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.vm }}-${{ matrix.configs }}-regress-logs + path: regress/*.log + - name: shutdown VM + if: always() + run: vmshutdown From 65380ff7e054be1454e5ab4fd7bb9c66f8fcbaa9 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 17 Feb 2021 18:27:36 +1100 Subject: [PATCH 0221/1788] Only run selfhosted tests from selfhosted repo. --- .github/workflows/selfhosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 835bfb3203af..4d2e085b949f 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -6,6 +6,7 @@ on: jobs: selfhosted: + if: github.repository == 'openssh/openssh-portable-selfhosted' runs-on: ${{ matrix.vm }} env: TARGET_HOST: ${{ matrix.vm }} From 09f4b84654b71099559492e9aed5e1a38bf24815 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 17 Feb 2021 18:41:30 +1100 Subject: [PATCH 0222/1788] Convert most github hosted tests to new config structure. --- .github/configs | 31 +++++++++++-- .github/setup_ci.sh | 22 +++++---- .github/workflows/c-cpp.yml | 93 ++++++++----------------------------- 3 files changed, 61 insertions(+), 85 deletions(-) diff --git a/.github/configs b/.github/configs index 1cf80027bee4..fa0ceff78ec8 100755 --- a/.github/configs +++ b/.github/configs @@ -21,13 +21,38 @@ LIBCRYPTOFLAGS="" case "$config" in default|sol64) ;; + kitchensink) + CONFIGFLAGS="--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin" + CONFIGFLAGS="${CONFIGFLAGS} --with-selinux" + ;; + hardenedmalloc) + CONFIGFLAGS="--with-ldflags=-lhardened_malloc" + ;; + kerberos5) + CONFIGFLAGS="--with-kerberos5" + ;; + libedit) + CONFIGFLAGS="--with-libedit" + ;; *pam) CONFIGFLAGS="--with-pam" SSHD_CONFOPTS="UsePam yes" ;; + libressl-head) + LIBCRYPTOFLAGS="--with-ssl-dir=/opt/libressl/head --with-rpath=-Wl,-rpath," + ;; + openssl-head) + LIBCRYPTOFLAGS="--with-ssl-dir=/opt/openssl/head --with-rpath=-Wl,-rpath," + ;; + selinux) + CONFIGFLAGS="--with-selinux" + ;; + sk) + CONFIGFLAGS="--with-security-key-builtin" + ;; without-openssl) LIBCRYPTOFLAGS="--without-openssl" - TEST_TARGET=t-exec + TEST_TARGET=t-exec ;; *) echo "Unknown configuration $config" @@ -53,8 +78,8 @@ esac # If we have a local openssl/libressl, use that. if [ -z "${LIBCRYPTOFLAGS}" ]; then # last-match - for i in /usr/local /usr/local/ssl; do - if [ -x ${i}/bin/openssl ]; then + for i in /usr/local /usr/local/ssl /usr/local/opt/openssl; do + if [ -d ${i}/bin/openssl ]; then LIBCRYPTOFLAGS="--with-ssl-dir=${i}" fi done diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 187a4fad69a0..16eca54522c1 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -18,35 +18,39 @@ set -ex lsb_release -a +if [ "${TARGETS}" = "kitchensink" ]; then + TARGETS="kerberos5 libedit pam sk selinux" +fi + for TARGET in $TARGETS; do case $TARGET in - ""|--without-openssl|--without-zlib|--with-Werror|--with-rpath*|--with-ssl-dir=*|--with-zlib=*) + default|without-openssl|without-zlib) # nothing to do ;; - "--with-kerberos5") + kerberos5) PACKAGES="$PACKAGES heimdal-dev" #PACKAGES="$PACKAGES libkrb5-dev" ;; - "--with-libedit") + libedit) PACKAGES="$PACKAGES libedit-dev" ;; - "--with-pam") + *pam) PACKAGES="$PACKAGES libpam0g-dev" ;; - "--with-security-key-builtin") + sk) INSTALL_FIDO_PPA="yes" PACKAGES="$PACKAGES libfido2-dev libu2f-host-dev" ;; - "--with-selinux") + selinux) PACKAGES="$PACKAGES libselinux1-dev selinux-policy-dev" ;; - "--with-ldflags=-lhardened_malloc") + hardenedmalloc) INSTALL_HARDENED_MALLOC=yes ;; - "--with-ssl-dir=/opt/openssl/head") + openssl-head) INSTALL_OPENSSL_HEAD=yes ;; - "--with-ssl-dir=/opt/libressl/head") + libressl-head) INSTALL_LIBRESSL_HEAD=yes ;; *) echo "Invalid option '${TARGET}'" diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 7d02bc319ca4..fe910bb7bc66 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -7,77 +7,27 @@ on: branches: [ master ] jobs: - ubuntu-20_04: + linux: if: github.repository != 'openssh/openssh-portable-selfhosted' - runs-on: ubuntu-20.04 strategy: + fail-fast: false matrix: - configs: - - "" - - "--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin --with-selinux --with-Werror" - - "--with-ldflags=-lhardened_malloc" - - "--with-ssl-dir=/opt/openssl/head --with-rpath=-Wl,-rpath," - - "--with-ssl-dir=/opt/libressl/head --with-rpath=-Wl,-rpath," - steps: - - uses: actions/checkout@v2 - - name: setup CI system - run: ./.github/setup_ci.sh ${{ matrix.configs }} - - name: autoreconf - run: autoreconf - - name: configure - run: ./configure ${{ matrix.configs }} - - name: make - run: make -j2 - - name: copy moduli - run: sudo cp moduli /usr/local/etc/ - - name: make tests - run: ./.github/run_test.sh ${{ matrix.configs }} - env: - SUDO: sudo - TEST_SSH_UNSAFE_PERMISSIONS: 1 - - - ubuntu-18_04: - if: github.repository != 'openssh/openssh-portable-selfhosted' - runs-on: ubuntu-18.04 - strategy: - matrix: - configs: - - "" - - "--with-kerberos5" - - "--with-libedit" - - "--with-pam" - - "--with-security-key-builtin" - - "--with-selinux" - - "--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin --with-selinux" - - "--without-openssl --without-zlib" - steps: - - uses: actions/checkout@v2 - - name: setup CI system - run: ./.github/setup_ci.sh ${{ matrix.configs }} - - name: autoreconf - run: autoreconf - - name: configure - run: ./configure ${{ matrix.configs }} - - name: make - run: make -j2 - - name: copy moduli - run: sudo cp moduli /usr/local/etc/ - - name: make tests - run: ./.github/run_test.sh ${{ matrix.configs }} - env: - SUDO: sudo - TEST_SSH_UNSAFE_PERMISSIONS: 1 - - - ubuntu-16_04: - if: github.repository != 'openssh/openssh-portable-selfhosted' - runs-on: ubuntu-16.04 - strategy: - matrix: - configs: - - "" - - "--with-pam --with-selinux --with-libedit --with-kerberos5 " + os: [ubuntu-16_04, ubuntu-18_04, ubuntu-20.04] + configs: [default, pam] + # Then we include any extra configs we want to test for specific VMs. + include: + - { os: ubuntu-20.04, configs: kitchensink } + - { os: ubuntu-20.04, configs: hardenedmalloc } + - { os: ubuntu-20.04, configs: libressl-head } + - { os: ubuntu-20.04, configs: openssl-head } + - { os: ubuntu-18.04, configs: kerberos5 } + - { os: ubuntu-18.04, configs: libedit } + - { os: ubuntu-18.04, configs: sk } + - { os: ubuntu-18.04, configs: selinux } + - { os: ubuntu-18.04, configs: kitchensink } + - { os: ubuntu-18.04, configs: without-openssl } + - { os: ubuntu-16_04, configs: kitchensink } + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: setup CI system @@ -85,7 +35,7 @@ jobs: - name: autoreconf run: autoreconf - name: configure - run: ./configure ${{ matrix.configs }} + run: ./.github/configure.sh ${{ matrix.configs }} - name: make run: make -j2 - name: copy moduli @@ -96,15 +46,12 @@ jobs: SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 - macos: if: github.repository != 'openssh/openssh-portable-selfhosted' strategy: matrix: os: [ macos-10.15, macos-11.0 ] - configs: - - "" - - "--with-pam" + configs: [default, pam] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 From 4582612e6147d766c336198c498740242fb8f1ec Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 17 Feb 2021 20:21:29 +1100 Subject: [PATCH 0223/1788] Merge macos and ubuntu tests. --- .github/configs | 2 +- .github/workflows/c-cpp.yml | 29 ++--------------------------- 2 files changed, 3 insertions(+), 28 deletions(-) diff --git a/.github/configs b/.github/configs index fa0ceff78ec8..fa8fb6a27a33 100755 --- a/.github/configs +++ b/.github/configs @@ -79,7 +79,7 @@ esac if [ -z "${LIBCRYPTOFLAGS}" ]; then # last-match for i in /usr/local /usr/local/ssl /usr/local/opt/openssl; do - if [ -d ${i}/bin/openssl ]; then + if [ -x ${i}/bin/openssl ]; then LIBCRYPTOFLAGS="--with-ssl-dir=${i}" fi done diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index fe910bb7bc66..36e4c14bfb44 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -7,12 +7,12 @@ on: branches: [ master ] jobs: - linux: + ci: if: github.repository != 'openssh/openssh-portable-selfhosted' strategy: fail-fast: false matrix: - os: [ubuntu-16_04, ubuntu-18_04, ubuntu-20.04] + os: [ubuntu-16_04, ubuntu-18_04, ubuntu-20.04, macos-10.15, macos-11.0] configs: [default, pam] # Then we include any extra configs we want to test for specific VMs. include: @@ -45,28 +45,3 @@ jobs: env: SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 - - macos: - if: github.repository != 'openssh/openssh-portable-selfhosted' - strategy: - matrix: - os: [ macos-10.15, macos-11.0 ] - configs: [default, pam] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v2 - - name: setup CI system - run: ./.github/setup_ci.sh ${{ matrix.configs }} - - name: autoreconf - run: autoreconf - - name: configure - run: ./configure --with-ssl-dir=/usr/local/opt/openssl ${{ matrix.configs }} - - name: make - run: make -j2 - - name: copy moduli - run: sudo cp moduli /usr/local/etc/ - - name: make tests - run: ./.github/run_test.sh ${{ matrix.configs }} - env: - SUDO: sudo - TEST_SSH_UNSAFE_PERMISSIONS: 1 From 0406cd09f05c2e419b113dd4c0eac8bc34ec915b Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 17 Feb 2021 21:19:18 +1100 Subject: [PATCH 0224/1788] Skip unit tests on hosted VMs to speed things up. --- .github/workflows/selfhosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 4d2e085b949f..49fd17e9e160 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -11,6 +11,7 @@ jobs: env: TARGET_HOST: ${{ matrix.vm }} SUDO: sudo + SKIP_UNIT: 1 strategy: fail-fast: false # We use a matrix in two parts: firstly all of the VMs are tested with the From 4512047f57ca3c6e8cd68f0cc69be59e98b25287 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 17 Feb 2021 21:47:48 +1100 Subject: [PATCH 0225/1788] More compact representation of config matrix. --- .github/workflows/selfhosted.yml | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 49fd17e9e160..637ce959f1a1 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -22,20 +22,13 @@ jobs: - default # Then we include any extra configs we want to test for specific VMs. include: - - vm: dfly30 - configs: without-openssl - - vm: dfly48 - configs: pam - - vm: dfly58 - configs: pam - - vm: sol10 - configs: pam - - vm: sol11 - configs: pam - - vm: sol11 - configs: sol64 - - vm: sol11 - configs: sol64-pam + - { vm: dfly30, configs: without-openssl} + - { vm: dfly48, configs: pam } + - { vm: dfly58, configs: pam } + - { vm: sol10, configs: pam } + - { vm: sol11, configs: pam } + - { vm: sol11, configs: sol64 } + - { vm: sol11, configs: sol64-pam } steps: - uses: actions/checkout@v2 - name: autoreconf From 4653116c1f5384ea7006e6396d9b53c33d218975 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 09:51:18 +1100 Subject: [PATCH 0226/1788] Fix labels on targets (dots vs underscores). --- .github/workflows/c-cpp.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 36e4c14bfb44..ca47ff6eeb24 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-16_04, ubuntu-18_04, ubuntu-20.04, macos-10.15, macos-11.0] + os: [ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-10.15, macos-11.0] configs: [default, pam] # Then we include any extra configs we want to test for specific VMs. include: @@ -26,7 +26,7 @@ jobs: - { os: ubuntu-18.04, configs: selinux } - { os: ubuntu-18.04, configs: kitchensink } - { os: ubuntu-18.04, configs: without-openssl } - - { os: ubuntu-16_04, configs: kitchensink } + - { os: ubuntu-16.04, configs: kitchensink } runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 From 5c8f41ad100601ec2fdcbccdfe92890c31f81bbe Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 09:59:09 +1100 Subject: [PATCH 0227/1788] Quote SSHD_CONFOPTS in case it contains spaces. --- .github/run_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/run_test.sh b/.github/run_test.sh index c21730202349..f698996d405e 100755 --- a/.github/run_test.sh +++ b/.github/run_test.sh @@ -14,7 +14,7 @@ else result=$? fi -if [ ! -z ${SSHD_CONFOPTS} ]; then +if [ ! -z "${SSHD_CONFOPTS}" ]; then echo "rerunning tests with TEST_SSH_SSHD_CONFOPTS='${SSHD_CONFOPTS}'" make t-exec TEST_SSH_SSHD_CONFOPTS="${SSHD_CONFOPTS}" result2=$? From 1c293868e4b4e8e74e3ea15b8dff90f6b089967a Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 10:05:03 +1100 Subject: [PATCH 0228/1788] Always intall moduli. Allows us to run tests without falling back to a fixed modulus. Ensure that the directory exists. --- .github/workflows/c-cpp.yml | 4 ++-- .github/workflows/selfhosted.yml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index ca47ff6eeb24..7f276e5d57bb 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -38,8 +38,8 @@ jobs: run: ./.github/configure.sh ${{ matrix.configs }} - name: make run: make -j2 - - name: copy moduli - run: sudo cp moduli /usr/local/etc/ + - name: install moduli + run: sudo sh -c "mkdir -p /usr/local/etc/; cp moduli /usr/local/etc/" - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 637ce959f1a1..2f76dfdf5fed 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -49,6 +49,8 @@ jobs: config.log - name: make run: vmrun make + - name: install moduli + run: sudo sh -c "mkdir -p /usr/local/etc/; cp moduli /usr/local/etc/" - name: make tests run: vmrun ./.github/run_test.sh ${{ matrix.configs }} - name: save regress logs From 161873035c12cc22211fc73d07170ade47746bc5 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 10:09:27 +1100 Subject: [PATCH 0229/1788] Remove SKIP_UNIT as it needs to be a make arg. --- .github/workflows/selfhosted.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 2f76dfdf5fed..8d8a3b55c59a 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -11,7 +11,6 @@ jobs: env: TARGET_HOST: ${{ matrix.vm }} SUDO: sudo - SKIP_UNIT: 1 strategy: fail-fast: false # We use a matrix in two parts: firstly all of the VMs are tested with the From bc9b0c25703215501da28aa7a6539f96c0fa656f Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 10:10:00 +1100 Subject: [PATCH 0230/1788] Skip unit tests on sol11 to speed things up. --- .github/configs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/configs b/.github/configs index fa8fb6a27a33..9d2119a8aa84 100755 --- a/.github/configs +++ b/.github/configs @@ -69,8 +69,9 @@ case "$config" in esac case "${TARGET_HOST}" in - sol10) - # This VM is 32bit and the unit tests are slow. + sol10|sol11) + # sol10 VM is 32bit and the unit tests are slow. + # sol11 has 4 test configs so skip unit tests to speed up. TEST_TARGET="tests SKIP_UNIT=1" ;; esac From f060c2bc85d59d111fa18a12eb3872ee4b9f7e97 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Thu, 18 Feb 2021 10:33:58 +1100 Subject: [PATCH 0231/1788] don't free string returned by login_getcapstr(3) OpenBSD and NetBSD require the caller to free strings returned bu the login_* functions, but FreeBSD requires that callers don't. Fortunately in this case, we can harmlessly leak as the process is about to exec the shell/command. From https://reviews.freebsd.org/D28617 via Ed Maste; ok dtucker@ --- session.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/session.c b/session.c index e63fc472c245..4b155f913f2c 100644 --- a/session.c +++ b/session.c @@ -1287,11 +1287,8 @@ do_nologin(struct passwd *pw) return; nl = def_nl; #endif - if (stat(nl, &sb) == -1) { - if (nl != def_nl) - free(nl); + if (stat(nl, &sb) == -1) return; - } /* /etc/nologin exists. Print its contents if we can and exit. */ logit("User %.100s not allowed because %s exists", pw->pw_name, nl); From b3afc243bc820f323a09e3218e9ec8a30a3c1933 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 10:27:16 +1100 Subject: [PATCH 0232/1788] Install moduli on target not host. --- .github/workflows/selfhosted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 8d8a3b55c59a..b95ef2a05fd0 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -49,7 +49,7 @@ jobs: - name: make run: vmrun make - name: install moduli - run: sudo sh -c "mkdir -p /usr/local/etc/; cp moduli /usr/local/etc/" + run: vmrun sudo mkdir -p /usr/local/etc/; sudo cp moduli /usr/local/etc/ - name: make tests run: vmrun ./.github/run_test.sh ${{ matrix.configs }} - name: save regress logs From d0763c8d566119cce84d9806e419badf20444b02 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 10:45:27 +1100 Subject: [PATCH 0233/1788] Fixing quoting for installing moduli on target guest. --- .github/workflows/selfhosted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index b95ef2a05fd0..17aa5e9ea405 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -49,7 +49,7 @@ jobs: - name: make run: vmrun make - name: install moduli - run: vmrun sudo mkdir -p /usr/local/etc/; sudo cp moduli /usr/local/etc/ + run: vmrun "sudo mkdir -p /usr/local/etc/; sudo cp moduli /usr/local/etc/" - name: make tests run: vmrun ./.github/run_test.sh ${{ matrix.configs }} - name: save regress logs From 845fe9811c047063d935eca89188ed55c993626b Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Thu, 18 Feb 2021 11:25:38 +1100 Subject: [PATCH 0234/1788] prefer login_getpwclass() to login_getclass() FreeBSD has login_getpwclass() that does some special magic for UID=0. Prefer this to login_getclass() as its easier to emulate the former with the latter. Based on FreeBSD PR 37416 via Ed Maste; ok dtucker@ --- auth.c | 2 +- configure.ac | 1 + openbsd-compat/openbsd-compat.h | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/auth.c b/auth.c index 2b77abcadcd9..a0e3cd6fe481 100644 --- a/auth.c +++ b/auth.c @@ -604,7 +604,7 @@ getpwnamallow(struct ssh *ssh, const char *user) if (!allowed_user(ssh, pw)) return (NULL); #ifdef HAVE_LOGIN_CAP - if ((lc = login_getclass(pw->pw_class)) == NULL) { + if ((lc = login_getpwclass(pw)) == NULL) { debug("unable to get login class: %s", user); return (NULL); } diff --git a/configure.ac b/configure.ac index 63c239e094a1..6b75cf9714e2 100644 --- a/configure.ac +++ b/configure.ac @@ -1841,6 +1841,7 @@ AC_CHECK_FUNCS([ \ llabs \ localtime_r \ login_getcapbool \ + login_getpwclass \ md5_crypt \ memmem \ memmove \ diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h index 50bac587d960..542ae58ddc8a 100644 --- a/openbsd-compat/openbsd-compat.h +++ b/openbsd-compat/openbsd-compat.h @@ -48,6 +48,10 @@ #include "blf.h" #include "fnmatch.h" +#if defined(HAVE_LOGIN_CAP) && !defined(HAVE_LOGIN_GETPWCLASS) +# define login_getpwclass(pw) login_getclass(pw->pw_class) +#endif + #ifndef HAVE_BASENAME char *basename(const char *path); #endif From 324449a68d510720d0e4dfcc8e9e5a702fe6a48f Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Thu, 18 Feb 2021 12:06:25 +1100 Subject: [PATCH 0235/1788] support OpenSSL 3.x cipher IV API change OpenSSL renamed the "get current CIPHER_CTX" IV operation in 3.x. This uses the new name if available. https://github.com/openssl/openssl/issues/13411 bz#3238 ok dtucker@ --- configure.ac | 1 + openbsd-compat/openssl-compat.h | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/configure.ac b/configure.ac index 6b75cf9714e2..fe2257314dfe 100644 --- a/configure.ac +++ b/configure.ac @@ -2867,6 +2867,7 @@ if test "x$openssl" = "xyes" ; then EVP_CIPHER_CTX_iv \ EVP_CIPHER_CTX_iv_noconst \ EVP_CIPHER_CTX_get_iv \ + EVP_CIPHER_CTX_get_updated_iv \ EVP_CIPHER_CTX_set_iv \ RSA_get0_crt_params \ RSA_get0_factors \ diff --git a/openbsd-compat/openssl-compat.h b/openbsd-compat/openssl-compat.h index 388ae8aa0077..8ca50b5ace63 100644 --- a/openbsd-compat/openssl-compat.h +++ b/openbsd-compat/openssl-compat.h @@ -113,8 +113,12 @@ int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); #endif /* HAVE_DSA_SET0_KEY */ #ifndef HAVE_EVP_CIPHER_CTX_GET_IV +# ifdef HAVE_EVP_CIPHER_CTX_GET_UPDATED_IV +# define EVP_CIPHER_CTX_get_iv EVP_CIPHER_CTX_get_updated_iv +# else /* HAVE_EVP_CIPHER_CTX_GET_UPDATED_IV */ int EVP_CIPHER_CTX_get_iv(const EVP_CIPHER_CTX *ctx, unsigned char *iv, size_t len); +# endif /* HAVE_EVP_CIPHER_CTX_GET_UPDATED_IV */ #endif /* HAVE_EVP_CIPHER_CTX_GET_IV */ #ifndef HAVE_EVP_CIPHER_CTX_SET_IV From 788cbc5b74a53956ba9fff11e1ca506271a3597f Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 18 Feb 2021 00:30:17 +0000 Subject: [PATCH 0236/1788] upstream: sftp-server: implement limits@openssh.com extension This is a simple extension that allows the server to clearly communicate transfer limits it is imposing so the client doesn't have to guess, or force the user to manually tune. This is particularly useful when an attempt to use too large of a value causes the server to abort the connection. Patch from Mike Frysinger; ok dtucker@ OpenBSD-Commit-ID: f96293221e5aa24102d9bf30e4f4ef04d5f4fb51 --- PROTOCOL | 45 ++++++++++++++++++++++++++++++++++++++++++++- sftp-server.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 85 insertions(+), 3 deletions(-) diff --git a/PROTOCOL b/PROTOCOL index 5c5e042e592c..88c0c40986a7 100644 --- a/PROTOCOL +++ b/PROTOCOL @@ -481,6 +481,49 @@ See the "setstat" command for more details. This extension is advertised in the SSH_FXP_VERSION hello with version "1". +3.8. sftp: Extension request "limits@openssh.com" + +This request is used to determine various limits the server might impose. +Clients should not attempt to exceed these limits as the server might sever +the connection immediately. + + uint32 id + string "limits@openssh.com" + +The server will respond with a SSH_FXP_EXTENDED_REPLY reply: + + uint32 id + uint64 max-packet-length + uint64 max-read-length + uint64 max-write-length + uint64 max-open-handles + +The 'max-packet-length' applies to the total number of bytes in a +single SFTP packet. Servers SHOULD set this at least to 34000. + +The 'max-read-length' is the largest length in a SSH_FXP_READ packet. +Even if the client requests a larger size, servers will usually respond +with a shorter SSH_FXP_DATA packet. Servers SHOULD set this at least to +32768. + +The 'max-write-length' is the largest length in a SSH_FXP_WRITE packet +the server will accept. Servers SHOULD set this at least to 32768. + +The 'max-open-handles' is the maximum number of active handles that the +server allows (e.g. handles created by SSH_FXP_OPEN and SSH_FXP_OPENDIR +packets). Servers MAY count internal file handles against this limit +(e.g. system logging or stdout/stderr), so clients SHOULD NOT expect to +open this many handles in practice. + +If the server doesn't enforce a specific limit, then the field may be +set to 0. This implies the server relies on the OS to enforce limits +(e.g. available memory or file handles), and such limits might be +dynamic. The client SHOULD take care to not try to exceed reasonable +limits. + +This extension is advertised in the SSH_FXP_VERSION hello with version +"1". + 4. Miscellaneous changes 4.1 Public key format @@ -512,4 +555,4 @@ OpenSSH's connection multiplexing uses messages as described in PROTOCOL.mux over a Unix domain socket for communications between a master instance and later clients. -$OpenBSD: PROTOCOL,v 1.39 2021/02/12 03:49:09 djm Exp $ +$OpenBSD: PROTOCOL,v 1.40 2021/02/18 00:30:17 djm Exp $ diff --git a/sftp-server.c b/sftp-server.c index c80f0d3f0be9..7300900ace62 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-server.c,v 1.121 2021/02/12 03:49:09 djm Exp $ */ +/* $OpenBSD: sftp-server.c,v 1.122 2021/02/18 00:30:17 djm Exp $ */ /* * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * @@ -19,6 +19,7 @@ #include #include +#include #ifdef HAVE_SYS_TIME_H # include #endif @@ -53,6 +54,9 @@ char *sftp_realpath(const char *, char *); /* sftp-realpath.c */ +/* Maximum data read that we are willing to accept */ +#define SFTP_MAX_READ_LENGTH (64 * 1024) + /* Our verbosity */ static LogLevel log_level = SYSLOG_LEVEL_ERROR; @@ -110,6 +114,7 @@ static void process_extended_fstatvfs(u_int32_t id); static void process_extended_hardlink(u_int32_t id); static void process_extended_fsync(u_int32_t id); static void process_extended_lsetstat(u_int32_t id); +static void process_extended_limits(u_int32_t id); static void process_extended(u_int32_t id); struct sftp_handler { @@ -152,6 +157,7 @@ static const struct sftp_handler extended_handlers[] = { { "hardlink", "hardlink@openssh.com", 0, process_extended_hardlink, 1 }, { "fsync", "fsync@openssh.com", 0, process_extended_fsync, 1 }, { "lsetstat", "lsetstat@openssh.com", 0, process_extended_lsetstat, 1 }, + { "limits", "limits@openssh.com", 0, process_extended_limits, 1 }, { NULL, NULL, 0, NULL, 0 } }; @@ -673,6 +679,9 @@ process_init(void) (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ /* lsetstat extension */ (r = sshbuf_put_cstring(msg, "lsetstat@openssh.com")) != 0 || + (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ + /* limits extension */ + (r = sshbuf_put_cstring(msg, "limits@openssh.com")) != 0 || (r = sshbuf_put_cstring(msg, "1")) != 0) /* version */ fatal_fr(r, "compose"); send_msg(msg); @@ -739,7 +748,7 @@ process_close(u_int32_t id) static void process_read(u_int32_t id) { - u_char buf[64*1024]; + u_char buf[SFTP_MAX_READ_LENGTH]; u_int32_t len; int r, handle, fd, ret, status = SSH2_FX_FAILURE; u_int64_t off; @@ -1437,6 +1446,36 @@ process_extended_lsetstat(u_int32_t id) free(name); } +static void +process_extended_limits(u_int32_t id) +{ + struct sshbuf *msg; + int r; + uint64_t nfiles = 0; + struct rlimit rlim; + + debug("request %u: limits", id); + + if (getrlimit(RLIMIT_NOFILE, &rlim) != -1 && rlim.rlim_cur > 5) + nfiles = rlim.rlim_cur - 5; /* stdio(3) + syslog + spare */ + + if ((msg = sshbuf_new()) == NULL) + fatal_f("sshbuf_new failed"); + if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED_REPLY)) != 0 || + (r = sshbuf_put_u32(msg, id)) != 0 || + /* max-packet-length */ + (r = sshbuf_put_u64(msg, SFTP_MAX_MSG_LENGTH)) != 0 || + /* max-read-length */ + (r = sshbuf_put_u64(msg, SFTP_MAX_READ_LENGTH)) != 0 || + /* max-write-length */ + (r = sshbuf_put_u64(msg, SFTP_MAX_MSG_LENGTH - 1024)) != 0 || + /* max-open-handles */ + (r = sshbuf_put_u64(msg, nfiles)) != 0) + fatal_fr(r, "compose"); + send_msg(msg); + sshbuf_free(msg); +} + static void process_extended(u_int32_t id) { From 88e3d4de31ab4f14cac658e9e0c512043b15b146 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 18 Feb 2021 02:13:58 +0000 Subject: [PATCH 0237/1788] upstream: unbreak SK_DEBUG builds from https://github.com/openssh/openssh-portable/pull/225 by ZenithalHourlyRate OpenBSD-Commit-ID: 28d7259ce1b04d025411464decfa2f1a097b43eb --- ssh-sk.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ssh-sk.c b/ssh-sk.c index e87b3f3b9ae3..b9f2312822b8 100644 --- a/ssh-sk.c +++ b/ssh-sk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-sk.c,v 1.33 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh-sk.c,v 1.34 2021/02/18 02:13:58 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -694,8 +694,8 @@ sshsk_sign(const char *provider_path, struct sshkey *key, #ifdef DEBUG_SK fprintf(stderr, "%s: sig_flags = 0x%02x, sig_counter = %u\n", __func__, resp->flags, resp->counter); - fprintf(stderr, "%s: hashed message:\n", __func__); - sshbuf_dump_data(message, sizeof(message), stderr); + fprintf(stderr, "%s: data to sign:\n", __func__); + sshbuf_dump_data(data, datalen, stderr); fprintf(stderr, "%s: sigbuf:\n", __func__); sshbuf_dump(sig, stderr); #endif From 34c5ef6e2d06d9f0e20cb04a9aebf67a6f96609a Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 18 Feb 2021 02:15:07 +0000 Subject: [PATCH 0238/1788] upstream: make names in function prototypes match those in definition from https://github.com/openssh/openssh-portable/pull/225 by ZenithalHourlyRate OpenBSD-Commit-ID: 7c736307bf3f2c7cb24d6f82f244eee959485acd --- sk-api.h | 4 ++-- sk-usbhid.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sk-api.h b/sk-api.h index df17ca54020c..74921d4c3b99 100644 --- a/sk-api.h +++ b/sk-api.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sk-api.h,v 1.11 2020/09/09 03:08:01 djm Exp $ */ +/* $OpenBSD: sk-api.h,v 1.12 2021/02/18 02:15:07 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -86,7 +86,7 @@ int sk_enroll(uint32_t alg, const uint8_t *challenge, size_t challenge_len, struct sk_option **options, struct sk_enroll_response **enroll_response); /* Sign a challenge */ -int sk_sign(uint32_t alg, const uint8_t *message, size_t message_len, +int sk_sign(uint32_t alg, const uint8_t *data, size_t data_len, const char *application, const uint8_t *key_handle, size_t key_handle_len, uint8_t flags, const char *pin, struct sk_option **options, struct sk_sign_response **sign_response); diff --git a/sk-usbhid.c b/sk-usbhid.c index 198992d56dc0..c85b9857d2c7 100644 --- a/sk-usbhid.c +++ b/sk-usbhid.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sk-usbhid.c,v 1.28 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: sk-usbhid.c,v 1.29 2021/02/18 02:15:07 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl * Copyright (c) 2020 Pedro Martelletto @@ -118,7 +118,7 @@ int sk_enroll(uint32_t alg, const uint8_t *challenge, size_t challenge_len, struct sk_option **options, struct sk_enroll_response **enroll_response); /* Sign a challenge */ -int sk_sign(uint32_t alg, const uint8_t *message, size_t message_len, +int sk_sign(uint32_t alg, const uint8_t *data, size_t data_len, const char *application, const uint8_t *key_handle, size_t key_handle_len, uint8_t flags, const char *pin, struct sk_option **options, struct sk_sign_response **sign_response); From 63238f5aed66148b8d6ca7bd5fb347d624200155 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 18 Feb 2021 02:49:35 +0000 Subject: [PATCH 0239/1788] upstream: Fix the hostkeys rotation extension documentation The documentation was lacking the needed want-reply field in the initial global request. https://github.com/openssh/openssh-portable/pull/218 by dbussink OpenBSD-Commit-ID: 051824fd78edf6d647a0b9ac011bf88e28775054 --- PROTOCOL | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PROTOCOL b/PROTOCOL index 88c0c40986a7..0b2ea60a74ba 100644 --- a/PROTOCOL +++ b/PROTOCOL @@ -292,6 +292,7 @@ has completed. byte SSH_MSG_GLOBAL_REQUEST string "hostkeys-00@openssh.com" + char 0 /* want-reply */ string[] hostkeys Upon receiving this message, a client should check which of the @@ -555,4 +556,4 @@ OpenSSH's connection multiplexing uses messages as described in PROTOCOL.mux over a Unix domain socket for communications between a master instance and later clients. -$OpenBSD: PROTOCOL,v 1.40 2021/02/18 00:30:17 djm Exp $ +$OpenBSD: PROTOCOL,v 1.41 2021/02/18 02:49:35 djm Exp $ From 65085740d3574eeb3289d592f042df62c2689bb0 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 14:53:14 +1100 Subject: [PATCH 0240/1788] Add bbone test target (arm32). --- .github/workflows/selfhosted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 17aa5e9ea405..eb9da4ff5f7a 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -16,7 +16,7 @@ jobs: # We use a matrix in two parts: firstly all of the VMs are tested with the # default config. "vm" corresponds to a label associated with the worker. matrix: - vm: [dfly30, dfly48, dfly58, sol10, sol11] + vm: [dfly30, dfly48, dfly58, sol10, sol11, bbone] configs: - default # Then we include any extra configs we want to test for specific VMs. From 93c31a623973b0fad508214593aab6ca94b11dcb Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 14:54:07 +1100 Subject: [PATCH 0241/1788] Add DEBUG_SK to kitchensink builds. --- .github/configs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/configs b/.github/configs index 9d2119a8aa84..fdc0b60117db 100755 --- a/.github/configs +++ b/.github/configs @@ -22,8 +22,9 @@ case "$config" in default|sol64) ;; kitchensink) - CONFIGFLAGS="--with-kerberos5 --with-libedit --with-pam --with-security-key-builtin" - CONFIGFLAGS="${CONFIGFLAGS} --with-selinux" + CONFIGFLAGS="--with-kerberos5 --with-libedit --with-pam" + CONFIGFLAGS="${CONFIGFLAGS} --with-security-key-builtin --with-selinux" + CONFIGFLAGS="${CONFIGFLAGS} --with-cflags=-DSK_DEBUG" ;; hardenedmalloc) CONFIGFLAGS="--with-ldflags=-lhardened_malloc" From 6506cb2798d98ff03a7cc06567c392a81f540680 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 15:21:13 +1100 Subject: [PATCH 0242/1788] Remove unused arg. --- .github/configure.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/configure.sh b/.github/configure.sh index 869dc8245693..e098730f02d6 100755 --- a/.github/configure.sh +++ b/.github/configure.sh @@ -1,6 +1,6 @@ #!/bin/sh -. .github/configs $1 $2 +. .github/configs $1 set -x ./configure ${CONFIGFLAGS} From e6528d91f12fba05f0ea64224091c9d0f38bdf1d Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 18 Feb 2021 16:30:01 +1100 Subject: [PATCH 0243/1788] Add fbsd12 test target. --- .github/workflows/selfhosted.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index eb9da4ff5f7a..bff5a15d8904 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -16,7 +16,7 @@ jobs: # We use a matrix in two parts: firstly all of the VMs are tested with the # default config. "vm" corresponds to a label associated with the worker. matrix: - vm: [dfly30, dfly48, dfly58, sol10, sol11, bbone] + vm: [dfly30, dfly48, dfly58, sol10, sol11, bbone, fbsd12] configs: - default # Then we include any extra configs we want to test for specific VMs. @@ -24,6 +24,7 @@ jobs: - { vm: dfly30, configs: without-openssl} - { vm: dfly48, configs: pam } - { vm: dfly58, configs: pam } + - { vm: fbsd12, configs: pam } - { vm: sol10, configs: pam } - { vm: sol11, configs: pam } - { vm: sol11, configs: sol64 } From 41d232e226624f1a81c17091c36b44c9010aae62 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 19 Feb 2021 10:16:56 +1100 Subject: [PATCH 0244/1788] Add test against Valgrind. --- .github/configs | 3 +++ .github/setup_ci.sh | 3 +++ .github/workflows/c-cpp.yml | 1 + 3 files changed, 7 insertions(+) diff --git a/.github/configs b/.github/configs index fdc0b60117db..404ee7e8e5f6 100755 --- a/.github/configs +++ b/.github/configs @@ -55,6 +55,9 @@ case "$config" in LIBCRYPTOFLAGS="--without-openssl" TEST_TARGET=t-exec ;; + valgrind) + TEST_TARGET=USE_VALGRIND=1 + ;; *) echo "Unknown configuration $config" exit 1 diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 16eca54522c1..831203cfd38c 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -53,6 +53,9 @@ for TARGET in $TARGETS; do libressl-head) INSTALL_LIBRESSL_HEAD=yes ;; + valgrind) + PACKAGES="$PACKAGES valgrind" + ;; *) echo "Invalid option '${TARGET}'" exit 1 ;; diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 7f276e5d57bb..b9746248f4bd 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -20,6 +20,7 @@ jobs: - { os: ubuntu-20.04, configs: hardenedmalloc } - { os: ubuntu-20.04, configs: libressl-head } - { os: ubuntu-20.04, configs: openssl-head } + - { os: ubuntu-20.04, configs: valgrind } - { os: ubuntu-18.04, configs: kerberos5 } - { os: ubuntu-18.04, configs: libedit } - { os: ubuntu-18.04, configs: sk } From e9f6d563c06886b277c6b9abafa99fa80726dc48 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 19 Feb 2021 10:20:17 +1100 Subject: [PATCH 0245/1788] Actually run Valgrind tests. --- .github/configs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/configs b/.github/configs index 404ee7e8e5f6..f5b6efe928a3 100755 --- a/.github/configs +++ b/.github/configs @@ -56,7 +56,7 @@ case "$config" in TEST_TARGET=t-exec ;; valgrind) - TEST_TARGET=USE_VALGRIND=1 + TEST_TARGET="tests USE_VALGRIND=1" ;; *) echo "Unknown configuration $config" From 8751b6c3136f5225c40f41bbf29aa29e15795f6e Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 19 Feb 2021 22:13:36 +1100 Subject: [PATCH 0246/1788] Comment out Solaris 64bit PAM build... until I can figure out why it's failing. --- .github/workflows/selfhosted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index bff5a15d8904..6b150661b78c 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -28,7 +28,7 @@ jobs: - { vm: sol10, configs: pam } - { vm: sol11, configs: pam } - { vm: sol11, configs: sol64 } - - { vm: sol11, configs: sol64-pam } + # - { vm: sol11, configs: sol64-pam } steps: - uses: actions/checkout@v2 - name: autoreconf From 76c0be0fe0465cb2b975dbd409f8d38b55e55bcb Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 19 Feb 2021 22:15:22 +1100 Subject: [PATCH 0247/1788] Upload regress failure logs in c-cpp too. --- .github/workflows/c-cpp.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index b9746248f4bd..34dabb64e40f 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -46,3 +46,9 @@ jobs: env: SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 + - name: save regress logs + if: failure() + uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.os }}-${{ matrix.configs }}-regress-logs + path: regress/*.log From ebb3b75e974cb241c6b9b9f5881b09c7bd32b651 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 19 Feb 2021 22:18:50 +1100 Subject: [PATCH 0248/1788] Rename "vm" to "os" in selfhosted to match c-cpp. Should make it easier to share code or maybe merge at some point. --- .github/workflows/selfhosted.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 6b150661b78c..980ca11a1213 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -7,28 +7,28 @@ on: jobs: selfhosted: if: github.repository == 'openssh/openssh-portable-selfhosted' - runs-on: ${{ matrix.vm }} + runs-on: ${{ matrix.os }} env: - TARGET_HOST: ${{ matrix.vm }} + TARGET_HOST: ${{ matrix.os }} SUDO: sudo strategy: fail-fast: false # We use a matrix in two parts: firstly all of the VMs are tested with the # default config. "vm" corresponds to a label associated with the worker. matrix: - vm: [dfly30, dfly48, dfly58, sol10, sol11, bbone, fbsd12] + os: [dfly30, dfly48, dfly58, sol10, sol11, bbone, fbsd12] configs: - default # Then we include any extra configs we want to test for specific VMs. include: - - { vm: dfly30, configs: without-openssl} - - { vm: dfly48, configs: pam } - - { vm: dfly58, configs: pam } - - { vm: fbsd12, configs: pam } - - { vm: sol10, configs: pam } - - { vm: sol11, configs: pam } - - { vm: sol11, configs: sol64 } - # - { vm: sol11, configs: sol64-pam } + - { os: dfly30, configs: without-openssl} + - { os: dfly48, configs: pam } + - { os: dfly58, configs: pam } + - { os: fbsd12, configs: pam } + - { os: sol10, configs: pam } + - { os: sol11, configs: pam } + - { os: sol11, configs: sol64 } + # - { os: sol11, configs: sol64-pam } steps: - uses: actions/checkout@v2 - name: autoreconf @@ -43,7 +43,7 @@ jobs: if: always() uses: actions/upload-artifact@v2 with: - name: ${{ matrix.vm }}-${{ matrix.configs }}-config-files + name: ${{ matrix.os }}-${{ matrix.configs }}-config-files path: | config.h config.log @@ -57,7 +57,7 @@ jobs: if: failure() uses: actions/upload-artifact@v2 with: - name: ${{ matrix.vm }}-${{ matrix.configs }}-regress-logs + name: ${{ matrix.os }}-${{ matrix.configs }}-regress-logs path: regress/*.log - name: shutdown VM if: always() From bb0b9bf45396c19486080d3eb0a159f94de7e6ba Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 20 Feb 2021 13:06:25 +1100 Subject: [PATCH 0249/1788] Upload valgrind logs on failure. --- .github/workflows/c-cpp.yml | 4 +++- .github/workflows/selfhosted.yml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 34dabb64e40f..5e79c07397e2 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -51,4 +51,6 @@ jobs: uses: actions/upload-artifact@v2 with: name: ${{ matrix.os }}-${{ matrix.configs }}-regress-logs - path: regress/*.log + path: | + regress/*.log + regress/valgrind-out/ diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 980ca11a1213..83b5de525427 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -58,7 +58,9 @@ jobs: uses: actions/upload-artifact@v2 with: name: ${{ matrix.os }}-${{ matrix.configs }}-regress-logs - path: regress/*.log + path: | + regress/*.log + regress/valgrind-out/ - name: shutdown VM if: always() run: vmshutdown From 5fcb0514949d61aadaf4a89cf16eb78fb47491ec Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 20 Feb 2021 13:34:02 +1100 Subject: [PATCH 0250/1788] Disable rlimit sandbox, doesn't work with valgrind Only run regress tests, runing unit tests as well makes it run longer than allowed y github. --- .github/configs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/configs b/.github/configs index f5b6efe928a3..280775e1f2de 100755 --- a/.github/configs +++ b/.github/configs @@ -56,7 +56,13 @@ case "$config" in TEST_TARGET=t-exec ;; valgrind) - TEST_TARGET="tests USE_VALGRIND=1" + # rlimit sandbox and FORTIFY_SOURCE confuse Valgrind. + CONFIGFLAGS="--without-sandbox --without-hardening" + CONFIGFLAGS="$CONFIGFLAGS --with-cppflags=-D_FORTIFY_SOURCE=0" + # Valgrind slows things down enough that the agent timeout test + # won't reliably pass, and the unit tests run longer than allowed + # by github. + TEST_TARGET="t-exec USE_VALGRIND=1 SKIP_LTESTS=agent-timeout" ;; *) echo "Unknown configuration $config" From c3b1636770785cc2830dedd0f22ef7d3d3491d6d Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 23 Feb 2021 00:05:31 +0000 Subject: [PATCH 0251/1788] upstream: warn when the user specifies a ForwardAgent path that does not exist and exit if ExitOnForwardFailure is set; bz3264 OpenBSD-Commit-ID: 72f7875865e723e464c71bf8692e83110699bf26 --- ssh.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ssh.c b/ssh.c index 220d2080e7f5..53330da5aecd 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.551 2021/02/15 20:43:15 markus Exp $ */ +/* $OpenBSD: ssh.c,v 1.552 2021/02/23 00:05:31 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1419,6 +1419,12 @@ main(int ac, char **av) free(p); free(options.forward_agent_sock_path); options.forward_agent_sock_path = cp; + if (stat(options.forward_agent_sock_path, &st) != 0) { + error("Cannot forward agent socket path \"%s\": %s", + options.forward_agent_sock_path, strerror(errno)); + if (options.exit_on_forward_failure) + cleanup_exit(255); + } } if (options.num_system_hostfiles > 0 && From ffcdd3d90e74176b3bb22937ad1f65a6c1cd3f9d Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 22 Feb 2021 08:09:27 +1100 Subject: [PATCH 0252/1788] Valgrind test: split and move up list. Since the valgrind test takes so long it approaches the limit allowed by github, move it to the head of the list so it's the first one started and split the longest tests out into a second instance that runs concurrently with the first. --- .github/configs | 13 +++++++++++-- .github/run_test.sh | 6 +++--- .github/setup_ci.sh | 2 +- .github/workflows/c-cpp.yml | 14 +++++++++++--- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/.github/configs b/.github/configs index 280775e1f2de..1c06e00d110c 100755 --- a/.github/configs +++ b/.github/configs @@ -12,6 +12,7 @@ config=$1 TEST_TARGET="tests" LTESTS="" +SKIP_LTESTS="" SUDO=sudo # run with sudo by default TEST_SSH_UNSAFE_PERMISSIONS=1 @@ -55,14 +56,22 @@ case "$config" in LIBCRYPTOFLAGS="--without-openssl" TEST_TARGET=t-exec ;; - valgrind) + valgrind-1) # rlimit sandbox and FORTIFY_SOURCE confuse Valgrind. CONFIGFLAGS="--without-sandbox --without-hardening" CONFIGFLAGS="$CONFIGFLAGS --with-cppflags=-D_FORTIFY_SOURCE=0" # Valgrind slows things down enough that the agent timeout test # won't reliably pass, and the unit tests run longer than allowed # by github. - TEST_TARGET="t-exec USE_VALGRIND=1 SKIP_LTESTS=agent-timeout" + TEST_TARGET="t-exec USE_VALGRIND=1" + SKIP_LTESTS="agent-timeout rekey try-ciphers cert-userkey integrity" + ;; + valgrind-2) + CONFIGFLAGS="--without-sandbox --without-hardening" + CONFIGFLAGS="$CONFIGFLAGS --with-cppflags=-D_FORTIFY_SOURCE=0" + # The rekey test takes >30 min so run separately. + TEST_TARGET="t-exec USE_VALGRIND=1" + LTESTS="rekey try-ciphers cert-userkey integrity" ;; *) echo "Unknown configuration $config" diff --git a/.github/run_test.sh b/.github/run_test.sh index f698996d405e..66fd5260362f 100755 --- a/.github/run_test.sh +++ b/.github/run_test.sh @@ -6,11 +6,11 @@ set -ex -if [ -z "$LTESTS" ]; then - make $TEST_TARGET +if [ -z "${LTESTS}" ]; then + make ${TEST_TARGET} SKIP_LTESTS="${SKIP_LTESTS}" result=$? else - make $TEST_TARGET LTESTS="$LTESTS" + make ${TEST_TARGET} SKIP_LTESTS="${SKIP_LTESTS}" LTESTS="${LTESTS}" result=$? fi diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 831203cfd38c..e53a351c5bdf 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -53,7 +53,7 @@ for TARGET in $TARGETS; do libressl-head) INSTALL_LIBRESSL_HEAD=yes ;; - valgrind) + valgrind*) PACKAGES="$PACKAGES valgrind" ;; *) echo "Invalid option '${TARGET}'" diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 5e79c07397e2..2279e109ebba 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -12,22 +12,30 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-10.15, macos-11.0] - configs: [default, pam] + # First we test all OSes in the default configuration. + os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, macos-10.15, macos-11.0] + configs: [default] # Then we include any extra configs we want to test for specific VMs. + # Valgrind slows things down quite a bit, so start them first. include: + - { os: ubuntu-20.04, configs: valgrind-1 } + - { os: ubuntu-20.04, configs: valgrind-2 } + - { os: ubuntu-20.04, configs: pam } - { os: ubuntu-20.04, configs: kitchensink } - { os: ubuntu-20.04, configs: hardenedmalloc } - { os: ubuntu-20.04, configs: libressl-head } - { os: ubuntu-20.04, configs: openssl-head } - - { os: ubuntu-20.04, configs: valgrind } + - { os: ubuntu-18.04, configs: pam } - { os: ubuntu-18.04, configs: kerberos5 } - { os: ubuntu-18.04, configs: libedit } - { os: ubuntu-18.04, configs: sk } - { os: ubuntu-18.04, configs: selinux } - { os: ubuntu-18.04, configs: kitchensink } - { os: ubuntu-18.04, configs: without-openssl } + - { os: ubuntu-16.04, configs: pam } - { os: ubuntu-16.04, configs: kitchensink } + - { os: macos-10.15, configs: pam } + - { os: macos-11.0, configs: pam } runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 From f186a020f2ba5f9c462a23293750e29ba0a746b1 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 23 Feb 2021 16:05:22 +1100 Subject: [PATCH 0253/1788] Add a couple more test VMs. --- .github/workflows/selfhosted.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 83b5de525427..203da1953be1 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -16,7 +16,7 @@ jobs: # We use a matrix in two parts: firstly all of the VMs are tested with the # default config. "vm" corresponds to a label associated with the worker. matrix: - os: [dfly30, dfly48, dfly58, sol10, sol11, bbone, fbsd12] + os: [bbone, dfly30, dfly48, dfly58, fbsd6, fbsd7, fbsd12, sol10, sol11] configs: - default # Then we include any extra configs we want to test for specific VMs. @@ -24,6 +24,8 @@ jobs: - { os: dfly30, configs: without-openssl} - { os: dfly48, configs: pam } - { os: dfly58, configs: pam } + - { os: fbsd6, configs: pam } + - { os: fbsd7, configs: pam } - { os: fbsd12, configs: pam } - { os: sol10, configs: pam } - { os: sol11, configs: pam } From 0aeb508aaabc4818970c90831e3d21843c3c6d09 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 23 Feb 2021 21:50:18 +0000 Subject: [PATCH 0254/1788] upstream: Correct reference to signature algorithms as keys; from Jakub Jelen OpenBSD-Commit-ID: 36f7ecee86fc811aa0f8e21e7a872eee044b4be5 --- sshd_config.5 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sshd_config.5 b/sshd_config.5 index 76109ab40050..7ad2e5c3f5e9 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.325 2021/01/26 05:32:22 dtucker Exp $ -.Dd $Mdocdate: January 26 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.326 2021/02/23 21:50:18 djm Exp $ +.Dd $Mdocdate: February 23 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -1511,7 +1511,7 @@ sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp -The list of available key types may also be obtained using +The list of available signature algorithms may also be obtained using .Qq ssh -Q PubkeyAcceptedAlgorithms . .It Cm PubkeyAuthOptions Sets one or more public key authentication options. From 8b8b60542d6652b2c91e0ef9e9cc81bcb65e6b42 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 23 Feb 2021 21:55:08 +0000 Subject: [PATCH 0255/1788] upstream: lots more s/key types/signature algorithms/ mostly in HostbasedAcceptedAlgorithms and HostKeyAlgorithms; prompted by Jakub Jelen OpenBSD-Commit-ID: 3f719de4385b1a89e4323b2549c66aae050129cb --- ssh_config.5 | 40 ++++++++++++++++++++-------------------- sshd_config.5 | 24 ++++++++++++------------ 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index 8764e87b52e9..fc6668fdf103 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.347 2021/02/15 20:43:15 markus Exp $ -.Dd $Mdocdate: February 15 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.348 2021/02/23 21:55:08 djm Exp $ +.Dd $Mdocdate: February 23 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -801,20 +801,20 @@ will not be converted automatically, but may be manually hashed using .Xr ssh-keygen 1 . .It Cm HostbasedAcceptedAlgorithms -Specifies the key types that will be used for hostbased authentication -as a comma-separated list of patterns. +Specifies the signature algorithms that will be used for hostbased +authentication as a comma-separated list of patterns. Alternately if the specified list begins with a .Sq + -character, then the specified key types will be appended to the default set -instead of replacing them. +character, then the specified signature algorithms will be appended +to the default set instead of replacing them. If the specified list begins with a .Sq - -character, then the specified key types (including wildcards) will be removed -from the default set instead of replacing them. +character, then the specified signature algorithms (including wildcards) +will be removed from the default set instead of replacing them. If the specified list begins with a .Sq ^ -character, then the specified key types will be placed at the head of the -default set. +character, then the specified signature algorithms will be placed +at the head of the default set. The default for this option is: .Bd -literal -offset 3n ssh-ed25519-cert-v01@openssh.com, @@ -837,7 +837,7 @@ The .Fl Q option of .Xr ssh 1 -may be used to list supported key types. +may be used to list supported signature algorithms. This was formerly named HostbasedKeyTypes. .It Cm HostbasedAuthentication Specifies whether to try rhosts based authentication with public key @@ -848,20 +848,20 @@ or .Cm no (the default). .It Cm HostKeyAlgorithms -Specifies the host key algorithms +Specifies the host key signature algorithms that the client wants to use in order of preference. Alternately if the specified list begins with a .Sq + -character, then the specified key types will be appended to the default set -instead of replacing them. +character, then the specified signature algorithms will be appended to +the default set instead of replacing them. If the specified list begins with a .Sq - -character, then the specified key types (including wildcards) will be removed -from the default set instead of replacing them. +character, then the specified signature algorithms (including wildcards) +will be removed from the default set instead of replacing them. If the specified list begins with a .Sq ^ -character, then the specified key types will be placed at the head of the -default set. +character, then the specified signature algorithms will be placed +at the head of the default set. The default for this option is: .Bd -literal -offset 3n ssh-ed25519-cert-v01@openssh.com, @@ -883,7 +883,7 @@ rsa-sha2-512,rsa-sha2-256,ssh-rsa If hostkeys are known for the destination host then this default is modified to prefer their algorithms. .Pp -The list of available key types may also be obtained using +The list of available signature algorithms may also be obtained using .Qq ssh -Q HostKeyAlgorithms . .It Cm HostKeyAlias Specifies an alias that should be used instead of the @@ -1461,7 +1461,7 @@ sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp -The list of available key types may also be obtained using +The list of available signature algorithms may also be obtained using .Qq ssh -Q PubkeyAcceptedAlgorithms . .It Cm PubkeyAuthentication Specifies whether to try public key authentication. diff --git a/sshd_config.5 b/sshd_config.5 index 7ad2e5c3f5e9..c7e360fb4f96 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.326 2021/02/23 21:50:18 djm Exp $ +.\" $OpenBSD: sshd_config.5,v 1.327 2021/02/23 21:55:08 djm Exp $ .Dd $Mdocdate: February 23 2021 $ .Dt SSHD_CONFIG 5 .Os @@ -659,20 +659,20 @@ This facility is provided to assist with operation on multi homed machines. The default is .Cm yes . .It Cm HostbasedAcceptedAlgorithms -Specifies the key types that will be accepted for hostbased authentication -as a list of comma-separated patterns. +Specifies the signature algorithms that will be accepted for hostbased +authentication as a list of comma-separated patterns. Alternately if the specified list begins with a .Sq + -character, then the specified key types will be appended to the default set -instead of replacing them. +character, then the specified signature algorithms will be appended to +the default set instead of replacing them. If the specified list begins with a .Sq - -character, then the specified key types (including wildcards) will be removed -from the default set instead of replacing them. +character, then the specified signature algorithms (including wildcards) +will be removed from the default set instead of replacing them. If the specified list begins with a .Sq ^ -character, then the specified key types will be placed at the head of the -default set. +character, then the specified signature algorithms will be placed at +the head of the default set. The default for this option is: .Bd -literal -offset 3n ssh-ed25519-cert-v01@openssh.com, @@ -691,7 +691,7 @@ sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp -The list of available key types may also be obtained using +The list of available signature algorithms may also be obtained using .Qq ssh -Q HostbasedAcceptedAlgorithms . This was formerly named HostbasedAcceptedKeyTypes. .It Cm HostbasedAuthentication @@ -756,7 +756,7 @@ is specified, the location of the socket will be read from the .Ev SSH_AUTH_SOCK environment variable. .It Cm HostKeyAlgorithms -Specifies the host key algorithms +Specifies the host key signature algorithms that the server offers. The default for this option is: .Bd -literal -offset 3n @@ -776,7 +776,7 @@ sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512,rsa-sha2-256,ssh-rsa .Ed .Pp -The list of available key types may also be obtained using +The list of available signature algorithms may also be obtained using .Qq ssh -Q HostKeyAlgorithms . .It Cm IgnoreRhosts Specifies whether to ignore per-user From b9225c3a1c3f5827e31d5d64a71b8e0504a25619 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Wed, 24 Feb 2021 01:18:08 +0000 Subject: [PATCH 0256/1788] upstream: Put obsolete aliases for hostbasedalgorithms and pubkeyacceptedalgorithms after their current names so that the config-dump mode finds and uses the current names. Spotted by Phil Pennock. OpenBSD-Commit-ID: 5dd10e93cccfaff3aaaa09060c917adff04a9b15 --- readconf.c | 6 +++--- servconf.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/readconf.c b/readconf.c index b0a850977140..724974b708f9 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.351 2021/02/15 20:43:15 markus Exp $ */ +/* $OpenBSD: readconf.c,v 1.352 2021/02/24 01:18:08 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -308,10 +308,10 @@ static struct { { "revokedhostkeys", oRevokedHostKeys }, { "fingerprinthash", oFingerprintHash }, { "updatehostkeys", oUpdateHostkeys }, - { "hostbasedkeytypes", oHostbasedAcceptedAlgorithms }, /* obsolete */ { "hostbasedalgorithms", oHostbasedAcceptedAlgorithms }, - { "pubkeyacceptedkeytypes", oPubkeyAcceptedAlgorithms }, /* obsolete */ + { "hostbasedkeytypes", oHostbasedAcceptedAlgorithms }, /* obsolete */ { "pubkeyacceptedalgorithms", oPubkeyAcceptedAlgorithms }, + { "pubkeyacceptedkeytypes", oPubkeyAcceptedAlgorithms }, /* obsolete */ { "ignoreunknown", oIgnoreUnknown }, { "proxyjump", oProxyJump }, { "securitykeyprovider", oSecurityKeyProvider }, diff --git a/servconf.c b/servconf.c index b782ccbbad8a..9695583a0f85 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.376 2021/02/15 20:36:35 markus Exp $ */ +/* $OpenBSD: servconf.c,v 1.377 2021/02/24 01:18:08 dtucker Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -559,13 +559,13 @@ static struct { { "rhostsrsaauthentication", sDeprecated, SSHCFG_ALL }, { "hostbasedauthentication", sHostbasedAuthentication, SSHCFG_ALL }, { "hostbasedusesnamefrompacketonly", sHostbasedUsesNameFromPacketOnly, SSHCFG_ALL }, - { "hostbasedacceptedkeytypes", sHostbasedAcceptedAlgorithms, SSHCFG_ALL }, /* obsolete */ { "hostbasedacceptedalgorithms", sHostbasedAcceptedAlgorithms, SSHCFG_ALL }, + { "hostbasedacceptedkeytypes", sHostbasedAcceptedAlgorithms, SSHCFG_ALL }, /* obsolete */ { "hostkeyalgorithms", sHostKeyAlgorithms, SSHCFG_GLOBAL }, { "rsaauthentication", sDeprecated, SSHCFG_ALL }, { "pubkeyauthentication", sPubkeyAuthentication, SSHCFG_ALL }, - { "pubkeyacceptedkeytypes", sPubkeyAcceptedAlgorithms, SSHCFG_ALL }, /* obsolete */ { "pubkeyacceptedalgorithms", sPubkeyAcceptedAlgorithms, SSHCFG_ALL }, + { "pubkeyacceptedkeytypes", sPubkeyAcceptedAlgorithms, SSHCFG_ALL }, /* obsolete */ { "pubkeyauthoptions", sPubkeyAuthOptions, SSHCFG_ALL }, { "dsaauthentication", sPubkeyAuthentication, SSHCFG_GLOBAL }, /* alias */ #ifdef KRB5 From 2dd9870c16ddbd83740adeead5030d6840288c8f Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Wed, 24 Feb 2021 23:12:35 +0000 Subject: [PATCH 0257/1788] upstream: Rename pubkeyacceptedkeytypes to pubkeyacceptedalgorithms in test to match change to config-dump output. OpenBSD-Regress-ID: 74c9a4ad50306be873d032819d5e55c24eb74d5d --- regress/sshcfgparse.sh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/regress/sshcfgparse.sh b/regress/sshcfgparse.sh index fc72a0a71843..0025c165706c 100644 --- a/regress/sshcfgparse.sh +++ b/regress/sshcfgparse.sh @@ -1,4 +1,4 @@ -# $OpenBSD: sshcfgparse.sh,v 1.6 2019/12/21 02:33:07 djm Exp $ +# $OpenBSD: sshcfgparse.sh,v 1.7 2021/02/24 23:12:35 dtucker Exp $ # Placed in the Public Domain. tid="ssh config parse" @@ -62,34 +62,34 @@ test "$f" = "bar" || fail "user first match -l, expected 'bar' got '$f'" f=`${SSH} -GF $OBJ/ssh_config baz@host -o user=foo -l bar baz@host | awk '/^user /{print $2}'` test "$f" = "baz" || fail "user first match user@host, expected 'baz' got '$f'" -verbose "pubkeyacceptedkeytypes" +verbose "pubkeyacceptedalgorithms" # Default set -f=`${SSH} -GF none host | awk '/^pubkeyacceptedkeytypes /{print $2}'` +f=`${SSH} -GF none host | awk '/^pubkeyacceptedalgorithms /{print $2}'` expect_result_present "$f" "ssh-ed25519" "ssh-ed25519-cert-v01.*" expect_result_absent "$f" "ssh-dss" # Explicit override -f=`${SSH} -GF none -opubkeyacceptedkeytypes=ssh-ed25519 host | \ - awk '/^pubkeyacceptedkeytypes /{print $2}'` +f=`${SSH} -GF none -opubkeyacceptedalgorithms=ssh-ed25519 host | \ + awk '/^pubkeyacceptedalgorithms /{print $2}'` expect_result_present "$f" "ssh-ed25519" expect_result_absent "$f" "ssh-ed25519-cert-v01.*" "ssh-dss" # Removal from default set -f=`${SSH} -GF none -opubkeyacceptedkeytypes=-ssh-ed25519-cert* host | \ - awk '/^pubkeyacceptedkeytypes /{print $2}'` +f=`${SSH} -GF none -opubkeyacceptedalgorithms=-ssh-ed25519-cert* host | \ + awk '/^pubkeyacceptedalgorithms /{print $2}'` expect_result_present "$f" "ssh-ed25519" expect_result_absent "$f" "ssh-ed25519-cert-v01.*" "ssh-dss" -f=`${SSH} -GF none -opubkeyacceptedkeytypes=-ssh-ed25519 host | \ - awk '/^pubkeyacceptedkeytypes /{print $2}'` +f=`${SSH} -GF none -opubkeyacceptedalgorithms=-ssh-ed25519 host | \ + awk '/^pubkeyacceptedalgorithms /{print $2}'` expect_result_present "$f" "ssh-ed25519-cert-v01.*" expect_result_absent "$f" "ssh-ed25519" "ssh-dss" # Append to default set. # This is not tested when built !WITH_OPENSSL if [ "$dsa" = "1" ]; then - f=`${SSH} -GF none -opubkeyacceptedkeytypes=+ssh-dss-cert* host | \ - awk '/^pubkeyacceptedkeytypes /{print $2}'` + f=`${SSH} -GF none -opubkeyacceptedalgorithms=+ssh-dss-cert* host | \ + awk '/^pubkeyacceptedalgorithms /{print $2}'` expect_result_present "$f" "ssh-ed25519" "ssh-dss-cert-v01.*" expect_result_absent "$f" "ssh-dss" - f=`${SSH} -GF none -opubkeyacceptedkeytypes=+ssh-dss host | \ - awk '/^pubkeyacceptedkeytypes /{print $2}'` + f=`${SSH} -GF none -opubkeyacceptedalgorithms=+ssh-dss host | \ + awk '/^pubkeyacceptedalgorithms /{print $2}'` expect_result_present "$f" "ssh-ed25519" "ssh-ed25519-cert-v01.*" "ssh-dss" expect_result_absent "$f" "ssh-dss-cert-v01.*" fi From 9beeab8a37a49a9e3ffb1972fff6621ee5bd7a71 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Thu, 25 Feb 2021 03:27:34 +0000 Subject: [PATCH 0258/1788] upstream: s/PubkeyAcceptedKeyTypes/PubkeyAcceptedAlgorithms/ OpenBSD-Regress-ID: 3dbc005fa29f69dc23d97e433b6dffed6fe7cb69 --- regress/agent.sh | 6 +++--- regress/cert-hostkey.sh | 6 +++--- regress/cert-userkey.sh | 22 +++++++++++----------- regress/keytype.sh | 6 +++--- regress/limit-keytype.sh | 18 +++++++++--------- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/regress/agent.sh b/regress/agent.sh index a3ad1385f488..f187b6757201 100644 --- a/regress/agent.sh +++ b/regress/agent.sh @@ -1,4 +1,4 @@ -# $OpenBSD: agent.sh,v 1.19 2020/07/15 04:55:47 dtucker Exp $ +# $OpenBSD: agent.sh,v 1.20 2021/02/25 03:27:34 djm Exp $ # Placed in the Public Domain. tid="simple agent test" @@ -87,8 +87,8 @@ fi for t in ${SSH_KEYTYPES}; do trace "connect via agent using $t key" if [ "$t" = "ssh-dss" ]; then - echo "PubkeyAcceptedKeyTypes +ssh-dss" >> $OBJ/ssh_proxy - echo "PubkeyAcceptedKeyTypes +ssh-dss" >> $OBJ/sshd_proxy + echo "PubkeyAcceptedAlgorithms +ssh-dss" >> $OBJ/ssh_proxy + echo "PubkeyAcceptedAlgorithms +ssh-dss" >> $OBJ/sshd_proxy fi ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub -oIdentitiesOnly=yes \ somehost exit 52 diff --git a/regress/cert-hostkey.sh b/regress/cert-hostkey.sh index 097bf846346c..ebf6c903925c 100644 --- a/regress/cert-hostkey.sh +++ b/regress/cert-hostkey.sh @@ -1,4 +1,4 @@ -# $OpenBSD: cert-hostkey.sh,v 1.23 2020/01/03 03:02:26 djm Exp $ +# $OpenBSD: cert-hostkey.sh,v 1.24 2021/02/25 03:27:34 djm Exp $ # Placed in the Public Domain. tid="certified host keys" @@ -29,12 +29,12 @@ for i in `$SSH -Q key | maybe_filter_sk`; do done ( echo "HostKeyAlgorithms ${types}" - echo "PubkeyAcceptedKeyTypes *" + echo "PubkeyAcceptedAlgorithms *" ) >> $OBJ/ssh_proxy cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak ( echo "HostKeyAlgorithms *" - echo "PubkeyAcceptedKeyTypes *" + echo "PubkeyAcceptedAlgorithms *" ) >> $OBJ/sshd_proxy_bak HOSTS='localhost-with-alias,127.0.0.1,::1' diff --git a/regress/cert-userkey.sh b/regress/cert-userkey.sh index 91596fa789c0..baa6903ea268 100644 --- a/regress/cert-userkey.sh +++ b/regress/cert-userkey.sh @@ -1,4 +1,4 @@ -# $OpenBSD: cert-userkey.sh,v 1.25 2020/01/03 03:02:26 djm Exp $ +# $OpenBSD: cert-userkey.sh,v 1.26 2021/02/25 03:27:34 djm Exp $ # Placed in the Public Domain. tid="certified user keys" @@ -71,11 +71,11 @@ for ktype in $EXTRA_TYPES $PLAIN_TYPES ; do echo "AuthorizedPrincipalsFile " \ "$OBJ/authorized_principals_%u" echo "TrustedUserCAKeys $OBJ/user_ca_key.pub" - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" ) > $OBJ/sshd_proxy ( cat $OBJ/ssh_proxy_bak - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" ) > $OBJ/ssh_proxy # Missing authorized_principals @@ -149,11 +149,11 @@ for ktype in $EXTRA_TYPES $PLAIN_TYPES ; do ( cat $OBJ/sshd_proxy_bak echo "UsePrivilegeSeparation $privsep" - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" ) > $OBJ/sshd_proxy ( cat $OBJ/ssh_proxy_bak - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" ) > $OBJ/ssh_proxy # Wrong principals list @@ -204,12 +204,12 @@ basic_tests() { ( cat $OBJ/sshd_proxy_bak echo "UsePrivilegeSeparation $privsep" - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" echo "$extra_sshd" ) > $OBJ/sshd_proxy ( cat $OBJ/ssh_proxy_bak - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" ) > $OBJ/ssh_proxy ${SSH} -i $OBJ/cert_user_key_${ktype} \ @@ -224,7 +224,7 @@ basic_tests() { cat $OBJ/sshd_proxy_bak echo "UsePrivilegeSeparation $privsep" echo "RevokedKeys $OBJ/cert_user_key_revoked" - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" echo "$extra_sshd" ) > $OBJ/sshd_proxy cp $OBJ/cert_user_key_${ktype}.pub \ @@ -257,7 +257,7 @@ basic_tests() { ( cat $OBJ/sshd_proxy_bak echo "RevokedKeys $OBJ/user_ca_key.pub" - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" echo "$extra_sshd" ) > $OBJ/sshd_proxy ${SSH} -i $OBJ/cert_user_key_${ktype} -F $OBJ/ssh_proxy \ @@ -270,7 +270,7 @@ basic_tests() { verbose "$tid: $auth CA does not authenticate" ( cat $OBJ/sshd_proxy_bak - echo "PubkeyAcceptedKeyTypes ${t}" + echo "PubkeyAcceptedAlgorithms ${t}" echo "$extra_sshd" ) > $OBJ/sshd_proxy verbose "$tid: ensure CA key does not authenticate user" @@ -308,7 +308,7 @@ test_one() { echo > $OBJ/authorized_keys_$USER echo "TrustedUserCAKeys $OBJ/user_ca_key.pub" \ >> $OBJ/sshd_proxy - echo "PubkeyAcceptedKeyTypes ${t}*" \ + echo "PubkeyAcceptedAlgorithms ${t}*" \ >> $OBJ/sshd_proxy if test "x$auth_opt" != "x" ; then echo $auth_opt >> $OBJ/sshd_proxy diff --git a/regress/keytype.sh b/regress/keytype.sh index 20a8ceaf2253..f1c045183bd3 100644 --- a/regress/keytype.sh +++ b/regress/keytype.sh @@ -1,4 +1,4 @@ -# $OpenBSD: keytype.sh,v 1.10 2019/12/16 02:39:05 djm Exp $ +# $OpenBSD: keytype.sh,v 1.11 2021/02/25 03:27:34 djm Exp $ # Placed in the Public Domain. tid="login with different key types" @@ -58,13 +58,13 @@ for ut in $ktypes; do ( grep -v HostKey $OBJ/sshd_proxy_bak echo HostKey $OBJ/key.$ht - echo PubkeyAcceptedKeyTypes $user_type + echo PubkeyAcceptedAlgorithms $user_type echo HostKeyAlgorithms $host_type ) > $OBJ/sshd_proxy ( grep -v IdentityFile $OBJ/ssh_proxy_bak echo IdentityFile $OBJ/key.$ut - echo PubkeyAcceptedKeyTypes $user_type + echo PubkeyAcceptedAlgorithms $user_type echo HostKeyAlgorithms $host_type ) > $OBJ/ssh_proxy ( diff --git a/regress/limit-keytype.sh b/regress/limit-keytype.sh index 010a88cd7f29..7127de007cc6 100644 --- a/regress/limit-keytype.sh +++ b/regress/limit-keytype.sh @@ -1,4 +1,4 @@ -# $OpenBSD: limit-keytype.sh,v 1.9 2019/12/16 02:39:05 djm Exp $ +# $OpenBSD: limit-keytype.sh,v 1.10 2021/02/25 03:27:34 djm Exp $ # Placed in the Public Domain. tid="restrict pubkey type" @@ -69,7 +69,7 @@ prepare_config() { ) > $OBJ/sshd_proxy } -# Return the required parameter for PubkeyAcceptedKeyTypes corresponding to +# Return the required parameter for PubkeyAcceptedAlgorithms corresponding to # the supplied key type. keytype() { case "$1" in @@ -92,14 +92,14 @@ ${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed" # Allow plain Ed25519 and RSA. The certificate should fail. verbose "allow $ktype2,$ktype1" prepare_config \ - "PubkeyAcceptedKeyTypes `keytype $ktype2`,`keytype $ktype1`" + "PubkeyAcceptedAlgorithms `keytype $ktype2`,`keytype $ktype1`" ${SSH} $certopts proxy true && fatal "cert succeeded" ${SSH} $opts -i $OBJ/user_key1 proxy true || fatal "key1 failed" ${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed" # Allow Ed25519 only. verbose "allow $ktype1" -prepare_config "PubkeyAcceptedKeyTypes `keytype $ktype1`" +prepare_config "PubkeyAcceptedAlgorithms `keytype $ktype1`" ${SSH} $certopts proxy true && fatal "cert succeeded" ${SSH} $opts -i $OBJ/user_key1 proxy true || fatal "key1 failed" if [ "$ktype1" != "$ktype2" ]; then @@ -108,15 +108,15 @@ fi # Allow all certs. Plain keys should fail. verbose "allow cert only" -prepare_config "PubkeyAcceptedKeyTypes *-cert-v01@openssh.com" +prepare_config "PubkeyAcceptedAlgorithms *-cert-v01@openssh.com" ${SSH} $certopts proxy true || fatal "cert failed" ${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded" ${SSH} $opts -i $OBJ/user_key2 proxy true && fatal "key2 succeeded" # Allow RSA in main config, Ed25519 for non-existent user. verbose "match w/ no match" -prepare_config "PubkeyAcceptedKeyTypes `keytype $ktype2`" \ - "Match user x$USER" "PubkeyAcceptedKeyTypes +`keytype $ktype1`" +prepare_config "PubkeyAcceptedAlgorithms `keytype $ktype2`" \ + "Match user x$USER" "PubkeyAcceptedAlgorithms +`keytype $ktype1`" ${SSH} $certopts proxy true && fatal "cert succeeded" if [ "$ktype1" != "$ktype2" ]; then ${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded" @@ -125,8 +125,8 @@ ${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed" # Allow only DSA in main config, Ed25519 for user. verbose "match w/ matching" -prepare_config "PubkeyAcceptedKeyTypes `keytype $ktype4`" \ - "Match user $USER" "PubkeyAcceptedKeyTypes +`keytype $ktype1`" +prepare_config "PubkeyAcceptedAlgorithms `keytype $ktype4`" \ + "Match user $USER" "PubkeyAcceptedAlgorithms +`keytype $ktype1`" ${SSH} $certopts proxy true || fatal "cert failed" ${SSH} $opts -i $OBJ/user_key1 proxy true || fatal "key1 failed" ${SSH} $opts -i $OBJ/user_key4 proxy true && fatal "key4 succeeded" From 333e25f7bc43cee6e36f766e39dad6f9918b318c Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Tue, 29 Sep 2020 10:00:01 +0000 Subject: [PATCH 0259/1788] restorecon the correct directory if using different path for authorized_keys file SSH-Copy-ID-Upstream: 791a3df47b48412c726bff6f7b1d190721e65d51 --- contrib/ssh-copy-id | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index cd1835c1e223..3105e78befe9 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -256,7 +256,7 @@ installkeys_sh() { cat >> ${AUTH_KEY_FILE} || exit 1; if type restorecon >/dev/null 2>&1; then - restorecon -F .ssh ${AUTH_KEY_FILE}; + restorecon -F $(dirname "${AUTH_KEY_FILE}") ${AUTH_KEY_FILE}; fi EOF ) From 3594b3b015f6014591da88ba71bf6ff010be7411 Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Tue, 13 Oct 2020 14:12:58 +0200 Subject: [PATCH 0260/1788] use $AUTH_KEY_DIR, now that we have it since that was a change made since jjelen's commit was written also, quote the variables SSH-Copy-ID-Upstream: 588cd8e5cbf95f3443d92b9ab27c5d73ceaf6616 --- contrib/ssh-copy-id | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index 3105e78befe9..b8a67419b3ba 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -252,11 +252,11 @@ installkeys_sh() { cd; umask 077; mkdir -p "${AUTH_KEY_DIR}" && - { [ -z \`tail -1c ${AUTH_KEY_FILE} 2>/dev/null\` ] || echo >> ${AUTH_KEY_FILE}; } && - cat >> ${AUTH_KEY_FILE} || + { [ -z \`tail -1c ${AUTH_KEY_FILE} 2>/dev/null\` ] || echo >> "${AUTH_KEY_FILE}"; } && + cat >> "${AUTH_KEY_FILE}" || exit 1; if type restorecon >/dev/null 2>&1; then - restorecon -F $(dirname "${AUTH_KEY_FILE}") ${AUTH_KEY_FILE}; + restorecon -F "${AUTH_KEY_DIR}" "${AUTH_KEY_FILE}"; fi EOF ) From 983e05ef3b81329d76d6a802b39ad0d1f637c06c Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Tue, 29 Sep 2020 10:02:45 +0000 Subject: [PATCH 0261/1788] if unable to add a missing newline, fail SSH-Copy-ID-Upstream: 76b25e18f55499ea9edb4c4d6dc4a80bebc36d95 --- contrib/ssh-copy-id | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index b8a67419b3ba..5fee150763ab 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -252,7 +252,7 @@ installkeys_sh() { cd; umask 077; mkdir -p "${AUTH_KEY_DIR}" && - { [ -z \`tail -1c ${AUTH_KEY_FILE} 2>/dev/null\` ] || echo >> "${AUTH_KEY_FILE}"; } && + { [ -z \`tail -1c ${AUTH_KEY_FILE} 2>/dev/null\` ] || echo >> "${AUTH_KEY_FILE}" || exit 1; } && cat >> "${AUTH_KEY_FILE}" || exit 1; if type restorecon >/dev/null 2>&1; then From 476ac8e9d33dbf96ef97aab812b8d7089d0cdc24 Mon Sep 17 00:00:00 2001 From: Philip Hands Date: Wed, 24 Feb 2021 23:43:16 +0100 Subject: [PATCH 0262/1788] tidy the $INSTALLKEY_SH code layout a little SSH-Copy-ID-Upstream: 78178aa5017222773e4c23d9001391eeaeca8983 --- contrib/ssh-copy-id | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id index 5fee150763ab..cd122def30a1 100644 --- a/contrib/ssh-copy-id +++ b/contrib/ssh-copy-id @@ -252,13 +252,13 @@ installkeys_sh() { cd; umask 077; mkdir -p "${AUTH_KEY_DIR}" && - { [ -z \`tail -1c ${AUTH_KEY_FILE} 2>/dev/null\` ] || echo >> "${AUTH_KEY_FILE}" || exit 1; } && - cat >> "${AUTH_KEY_FILE}" || - exit 1; + { [ -z \`tail -1c ${AUTH_KEY_FILE} 2>/dev/null\` ] || + echo >> "${AUTH_KEY_FILE}" || exit 1; } && + cat >> "${AUTH_KEY_FILE}" || exit 1; if type restorecon >/dev/null 2>&1; then - restorecon -F "${AUTH_KEY_DIR}" "${AUTH_KEY_FILE}"; + restorecon -F "${AUTH_KEY_DIR}" "${AUTH_KEY_FILE}"; fi -EOF + EOF ) # to defend against quirky remote shells: use 'exec sh -c' to get POSIX; From fd9fa76a344118fe1ef10b9a6c9e85d39599e9a8 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 26 Feb 2021 01:15:10 +1100 Subject: [PATCH 0263/1788] Remove macos-11.0 from the test target list. It has been consistently failing for the past few days with a github actions internal error. --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 2279e109ebba..9a7a645aa8ec 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: # First we test all OSes in the default configuration. - os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, macos-10.15, macos-11.0] + os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, macos-10.15] configs: [default] # Then we include any extra configs we want to test for specific VMs. # Valgrind slows things down quite a bit, so start them first. From 473201783f732ca8b0ec528b56aa55fa0d8cf717 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 26 Feb 2021 00:16:58 +0000 Subject: [PATCH 0264/1788] upstream: a bit more debugging behind #ifdef DEBUG_SK OpenBSD-Commit-ID: d9fbce14945721061cb322f0084c2165d33d1993 --- ssh-sk.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ssh-sk.c b/ssh-sk.c index b9f2312822b8..d254e77f9397 100644 --- a/ssh-sk.c +++ b/ssh-sk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-sk.c,v 1.34 2021/02/18 02:13:58 djm Exp $ */ +/* $OpenBSD: ssh-sk.c,v 1.35 2021/02/26 00:16:58 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -662,7 +662,12 @@ sshsk_sign(const char *provider_path, struct sshkey *key, r = SSH_ERR_INVALID_FORMAT; /* XXX sshsk_open return code? */ goto out; } - +#ifdef DEBUG_SK + fprintf(stderr, "%s: sk_flags = 0x%02x, sk_application = \"%s\"\n", + __func__, key->sk_flags, key->sk_application); + fprintf(stderr, "%s: sk_key_handle:\n", __func__); + sshbuf_dump(key->sk_key_handle, stderr); +#endif if ((r = skp->sk_sign(alg, data, datalen, key->sk_application, sshbuf_ptr(key->sk_key_handle), sshbuf_len(key->sk_key_handle), key->sk_flags, pin, opts, &resp)) != 0) { From 24a3a67bd7421740d08803b84bd784e764107928 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 26 Feb 2021 11:49:19 +1100 Subject: [PATCH 0265/1788] Remove macos-11.00 PAM test target too. These are failing apparently due to some kind of infrastructure problem, making it look like every commit is busted. --- .github/workflows/c-cpp.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 9a7a645aa8ec..c2e9c5327ecb 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -35,7 +35,6 @@ jobs: - { os: ubuntu-16.04, configs: pam } - { os: ubuntu-16.04, configs: kitchensink } - { os: macos-10.15, configs: pam } - - { os: macos-11.0, configs: pam } runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 From 1fe4d70df94d3bcc2b35fd57cad6b5fc4b2d7b16 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 26 Feb 2021 04:18:42 +0000 Subject: [PATCH 0266/1788] upstream: remove this KEX fuzzer; it's awkward to use and doesn't play nice with popular fuzzing drivers like libfuzzer. AFAIK nobody has used it but me. OpenBSD-Regress-ID: cad919522b3ce90c147c95abaf81b0492ac296c9 --- Makefile.in | 14 - regress/misc/Makefile | 2 +- regress/misc/kexfuzz/Makefile | 101 -------- regress/misc/kexfuzz/README | 34 --- regress/misc/kexfuzz/kexfuzz.c | 453 --------------------------------- 5 files changed, 1 insertion(+), 603 deletions(-) delete mode 100644 regress/misc/kexfuzz/Makefile delete mode 100644 regress/misc/kexfuzz/README delete mode 100644 regress/misc/kexfuzz/kexfuzz.c diff --git a/Makefile.in b/Makefile.in index 76d3197fc361..e3cd296cabb0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -289,8 +289,6 @@ clean: regressclean rm -f regress/unittests/match/test_match$(EXEEXT) rm -f regress/unittests/utf8/*.o rm -f regress/unittests/utf8/test_utf8$(EXEEXT) - rm -f regress/misc/kexfuzz/*.o - rm -f regress/misc/kexfuzz/kexfuzz$(EXEEXT) rm -f regress/misc/sk-dummy/*.o rm -f regress/misc/sk-dummy/*.lo rm -f regress/misc/sk-dummy/sk-dummy.so @@ -324,8 +322,6 @@ distclean: regressclean rm -f regress/unittests/match/test_match rm -f regress/unittests/utf8/*.o rm -f regress/unittests/utf8/test_utf8 - rm -f regress/misc/kexfuzz/*.o - rm -f regress/misc/kexfuzz/kexfuzz$(EXEEXT) (cd openbsd-compat && $(MAKE) distclean) if test -d pkg ; then \ rm -fr pkg ; \ @@ -497,7 +493,6 @@ regress-prep: $(MKDIR_P) `pwd`/regress/unittests/kex $(MKDIR_P) `pwd`/regress/unittests/match $(MKDIR_P) `pwd`/regress/unittests/utf8 - $(MKDIR_P) `pwd`/regress/misc/kexfuzz $(MKDIR_P) `pwd`/regress/misc/sk-dummy [ -f `pwd`/regress/Makefile ] || \ ln -s `cd $(srcdir) && pwd`/regress/Makefile `pwd`/regress/Makefile @@ -635,14 +630,6 @@ regress/unittests/utf8/test_utf8$(EXEEXT): \ regress/unittests/test_helper/libtest_helper.a \ -lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS) -MISC_KEX_FUZZ_OBJS=\ - regress/misc/kexfuzz/kexfuzz.o \ - $(SKOBJS) - -regress/misc/kexfuzz/kexfuzz$(EXEEXT): ${MISC_KEX_FUZZ_OBJS} libssh.a - $(LD) -o $@ $(LDFLAGS) $(MISC_KEX_FUZZ_OBJS) \ - -lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS) - # These all need to be compiled -fPIC, so they are treated differently. SK_DUMMY_OBJS=\ regress/misc/sk-dummy/sk-dummy.lo \ @@ -676,7 +663,6 @@ regress-unit-binaries: regress-prep $(REGRESSLIBS) \ regress/unittests/kex/test_kex$(EXEEXT) \ regress/unittests/match/test_match$(EXEEXT) \ regress/unittests/utf8/test_utf8$(EXEEXT) \ - regress/misc/kexfuzz/kexfuzz$(EXEEXT) tests: file-tests t-exec interop-tests unit echo all tests passed diff --git a/regress/misc/Makefile b/regress/misc/Makefile index cf95f265ce47..b9149f2879eb 100644 --- a/regress/misc/Makefile +++ b/regress/misc/Makefile @@ -1,3 +1,3 @@ -SUBDIR= kexfuzz sk-dummy +SUBDIR= sk-dummy .include diff --git a/regress/misc/kexfuzz/Makefile b/regress/misc/kexfuzz/Makefile deleted file mode 100644 index 18b70aa74f5d..000000000000 --- a/regress/misc/kexfuzz/Makefile +++ /dev/null @@ -1,101 +0,0 @@ -# $OpenBSD: Makefile,v 1.10 2021/01/09 12:31:46 dtucker Exp $ - -.include -.include - -# XXX detect from ssh binary? -SSH1?= no -OPENSSL?= yes - -PROG= kexfuzz -SRCS= kexfuzz.c - -SSHREL=../../../../../usr.bin/ssh -.PATH: ${.CURDIR}/${SSHREL} -# From usr.bin/ssh -SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c -SRCS+=atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c ssh-dss.c -SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c -SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c -SRCS+=addr.c addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c -SRCS+=compat.c ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c -SRCS+=cipher-chachapoly.c chacha.c poly1305.c utf8.c -SRCS+=sshbuf-io.c ssh-ecdsa-sk.c ssh-ed25519-sk.c msg.c ssh-sk-client.c - -SRCS+= kex.c -SRCS+= dh.c -SRCS+= kexdh.c -SRCS+= kexecdh.c -SRCS+= kexgex.c -SRCS+= kexgexc.c -SRCS+= kexgexs.c -SRCS+= kexc25519.c -SRCS+= smult_curve25519_ref.c -SRCS+= kexgen.c -SRCS+= kexsntrup761x25519.c -SRCS+= sntrup761.c - -SRCS+=digest-openssl.c -#SRCS+=digest-libc.c - -NOMAN= 1 - -.if (${OPENSSL:L} == "yes") -CFLAGS+= -DWITH_OPENSSL -.else -# SSH v.1 requires OpenSSL. -SSH1= no -.endif - -.if (${SSH1:L} == "yes") -CFLAGS+= -DWITH_SSH1 -.endif - -LDADD+= -lfido2 -lcbor -lusbhid -DPADD+= ${LIBFIDO2} ${LIBCBOR} ${LIBUSBHID} - -# enable warnings -WARNINGS=Yes - -DEBUG=-g -CFLAGS+= -fstack-protector-all -CDIAGFLAGS= -Wall -CDIAGFLAGS+= -Wextra -CDIAGFLAGS+= -Werror -CDIAGFLAGS+= -Wchar-subscripts -CDIAGFLAGS+= -Wcomment -CDIAGFLAGS+= -Wformat -CDIAGFLAGS+= -Wformat-security -CDIAGFLAGS+= -Wimplicit -CDIAGFLAGS+= -Winline -CDIAGFLAGS+= -Wmissing-declarations -CDIAGFLAGS+= -Wmissing-prototypes -CDIAGFLAGS+= -Wparentheses -CDIAGFLAGS+= -Wpointer-arith -CDIAGFLAGS+= -Wreturn-type -CDIAGFLAGS+= -Wshadow -CDIAGFLAGS+= -Wsign-compare -CDIAGFLAGS+= -Wstrict-aliasing -CDIAGFLAGS+= -Wstrict-prototypes -CDIAGFLAGS+= -Wswitch -CDIAGFLAGS+= -Wtrigraphs -CDIAGFLAGS+= -Wuninitialized -CDIAGFLAGS+= -Wunused -CDIAGFLAGS+= -Wno-unused-parameter -.if ${COMPILER_VERSION:L} != "gcc3" -CDIAGFLAGS+= -Wold-style-definition -.endif - - -CFLAGS+=-I${.CURDIR}/${SSHREL} - -LDADD+= -lutil -lz -DPADD+= ${LIBUTIL} ${LIBZ} - -.if (${OPENSSL:L} == "yes") -LDADD+= -lcrypto -DPADD+= ${LIBCRYPTO} -.endif - -.include - diff --git a/regress/misc/kexfuzz/README b/regress/misc/kexfuzz/README deleted file mode 100644 index 504c26f3bed3..000000000000 --- a/regress/misc/kexfuzz/README +++ /dev/null @@ -1,34 +0,0 @@ -This is a harness to help with fuzzing KEX. - -To use it, you first set it to count packets in each direction: - -./kexfuzz -K diffie-hellman-group1-sha1 -k host_ed25519_key -c -S2C: 29 -C2S: 31 - -Then get it to record a particular packet (in this case the 4th -packet from client->server): - -./kexfuzz -K diffie-hellman-group1-sha1 -k host_ed25519_key \ - -d -D C2S -i 3 -f packet_3 - -Fuzz the packet somehow: - -dd if=/dev/urandom of=packet_3 bs=32 count=1 # Just for example - -Then re-run the key exchange substituting the modified packet in -its original sequence: - -./kexfuzz -K diffie-hellman-group1-sha1 -k host_ed25519_key \ - -r -D C2S -i 3 -f packet_3 - -A comprehensive KEX fuzz run would fuzz every packet in both -directions for each key exchange type and every hostkey type. -This will take some time. - -Limitations: kexfuzz can't change the ordering of packets at -present. It is limited to replacing individual packets with -fuzzed variants with the same type. It really should allow -insertion, deletion on replacement of packets too. - -$OpenBSD: README,v 1.3 2017/10/20 02:13:41 djm Exp $ diff --git a/regress/misc/kexfuzz/kexfuzz.c b/regress/misc/kexfuzz/kexfuzz.c deleted file mode 100644 index 56697c9189e5..000000000000 --- a/regress/misc/kexfuzz/kexfuzz.c +++ /dev/null @@ -1,453 +0,0 @@ -/* $OpenBSD: kexfuzz.c,v 1.6 2020/01/26 00:09:50 djm Exp $ */ -/* - * Fuzz harness for KEX code - * - * Placed in the public domain - */ - -#include "includes.h" - -#include -#include -#include -#ifdef HAVE_STDINT_H -# include -#endif -#include -#include -#include -#include -#ifdef HAVE_ERR_H -# include -#endif - -#include "ssherr.h" -#include "ssh_api.h" -#include "sshbuf.h" -#include "packet.h" -#include "myproposal.h" -#include "authfile.h" -#include "log.h" - -void kex_tests(void); -static int do_debug = 0; - -enum direction { S2C, C2S }; - -struct hook_ctx { - struct ssh *client, *server, *server2; - int *c2s, *s2c; - int trigger_direction, packet_index; - const char *dump_path; - struct sshbuf *replace_data; -}; - -static int -packet_hook(struct ssh *ssh, struct sshbuf *packet, u_char *typep, void *_ctx) -{ - struct hook_ctx *ctx = (struct hook_ctx *)_ctx; - int mydirection = ssh == ctx->client ? S2C : C2S; - int *packet_count = mydirection == S2C ? ctx->s2c : ctx->c2s; - FILE *dumpfile; - int r; - - if (do_debug) { - printf("%s packet %d type %u:\n", - mydirection == S2C ? "s2c" : "c2s", - *packet_count, *typep); - sshbuf_dump(packet, stdout); - } - if (mydirection == ctx->trigger_direction && - ctx->packet_index == *packet_count) { - if (ctx->replace_data != NULL) { - sshbuf_reset(packet); - /* Type is first byte of packet */ - if ((r = sshbuf_get_u8(ctx->replace_data, - typep)) != 0 || - (r = sshbuf_putb(packet, ctx->replace_data)) != 0) - return r; - if (do_debug) { - printf("***** replaced packet type %u\n", - *typep); - sshbuf_dump(packet, stdout); - } - } else if (ctx->dump_path != NULL) { - if ((dumpfile = fopen(ctx->dump_path, "w+")) == NULL) - err(1, "fopen %s", ctx->dump_path); - /* Write { type, packet } */ - if (fwrite(typep, 1, 1, dumpfile) != 1) - err(1, "fwrite type %s", ctx->dump_path); - if (sshbuf_len(packet) != 0 && - fwrite(sshbuf_ptr(packet), sshbuf_len(packet), - 1, dumpfile) != 1) - err(1, "fwrite body %s", ctx->dump_path); - if (do_debug) { - printf("***** dumped packet type %u len %zu\n", - *typep, sshbuf_len(packet)); - } - fclose(dumpfile); - /* No point in continuing */ - exit(0); - } - } - (*packet_count)++; - return 0; -} - -static int -do_send_and_receive(struct ssh *from, struct ssh *to) -{ - u_char type; - size_t len; - const u_char *buf; - int r; - - for (;;) { - if ((r = ssh_packet_next(from, &type)) != 0) { - fprintf(stderr, "ssh_packet_next: %s\n", ssh_err(r)); - return r; - } - - if (type != 0) - return 0; - buf = ssh_output_ptr(from, &len); - if (len == 0) - return 0; - if ((r = ssh_input_append(to, buf, len)) != 0) { - debug("ssh_input_append: %s", ssh_err(r)); - return r; - } - if ((r = ssh_output_consume(from, len)) != 0) { - debug("ssh_output_consume: %s", ssh_err(r)); - return r; - } - } -} - -/* Minimal test_helper.c scaffholding to make this standalone */ -const char *in_test = NULL; -#define TEST_START(a) \ - do { \ - in_test = (a); \ - if (do_debug) \ - fprintf(stderr, "test %s starting\n", in_test); \ - } while (0) -#define TEST_DONE() \ - do { \ - if (do_debug) \ - fprintf(stderr, "test %s done\n", \ - in_test ? in_test : "???"); \ - in_test = NULL; \ - } while(0) -#define ASSERT_INT_EQ(a, b) \ - do { \ - if ((int)(a) != (int)(b)) { \ - fprintf(stderr, "%s %s:%d " \ - "%s (%d) != expected %s (%d)\n", \ - in_test ? in_test : "(none)", \ - __func__, __LINE__, #a, (int)(a), #b, (int)(b)); \ - exit(2); \ - } \ - } while (0) -#define ASSERT_INT_GE(a, b) \ - do { \ - if ((int)(a) < (int)(b)) { \ - fprintf(stderr, "%s %s:%d " \ - "%s (%d) < expected %s (%d)\n", \ - in_test ? in_test : "(none)", \ - __func__, __LINE__, #a, (int)(a), #b, (int)(b)); \ - exit(2); \ - } \ - } while (0) -#define ASSERT_PTR_NE(a, b) \ - do { \ - if ((a) == (b)) { \ - fprintf(stderr, "%s %s:%d " \ - "%s (%p) != expected %s (%p)\n", \ - in_test ? in_test : "(none)", \ - __func__, __LINE__, #a, (a), #b, (b)); \ - exit(2); \ - } \ - } while (0) - - -static void -run_kex(struct ssh *client, struct ssh *server) -{ - int r = 0; - - while (!server->kex->done || !client->kex->done) { - if ((r = do_send_and_receive(server, client)) != 0) { - debug("do_send_and_receive S2C: %s", ssh_err(r)); - break; - } - if ((r = do_send_and_receive(client, server)) != 0) { - debug("do_send_and_receive C2S: %s", ssh_err(r)); - break; - } - } - if (do_debug) - printf("done: %s\n", ssh_err(r)); - ASSERT_INT_EQ(r, 0); - ASSERT_INT_EQ(server->kex->done, 1); - ASSERT_INT_EQ(client->kex->done, 1); -} - -static void -do_kex_with_key(const char *kex, struct sshkey *prvkey, int *c2s, int *s2c, - int direction, int packet_index, - const char *dump_path, struct sshbuf *replace_data) -{ - struct ssh *client = NULL, *server = NULL, *server2 = NULL; - struct sshkey *pubkey = NULL; - struct sshbuf *state; - struct kex_params kex_params; - char *myproposal[PROPOSAL_MAX] = { KEX_CLIENT }; - char *keyname = NULL; - struct hook_ctx hook_ctx; - - TEST_START("sshkey_from_private"); - ASSERT_INT_EQ(sshkey_from_private(prvkey, &pubkey), 0); - TEST_DONE(); - - TEST_START("ssh_init"); - memcpy(kex_params.proposal, myproposal, sizeof(myproposal)); - if (kex != NULL) - kex_params.proposal[PROPOSAL_KEX_ALGS] = strdup(kex); - keyname = strdup(sshkey_ssh_name(prvkey)); - ASSERT_PTR_NE(keyname, NULL); - kex_params.proposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = keyname; - ASSERT_INT_EQ(ssh_init(&client, 0, &kex_params), 0); - ASSERT_INT_EQ(ssh_init(&server, 1, &kex_params), 0); - ASSERT_INT_EQ(ssh_init(&server2, 1, NULL), 0); - ASSERT_PTR_NE(client, NULL); - ASSERT_PTR_NE(server, NULL); - ASSERT_PTR_NE(server2, NULL); - TEST_DONE(); - - hook_ctx.c2s = c2s; - hook_ctx.s2c = s2c; - hook_ctx.trigger_direction = direction; - hook_ctx.packet_index = packet_index; - hook_ctx.dump_path = dump_path; - hook_ctx.replace_data = replace_data; - hook_ctx.client = client; - hook_ctx.server = server; - hook_ctx.server2 = server2; - ssh_packet_set_input_hook(client, packet_hook, &hook_ctx); - ssh_packet_set_input_hook(server, packet_hook, &hook_ctx); - ssh_packet_set_input_hook(server2, packet_hook, &hook_ctx); - - TEST_START("ssh_add_hostkey"); - ASSERT_INT_EQ(ssh_add_hostkey(server, prvkey), 0); - ASSERT_INT_EQ(ssh_add_hostkey(client, pubkey), 0); - TEST_DONE(); - - TEST_START("kex"); - run_kex(client, server); - TEST_DONE(); - - TEST_START("rekeying client"); - ASSERT_INT_EQ(kex_send_kexinit(client), 0); - run_kex(client, server); - TEST_DONE(); - - TEST_START("rekeying server"); - ASSERT_INT_EQ(kex_send_kexinit(server), 0); - run_kex(client, server); - TEST_DONE(); - - TEST_START("ssh_packet_get_state"); - state = sshbuf_new(); - ASSERT_PTR_NE(state, NULL); - ASSERT_INT_EQ(ssh_packet_get_state(server, state), 0); - ASSERT_INT_GE(sshbuf_len(state), 1); - TEST_DONE(); - - TEST_START("ssh_packet_set_state"); - ASSERT_INT_EQ(ssh_add_hostkey(server2, prvkey), 0); - kex_free(server2->kex); /* XXX or should ssh_packet_set_state()? */ - ASSERT_INT_EQ(ssh_packet_set_state(server2, state), 0); - ASSERT_INT_EQ(sshbuf_len(state), 0); - sshbuf_free(state); - ASSERT_PTR_NE(server2->kex, NULL); - /* XXX we need to set the callbacks */ -#ifdef WITH_OPENSSL - server2->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server; - server2->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server; - server2->kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_server; - server2->kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_server; - server2->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server; - server2->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; - server2->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; -# ifdef OPENSSL_HAS_ECC - server2->kex->kex[KEX_ECDH_SHA2] = kex_gen_server; -# endif -#endif - server2->kex->kex[KEX_C25519_SHA256] = kex_gen_server; - server2->kex->load_host_public_key = server->kex->load_host_public_key; - server2->kex->load_host_private_key = server->kex->load_host_private_key; - server2->kex->sign = server->kex->sign; - TEST_DONE(); - - TEST_START("rekeying server2"); - ASSERT_INT_EQ(kex_send_kexinit(server2), 0); - run_kex(client, server2); - ASSERT_INT_EQ(kex_send_kexinit(client), 0); - run_kex(client, server2); - TEST_DONE(); - - TEST_START("cleanup"); - sshkey_free(pubkey); - ssh_free(client); - ssh_free(server); - ssh_free(server2); - free(keyname); - TEST_DONE(); -} - -static void -usage(void) -{ - fprintf(stderr, - "Usage: kexfuzz [-hcdrv] [-D direction] [-f data_file]\n" - " [-K kex_alg] [-k private_key] [-i packet_index]\n" - "\n" - "Options:\n" - " -h Display this help\n" - " -c Count packets sent during KEX\n" - " -d Dump mode: record KEX packet to data file\n" - " -r Replace mode: replace packet with data file\n" - " -v Turn on verbose logging\n" - " -D S2C|C2S Packet direction for replacement or dump\n" - " -f data_file Path to data file for replacement or dump\n" - " -K kex_alg Name of KEX algorithm to test (see below)\n" - " -k private_key Path to private key file\n" - " -i packet_index Index of packet to replace or dump (from 0)\n" - "\n" - "Available KEX algorithms: %s\n", kex_alg_list(' ')); -} - -static void -badusage(const char *bad) -{ - fprintf(stderr, "Invalid options\n"); - fprintf(stderr, "%s\n", bad); - usage(); - exit(1); -} - -int -main(int argc, char **argv) -{ - int ch, fd, r; - int count_flag = 0, dump_flag = 0, replace_flag = 0; - int packet_index = -1, direction = -1; - int s2c = 0, c2s = 0; /* packet counts */ - const char *kex = NULL, *kpath = NULL, *data_path = NULL; - struct sshkey *key = NULL; - struct sshbuf *replace_data = NULL; - - setvbuf(stdout, NULL, _IONBF, 0); - while ((ch = getopt(argc, argv, "hcdrvD:f:K:k:i:")) != -1) { - switch (ch) { - case 'h': - usage(); - return 0; - case 'c': - count_flag = 1; - break; - case 'd': - dump_flag = 1; - break; - case 'r': - replace_flag = 1; - break; - case 'v': - do_debug = 1; - break; - - case 'D': - if (strcasecmp(optarg, "s2c") == 0) - direction = S2C; - else if (strcasecmp(optarg, "c2s") == 0) - direction = C2S; - else - badusage("Invalid direction (-D)"); - break; - case 'f': - data_path = optarg; - break; - case 'K': - kex = optarg; - break; - case 'k': - kpath = optarg; - break; - case 'i': - packet_index = atoi(optarg); - if (packet_index < 0) - badusage("Invalid packet index"); - break; - default: - badusage("unsupported flag"); - } - } - argc -= optind; - argv += optind; - - log_init(argv[0], do_debug ? SYSLOG_LEVEL_DEBUG3 : SYSLOG_LEVEL_INFO, - SYSLOG_FACILITY_USER, 1); - - /* Must select a single mode */ - if ((count_flag + dump_flag + replace_flag) != 1) - badusage("Must select one mode: -c, -d or -r"); - /* KEX type is mandatory */ - if (kex == NULL || !kex_names_valid(kex) || strchr(kex, ',') != NULL) - badusage("Missing or invalid kex type (-K flag)"); - /* Valid key is mandatory */ - if (kpath == NULL) - badusage("Missing private key (-k flag)"); - if ((fd = open(kpath, O_RDONLY)) == -1) - err(1, "open %s", kpath); - if ((r = sshkey_load_private_type_fd(fd, KEY_UNSPEC, NULL, - &key, NULL)) != 0) - errx(1, "Unable to load key %s: %s", kpath, ssh_err(r)); - close(fd); - /* XXX check that it is a private key */ - /* XXX support certificates */ - if (key == NULL || key->type == KEY_UNSPEC) - badusage("Invalid key file (-k flag)"); - - /* Replace (fuzz) mode */ - if (replace_flag) { - if (packet_index == -1 || direction == -1 || data_path == NULL) - badusage("Replace (-r) mode must specify direction " - "(-D) packet index (-i) and data path (-f)"); - if ((r = sshbuf_load_file(data_path, &replace_data)) != 0) - errx(1, "read %s: %s", data_path, ssh_err(r)); - } - - /* Dump mode */ - if (dump_flag) { - if (packet_index == -1 || direction == -1 || data_path == NULL) - badusage("Dump (-d) mode must specify direction " - "(-D), packet index (-i) and data path (-f)"); - } - - /* Count mode needs no further flags */ - - do_kex_with_key(kex, key, &c2s, &s2c, - direction, packet_index, - dump_flag ? data_path : NULL, - replace_flag ? replace_data : NULL); - sshkey_free(key); - sshbuf_free(replace_data); - - if (count_flag) { - printf("S2C: %d\n", s2c); - printf("C2S: %d\n", c2s); - } - - return 0; -} From 5a878a71a3528c2626aa1d331934fd964782d41c Mon Sep 17 00:00:00 2001 From: Dmitrii Turlupov Date: Thu, 4 Feb 2021 16:27:31 +0300 Subject: [PATCH 0267/1788] ssh: optional bind interface if bind address specified. Allows the -b and -B options to be used together. For example, when the interface is in the VRF. --- sshconnect.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sshconnect.c b/sshconnect.c index 74f9e76702f0..8666bd6edb22 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -390,6 +390,12 @@ ssh_create_socket(struct addrinfo *ai) } memcpy(&bindaddr, res->ai_addr, res->ai_addrlen); bindaddrlen = res->ai_addrlen; + + /*'-B' option*/ + if (options.bind_interface != NULL) { + if (setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, options.bind_interface, strlen(options.bind_interface) + 1)) + debug("error: setsockopt SO_BINDTODEVICE"); + } } else if (options.bind_interface != NULL) { #ifdef HAVE_IFADDRS_H if ((r = getifaddrs(&ifaddrs)) != 0) { From 493339a940b13be6071629c3c2dd5a3b6fc17023 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 26 Feb 2021 15:45:38 +1100 Subject: [PATCH 0268/1788] detech BSD libc hash functions in libbsd / libmd Some Linux distributions are shipping the BSD-style hashing functions (e.g. SHA256Update) in libbsd and/or libmd. Detect this situation to avoid header/replacement clashes later. ok dtucker@ --- configure.ac | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configure.ac b/configure.ac index fe2257314dfe..1c2757ca5de6 100644 --- a/configure.ac +++ b/configure.ac @@ -1446,6 +1446,10 @@ AC_CHECK_FUNCS([fmt_scaled scan_scaled login logout openpty updwtmp logwtmp]) AC_SEARCH_LIBS([inet_ntop], [resolv nsl]) AC_SEARCH_LIBS([gethostbyname], [resolv nsl]) +# Some Linux distribtions ship the BSD libc hashing functions in +# separate libraries. +AC_SEARCH_LIBS([SHA256Update], [md bsd]) + # "Particular Function Checks" # see https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Functions.html AC_FUNC_STRFTIME From 6248b86074804983e8f7a2058856a516dbfe2924 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 26 Feb 2021 16:45:50 +1100 Subject: [PATCH 0269/1788] Revert "ssh: optional bind interface if bind address specified." This reverts commit 5a878a71a3528c2626aa1d331934fd964782d41c. Apologies - I accidentally pushed this. --- sshconnect.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sshconnect.c b/sshconnect.c index 8666bd6edb22..74f9e76702f0 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -390,12 +390,6 @@ ssh_create_socket(struct addrinfo *ai) } memcpy(&bindaddr, res->ai_addr, res->ai_addrlen); bindaddrlen = res->ai_addrlen; - - /*'-B' option*/ - if (options.bind_interface != NULL) { - if (setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, options.bind_interface, strlen(options.bind_interface) + 1)) - debug("error: setsockopt SO_BINDTODEVICE"); - } } else if (options.bind_interface != NULL) { #ifdef HAVE_IFADDRS_H if ((r = getifaddrs(&ifaddrs)) != 0) { From b7c6ee7b437d9adfd19ef49d6c0f19f13f26f9b3 Mon Sep 17 00:00:00 2001 From: "Jeffrey H. Johnson" <61629094+johnsonjh@users.noreply.github.com> Date: Sat, 27 Feb 2021 01:04:58 +0000 Subject: [PATCH 0270/1788] Fix punctuatio and typo in README.md. Some very minor fixes, missing 's' and punctuation. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f6034713e6ba..d5f7065e7b20 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Stable release tarballs are available from a number of [download mirrors](https: Portable OpenSSH is built using autoconf and make. It requires a working C compiler, standard library and headers, and [zlib](https://www.zlib.net/). ``libcrypto`` from either [LibreSSL](https://www.libressl.org/) or [OpenSSL](https://www.openssl.org) may also be used, but OpenSSH may be built without it supporting a subset of crypto algorithms. -FIDO security token support need [libfido2](https://github.com/Yubico/libfido2) and its dependencies. Also, certain platforms and build-time options may require additional dependencies, see README.platform for details. +FIDO security token support needs [libfido2](https://github.com/Yubico/libfido2) and its dependencies. Also, certain platforms and build-time options may require additional dependencies; see README.platform for details. ### Building a release From 0d1c9dbe578597f8d45d3ac7690df10d32d743e5 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 27 Feb 2021 12:25:25 +1100 Subject: [PATCH 0271/1788] zlib is now optional. --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d5f7065e7b20..e9ee372ca330 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,11 @@ Stable release tarballs are available from a number of [download mirrors](https: ### Dependencies -Portable OpenSSH is built using autoconf and make. It requires a working C compiler, standard library and headers, and [zlib](https://www.zlib.net/). ``libcrypto`` from either [LibreSSL](https://www.libressl.org/) or [OpenSSL](https://www.openssl.org) may also be used, but OpenSSH may be built without it supporting a subset of crypto algorithms. +Portable OpenSSH is built using autoconf and make. It requires a working C compiler, standard library and headers. + +``libcrypto`` from either [LibreSSL](https://www.libressl.org/) or [OpenSSL](https://www.openssl.org) may also be used, but OpenSSH may be built without it supporting a subset of crypto algorithms. + +[zlib](https://www.zlib.net/) is optional; without it transport compression is not supported. FIDO security token support needs [libfido2](https://github.com/Yubico/libfido2) and its dependencies. Also, certain platforms and build-time options may require additional dependencies; see README.platform for details. From 351c5dbbd74ce300c4f058112f9731c867c6e225 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 27 Feb 2021 23:42:37 +0000 Subject: [PATCH 0272/1788] upstream: fix alphabetic ordering of options; spotted by Iain Morgan OpenBSD-Commit-ID: f955fec617d74af0feb5b275831a9fee813d7ad5 --- sshd_config.5 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sshd_config.5 b/sshd_config.5 index c7e360fb4f96..3db9353c9118 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.327 2021/02/23 21:55:08 djm Exp $ -.Dd $Mdocdate: February 23 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.328 2021/02/27 23:42:37 djm Exp $ +.Dd $Mdocdate: February 27 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -1428,13 +1428,6 @@ Specifies whether any file is executed. The default is .Cm yes . -.It Cm PidFile -Specifies the file that contains the process ID of the -SSH daemon, or -.Cm none -to not write one. -The default is -.Pa /var/run/sshd.pid . .It Cm PerSourceMaxStartups Specifies the number of unauthenticated connections allowed from a given source address, or @@ -1452,6 +1445,13 @@ Values for IPv4 and optionally IPv6 may be specified, separated by a colon. The default is .Cm 32:128 , which means each address is considered individually. +.It Cm PidFile +Specifies the file that contains the process ID of the +SSH daemon, or +.Cm none +to not write one. +The default is +.Pa /var/run/sshd.pid . .It Cm Port Specifies the port number that .Xr sshd 8 From e774bac35933e71f924f4301786e7fb5bbe1422f Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sun, 28 Feb 2021 01:50:47 +0000 Subject: [PATCH 0273/1788] upstream: Do not try to reset signal handler for signal 0 in subprocess. Prevents spurious debug message. ok djm@ OpenBSD-Commit-ID: 7f9785e292dcf304457566ad4637effd27ad1d46 --- misc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc.c b/misc.c index f333e1abd4c5..d988ce3b96c5 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.161 2021/02/15 20:36:35 markus Exp $ */ +/* $OpenBSD: misc.c,v 1.162 2021/02/28 01:50:47 dtucker Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -2604,7 +2604,7 @@ subprocess(const char *tag, const char *command, child_set_env(&env, &nenv, "LANG", cp); } - for (i = 0; i < NSIG; i++) + for (i = 1; i < NSIG; i++) ssh_signal(i, SIG_DFL); if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) { From 85ff2a564ce838f8690050081176c1de1fb33116 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sun, 28 Feb 2021 22:56:30 +0000 Subject: [PATCH 0274/1788] upstream: Add %k to list of keywords. From =?UTF-8?q?=20Eero=20H=C3=A4kkinenvia=20bz#3267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenBSD-Commit-ID: 9c87f39a048cee2a7d1c8bab951b2f716256865e --- ssh_config.5 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index fc6668fdf103..f81191890547 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.348 2021/02/23 21:55:08 djm Exp $ -.Dd $Mdocdate: February 23 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.349 2021/02/28 22:56:30 dtucker Exp $ +.Dd $Mdocdate: February 28 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -2016,7 +2016,7 @@ The local username. .Cm RemoteForward , and .Cm UserKnownHostsFile -accept the tokens %%, %C, %d, %h, %i, %L, %l, %n, %p, %r, and %u. +accept the tokens %%, %C, %d, %h, %i, %k, %L, %l, %n, %p, %r, and %u. .Pp .Cm KnownHostsCommand additionally accepts the tokens %f, %H, %I, %K and %t. From de3866383b6720ad4cad83be76fe4c8aa111a249 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 1 Mar 2021 21:13:24 +1100 Subject: [PATCH 0275/1788] Only upload config logs if configure fails. --- .github/workflows/selfhosted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 203da1953be1..aadcb42b4ddc 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -42,7 +42,7 @@ jobs: - name: configure run: vmrun ./.github/configure.sh ${{ matrix.configs }} - name: save config files - if: always() + if: failure() uses: actions/upload-artifact@v2 with: name: ${{ matrix.os }}-${{ matrix.configs }}-config-files From 0a4b23b11b9a4e6eec332dd5c6ab2ac6f62aa164 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 2 Mar 2021 01:48:18 +0000 Subject: [PATCH 0276/1788] upstream: openssh-8.5 OpenBSD-Commit-ID: 185e85d60fe042b8f8fa1ef29d4ef637bdf397d6 --- version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.h b/version.h index c2f9c55bb917..6b4fa3721e80 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ -/* $OpenBSD: version.h,v 1.88 2020/09/27 07:22:05 djm Exp $ */ +/* $OpenBSD: version.h,v 1.89 2021/03/02 01:48:18 djm Exp $ */ -#define SSH_VERSION "OpenSSH_8.4" +#define SSH_VERSION "OpenSSH_8.5" #define SSH_PORTABLE "p1" #define SSH_RELEASE SSH_VERSION SSH_PORTABLE From 67a8bb7fe62a381634db4c261720092e7d514a3d Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 2 Mar 2021 21:29:54 +1100 Subject: [PATCH 0277/1788] update RPM spec version numbers --- contrib/redhat/openssh.spec | 2 +- contrib/suse/openssh.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/redhat/openssh.spec b/contrib/redhat/openssh.spec index df99f7d73e05..908cafdacd1b 100644 --- a/contrib/redhat/openssh.spec +++ b/contrib/redhat/openssh.spec @@ -1,4 +1,4 @@ -%global ver 8.4p1 +%global ver 8.5p1 %global rel 1%{?dist} # OpenSSH privilege separation requires a user & group ID diff --git a/contrib/suse/openssh.spec b/contrib/suse/openssh.spec index e6459e82d69a..fe950303ee95 100644 --- a/contrib/suse/openssh.spec +++ b/contrib/suse/openssh.spec @@ -13,7 +13,7 @@ Summary: OpenSSH, a free Secure Shell (SSH) protocol implementation Name: openssh -Version: 8.4p1 +Version: 8.5p1 URL: https://www.openssh.com/ Release: 1 Source0: openssh-%{version}.tar.gz From f0c4eddf7cf224ebcac1f07ac8afdb30c6e9fe0a Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 2 Mar 2021 21:30:14 +1100 Subject: [PATCH 0278/1788] update relnotes URL --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index f69b441b5a5d..0f87812a6388 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -See https://www.openssh.com/releasenotes.html#8.4p1 for the release notes. +See https://www.openssh.com/releasenotes.html#8.5p1 for the release notes. Please read https://www.openssh.com/report.html for bug reporting instructions and note that we do not use Github for bug reporting or From d2afd717e62d76bb41ab5f3ab4ce6f885c8edc98 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 2 Mar 2021 21:31:47 +1100 Subject: [PATCH 0279/1788] update depend --- .depend | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.depend b/.depend index 2333809726e3..c7bff499c5a3 100644 --- a/.depend +++ b/.depend @@ -2,7 +2,8 @@ # Run "make depend" to rebuild. # DO NOT DELETE -addrmatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h match.h log.h ./ssherr.h +addr.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h +addrmatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h match.h log.h ./ssherr.h atomicio.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h audit-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h audit-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h @@ -19,13 +20,13 @@ auth.o: authfile.h monitor_wrap.h compat.h channels.h auth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h groupaccess.h log.h ./ssherr.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h canohost.h uidswap.h packet.h dispatch.h auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h ./ssherr.h log.h misc.h servconf.h auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h log.h ./ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h canohost.h monitor_wrap.h -auth2-hostbased.o: pathnames.h match.h +auth2-hostbased.o: canohost.h monitor_wrap.h pathnames.h match.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h kex.h mac.h crypto_api.h sshbuf.h log.h ./ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h ./ssherr.h misc.h servconf.h auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h misc.h servconf.h compat.h ssh2.h monitor_wrap.h auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h ./ssherr.h log.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h monitor_wrap.h misc.h servconf.h -auth2-pubkey.o: auth-options.h canohost.h monitor_wrap.h authfile.h match.h channels.h session.h sk-api.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h log.h ./ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h uidswap.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h kex.h mac.h crypto_api.h sshbuf.h log.h ./ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +auth2-pubkey.o: pathnames.h uidswap.h auth-options.h canohost.h monitor_wrap.h authfile.h match.h channels.h session.h sk-api.h auth2.o: digest.h auth2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h sshbuf.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h monitor_wrap.h authfd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h compat.h log.h ./ssherr.h atomicio.h misc.h @@ -60,7 +61,7 @@ gss-serv-krb5.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd gss-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h hmac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h digest.h hmac.h -hostfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h sshkey.h hostfile.h log.h ./ssherr.h misc.h pathnames.h digest.h hmac.h +hostfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h sshkey.h hostfile.h log.h ./ssherr.h misc.h pathnames.h digest.h hmac.h sshbuf.h kex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh.h ssh2.h atomicio.h version.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h log.h ./ssherr.h kex.o: match.h misc.h monitor.h sshbuf.h digest.h kexc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ./ssherr.h ssh2.h @@ -70,7 +71,7 @@ kexgen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat kexgex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h kexgexc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h kexgexs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -kexsntrup761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ./ssherr.h +kexsntrup761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ./ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h utf8.h krl.h log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h match.h loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h ./ssherr.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h canohost.h auth.h auth-pam.h audit.h sshbuf.h @@ -124,7 +125,8 @@ sftp-server-main.o: includes.h config.h defines.h platform.h openbsd-compat/open sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h ./ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h sftp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h pathnames.h misc.h utf8.h sftp.h sshbuf.h sftp-common.h sftp-client.h openbsd-compat/glob.h sk-usbhid.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -sntrup761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h +sntrup761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h +srclimit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h canohost.h log.h ./ssherr.h misc.h srclimit.h xmalloc.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h log.h ./ssherr.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h digest.h ssh-sk.h sk-api.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h compat.h log.h ./ssherr.h misc.h digest.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h @@ -159,7 +161,7 @@ sshconnect.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-co sshconnect2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h packet.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h sshconnect2.o: myproposal.h sshconnect.h authfile.h dh.h authfd.h log.h ./ssherr.h misc.h readconf.h match.h canohost.h msg.h pathnames.h uidswap.h hostfile.h utf8.h ssh-sk.h sk-api.h sshd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h log.h ./ssherr.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h chacha.h -sshd.o: poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h crypto_api.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h sk-api.h +sshd.o: poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h crypto_api.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h sk-api.h srclimit.h ssherr.o: ./ssherr.h sshkey-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ./ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h match.h ssh-sk.h openbsd-compat/openssl-compat.h From 7fe141b96b13bd7dc67ca985e14d55b9bd8a03fd Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 3 Mar 2021 08:42:52 +0000 Subject: [PATCH 0280/1788] upstream: needs FILE*; from Mike Frysinger OpenBSD-Commit-ID: dddb3aa9cb5792eeeaa37a1af67b5a3f25ded41d --- misc.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/misc.h b/misc.h index 2de7eb5bfae2..e8239ace73ed 100644 --- a/misc.h +++ b/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.93 2021/02/15 20:36:35 markus Exp $ */ +/* $OpenBSD: misc.h,v 1.94 2021/03/03 08:42:52 djm Exp $ */ /* * Author: Tatu Ylonen @@ -18,6 +18,7 @@ #include #include #include +#include /* Data structure for representing a forwarding request. */ struct Forward { From cffd033817a5aa388764b6661855dcdaabab0588 Mon Sep 17 00:00:00 2001 From: "sthen@openbsd.org" Date: Wed, 3 Mar 2021 21:40:16 +0000 Subject: [PATCH 0281/1788] upstream: typo in other_hostkeys_message() display output, ok djm OpenBSD-Commit-ID: 276f58afc97b6f5826e0be58380b737603dbf5f5 --- sshconnect.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sshconnect.c b/sshconnect.c index 74f9e76702f0..6eb5fbae0d8d 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.350 2021/01/26 00:49:30 djm Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.351 2021/03/03 21:40:16 sthen Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -826,7 +826,7 @@ other_hostkeys_message(const char *host, const char *ip, xextendf(&ret, "\n", " %s", othernames[i]); } if (n < num_othernames) { - xextendf(&ret, "\n", " (%d additional names ommitted)", + xextendf(&ret, "\n", " (%d additional names omitted)", num_othernames - n); } for (i = 0; i < num_othernames; i++) From 160db17fc678ceb5e3fd4a7e006cc73866f484aa Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 3 Mar 2021 22:41:49 +0000 Subject: [PATCH 0282/1788] upstream: don't sshbuf_get_u32() into an enum; reported by goetze AT dovetail.com via bz3269 OpenBSD-Commit-ID: 99a30a8f1df9bd72be54e21eee5c56a0f050921a --- monitor.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/monitor.c b/monitor.c index f6d6efc1b1b7..a464fcc817ae 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.223 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.224 2021/03/03 22:41:49 djm Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -159,7 +159,7 @@ static Authctxt *authctxt; /* local state for key verify */ static u_char *key_blob = NULL; static size_t key_bloblen = 0; -static int key_blobtype = MM_NOKEY; +static u_int key_blobtype = MM_NOKEY; static struct sshauthopt *key_opts = NULL; static char *hostbased_cuser = NULL; static char *hostbased_chost = NULL; @@ -1157,7 +1157,7 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) struct sshkey *key = NULL; char *cuser, *chost; u_int pubkey_auth_attempt; - enum mm_keytype type = 0; + u_int type = 0; int r, allowed = 0; struct sshauthopt *opts = NULL; @@ -1206,7 +1206,7 @@ mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m) cuser, chost); break; default: - fatal_f("unknown key type %d", type); + fatal_f("unknown key type %u", type); break; } } From e99080c05d9d48dbbdb022538533d53ae1bd567d Mon Sep 17 00:00:00 2001 From: "millert@openbsd.org" Date: Sat, 6 Mar 2021 20:36:31 +0000 Subject: [PATCH 0283/1788] upstream: Fix PRINT macro, the suffix param to sshlog() was missing. Also remove redundant __func__ prefix from PRINT calls as the macro already adds __FILE__, __func__ and __LINE__. From Christos Zoulas. OK dtucker@ OpenBSD-Commit-ID: 01fdfa9c5541151b5461d9d7d6ca186a3413d949 --- sshkey-xmss.c | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/sshkey-xmss.c b/sshkey-xmss.c index c81c689634e7..018b7da1a6ca 100644 --- a/sshkey-xmss.c +++ b/sshkey-xmss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey-xmss.c,v 1.9 2020/10/19 22:49:23 dtucker Exp $ */ +/* $OpenBSD: sshkey-xmss.c,v 1.10 2021/03/06 20:36:31 millert Exp $ */ /* * Copyright (c) 2017 Markus Friedl. All rights reserved. * @@ -89,7 +89,7 @@ int sshkey_xmss_serialize_enc_key(const struct sshkey *, struct sshbuf *); int sshkey_xmss_deserialize_enc_key(struct sshkey *, struct sshbuf *); #define PRINT(...) do { if (printerror) sshlog(__FILE__, __func__, __LINE__, \ - 0, SYSLOG_LEVEL_ERROR, __VA_ARGS__); } while (0) + 0, SYSLOG_LEVEL_ERROR, NULL, __VA_ARGS__); } while (0) int sshkey_xmss_init(struct sshkey *key, const char *name) @@ -405,7 +405,7 @@ sshkey_xmss_get_state_from_file(struct sshkey *k, const char *filename, if ((fd = open(filename, O_RDONLY)) >= 0) { *have_file = 1; if (atomicio(read, fd, buf, sizeof(buf)) != sizeof(buf)) { - PRINT("%s: corrupt state file: %s", __func__, filename); + PRINT("corrupt state file: %s", filename); goto done; } len = PEEK_U32(buf); @@ -414,7 +414,7 @@ sshkey_xmss_get_state_from_file(struct sshkey *k, const char *filename, goto done; } if (atomicio(read, fd, data, len) != len) { - PRINT("%s: cannot read blob: %s", __func__, filename); + PRINT("cannot read blob: %s", filename); goto done; } if ((enc = sshbuf_from(data, len)) == NULL) { @@ -477,18 +477,18 @@ sshkey_xmss_get_state(const struct sshkey *k, int printerror) } if ((lockfd = open(lockfile, O_CREAT|O_RDONLY, 0600)) == -1) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: cannot open/create: %s", __func__, lockfile); + PRINT("cannot open/create: %s", lockfile); goto done; } while (flock(lockfd, LOCK_EX|LOCK_NB) == -1) { if (errno != EWOULDBLOCK) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: cannot lock: %s", __func__, lockfile); + PRINT("cannot lock: %s", lockfile); goto done; } if (++tries > 10) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: giving up on: %s", __func__, lockfile); + PRINT("giving up on: %s", lockfile); goto done; } usleep(1000*100*tries); @@ -508,13 +508,13 @@ sshkey_xmss_get_state(const struct sshkey *k, int printerror) /* check that bds state is initialized */ if (state->bds.auth == NULL) goto done; - PRINT("%s: start from scratch idx 0: %u", __func__, state->idx); + PRINT("start from scratch idx 0: %u", state->idx); } else if (r != 0) { ret = r; goto done; } if (state->idx + 1 < state->idx) { - PRINT("%s: state wrap: %u", __func__, state->idx); + PRINT("state wrap: %u", state->idx); goto done; } state->have_state = have_state; @@ -589,8 +589,8 @@ sshkey_xmss_update_state(const struct sshkey *k, int printerror) ret = 0; goto done; } else if (idx != state->idx + 1) { - PRINT("%s: more than one signature happened: idx %u state %u", - __func__, idx, state->idx); + PRINT("more than one signature happened: idx %u state %u", + idx, state->idx); goto done; } state->idx = idx; @@ -608,55 +608,54 @@ sshkey_xmss_update_state(const struct sshkey *k, int printerror) goto done; } if ((ret = sshkey_xmss_serialize_state(k, b)) != 0) { - PRINT("%s: SERLIALIZE FAILED: %d", __func__, ret); + PRINT("SERLIALIZE FAILED: %d", ret); goto done; } if ((ret = sshkey_xmss_encrypt_state(k, b, &enc)) != 0) { - PRINT("%s: ENCRYPT FAILED: %d", __func__, ret); + PRINT("ENCRYPT FAILED: %d", ret); goto done; } if ((fd = open(nstatefile, O_CREAT|O_WRONLY|O_EXCL, 0600)) == -1) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: open new state file: %s", __func__, nstatefile); + PRINT("open new state file: %s", nstatefile); goto done; } POKE_U32(buf, sshbuf_len(enc)); if (atomicio(vwrite, fd, buf, sizeof(buf)) != sizeof(buf)) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: write new state file hdr: %s", __func__, nstatefile); + PRINT("write new state file hdr: %s", nstatefile); close(fd); goto done; } if (atomicio(vwrite, fd, sshbuf_mutable_ptr(enc), sshbuf_len(enc)) != sshbuf_len(enc)) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: write new state file data: %s", __func__, nstatefile); + PRINT("write new state file data: %s", nstatefile); close(fd); goto done; } if (fsync(fd) == -1) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: sync new state file: %s", __func__, nstatefile); + PRINT("sync new state file: %s", nstatefile); close(fd); goto done; } if (close(fd) == -1) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: close new state file: %s", __func__, nstatefile); + PRINT("close new state file: %s", nstatefile); goto done; } if (state->have_state) { unlink(ostatefile); if (link(statefile, ostatefile)) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: backup state %s to %s", __func__, statefile, - ostatefile); + PRINT("backup state %s to %s", statefile, ostatefile); goto done; } } if (rename(nstatefile, statefile) == -1) { ret = SSH_ERR_SYSTEM_ERROR; - PRINT("%s: rename %s to %s", __func__, nstatefile, statefile); + PRINT("rename %s to %s", nstatefile, statefile); goto done; } ret = 0; From 2421a567a8862fe5102a4e7d60003ebffd1313dd Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 10 Mar 2021 17:41:21 +1100 Subject: [PATCH 0284/1788] Import regenerated moduli file. --- moduli | 852 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 446 insertions(+), 406 deletions(-) diff --git a/moduli b/moduli index 6103e989cefc..5b788a88385f 100644 --- a/moduli +++ b/moduli @@ -1,407 +1,447 @@ -# $OpenBSD: moduli,v 1.28 2020/09/30 09:11:38 dtucker Exp $ +# $OpenBSD: moduli,v 1.29 2021/03/10 06:32:27 dtucker Exp $ # Time Type Tests Tries Size Generator Modulus -20200603013151 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B598E0A26F -20200603013238 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B5992253EB -20200603013253 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59936A07B -20200603013341 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59979324F -20200603013412 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B5999ADA8B -20200603013518 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59A02A39F -20200603013530 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59A123243 -20200603013735 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59AD6F947 -20200603013748 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59AE8D8E3 -20200603013933 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59B86B667 -20200603014014 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59BBA6DEB -20200603014054 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59C01B8A7 -20200603014128 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59C29951B -20200603014140 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59C375247 -20200603014240 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59C962533 -20200603014320 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59CC3D1B3 -20200603014419 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D1CF107 -20200603014455 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D5BEF33 -20200603014535 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D8CD76B -20200603014539 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D8CEC9B -20200603014547 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59D94AC97 -20200603014600 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DA41237 -20200603014618 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DAD23B3 -20200603014629 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DB9A6AB -20200603014640 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DC72D17 -20200603014646 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DCA93E3 -20200603014713 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59DE24DDB -20200603014735 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59E04C08B -20200603014834 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59E5D24E3 -20200603015049 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59F359287 -20200603015117 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59F4EB0D7 -20200603015124 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59F547E4F -20200603015250 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B59FDE260B -20200603015443 2 6 100 2047 5 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B5A088C767 -20200603015517 2 6 100 2047 2 C1B5AE12216BF36E172F949757150831C974F0D9589CAA6E6639754A321243ED9FF7846C2BEE736D420BB5A049A0E14EEB8A578C79B5482963D405610BF6F23FBEE7E4BFBF1FDA04EBC69CAEFB767366C057B2F1ECFAD374E5D7079EC99B1FDFB19177920DDFA0991354FF3603E184A05E7756025E7A856B5B80E5252036E8048180264DE4BD9D96C318332F7C20CE30CFBFEDE1CE02874FA4D05AE76F4767EA65999BCBE0BF7C46924671B181917E80B035EBE5DEF7263447CC0546B9CE0D38198C4A5B73DD6C82DB4DF902167166C05486FBE4EAA8A8096CC0465EC0A061D9C8DAB0B24AE58C5AD652A31233832E0FF90385BD62FBFE7D558B18B5A0ADBCE3 -20200603015616 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC1F54FE3 -20200603015632 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC20D92BB -20200603015714 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC2466F63 -20200603015737 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC26D42FF -20200603015759 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC290CFC7 -20200603015826 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC2A9F777 -20200603015926 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC302E2AB -20200603020047 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC385317F -20200603020153 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC3ED4683 -20200603020330 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC47C42DF -20200603020424 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC4C763EB -20200603020516 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC51127D7 -20200603020716 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC5C96ADB -20200603020724 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC5D27F33 -20200603020757 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC608698B -20200603020857 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC662C493 -20200603021019 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC6CD731F -20200603021029 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC6D98B37 -20200603021126 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC72C56AF -20200603021137 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC73B2487 -20200603021230 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC783A09B -20200603021237 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC78AB273 -20200603021248 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC79749E7 -20200603021336 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC7D6F6C7 -20200603021349 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC7E7DE83 -20200603021433 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC81FC717 -20200603021555 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC8A2E197 -20200603021648 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC8EF5243 -20200603021748 2 6 100 2047 5 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC9466C5F -20200603021817 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC962284B -20200603021848 2 6 100 2047 2 CC80BBBF39CE11FCF95392238D15C8FDD1707D9F1DE408CF64661BD7C14D5BABD6A9D01F7EB2182781ADFB99C4DBBFB0071D129521E454B9C6921F5FBAE54B10342C246AFB288D93AF265CC213E0416C1E0CCBC279DD84AE7B6F56A6FA1D243A8719334B6D625C30012E2115114A40C2244B1AF7051B2FFB3BE46E7A291F49CE0B67C92F544BBC5DAEDA5DBABDA8CBDDE03AFEDFEF63D06B4787A4FB4A4666147A5A9469F7F37387493C7E64E75ABBB5CF94966E091EC529CAEB18481C109BC28003E779DABD1973006D2929B4A6DAA6AA14B1606D42C02AFB6357D16FE7F74109E6D15D47A7F135D11523698F648B28E8B4504711D7BA60096A6A7DC99760E3 -20200603024052 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A91FDFFF9AF -20200603024236 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A91FE2CF7AB -20200603030816 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9201780DFB -20200603031241 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9202073643 -20200603031336 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A92021B4CD3 -20200603031841 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9202BDA763 -20200603032328 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9203510ECB -20200603032520 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920388C3E7 -20200603032842 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9203F56F83 -20200603033217 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920460103B -20200603033521 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9204BFC103 -20200603033736 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920502CC63 -20200603034230 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A92059BD8AB -20200603034313 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9205A947E3 -20200603034452 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9205DD15C3 -20200603034648 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920616CA47 -20200603035115 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A92069C9C2B -20200603035225 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9206BB9E4F -20200603035500 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A92070DE93F -20200603035636 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920737396B -20200603040133 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9207D5E89B -20200603040227 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9207EC8EE7 -20200603040625 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A9208640D27 -20200603041338 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920945B5AB -20200603041419 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920951AE07 -20200603041640 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920999446B -20200603043156 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920B8735AB -20200603043319 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920BA8BB73 -20200603043430 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920BC8D263 -20200603044252 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920CD96A5F -20200603044815 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920D7CF1BB -20200603045034 2 6 100 3071 5 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920DC0D2E7 -20200603045100 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920DC9043B -20200603045746 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920EA22D0B -20200603045832 2 6 100 3071 2 ECFB72C76B880DAD52A24F83637D85C1B8B3093B51B9031D7890D582E25F700EB8ED2D3640F376A0F6A76FFD283EF55B9747F37C049BEF03F1D1B0B4FAD2B989D4FF02BD1A64AA734DF85A8AD94CC8D74BA8010B989416D2F169AF55EF984E592EA0D449DAF774A2536519623C079164FF5B703A0F429AEC32A42755E28B36E5F5848D14696A8491AF3784AA6945F73498FE2E6443ADE4E65909A863587DF150B5E9D960D9EEFBAF7BFCC768EBED9B2F79D3A1A365DAB065909A97132FC7354B446CCF9AA3A1BED03606C8D0F4DDDC4A862CA839E98754273191313F7BE1B5966F271FCFBEE91EEEAA83AE69A4D42D3B3FF57991AC9FE1B815F6CC366B5793E5CFFA9116FEC3C4D9B79F68D4B16B7945942B20B6AFE011B8687820BF257CB551B6591D84D4087C191907DE481D14C0815954416F98D3C677A2FDEDE4BB1C2DA18DA3BD1DC34958168F9C9336B805ECC25136246264FAE1B92540573F4DA8FC26D03DC3456ABCB5F289A8D3F81D1BD2510CB8035D1DB5C9C13F428A920EAFE143 -20200603050921 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17EECACD1F -20200603052247 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F081C487 -20200603053129 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F1987E43 -20200603053245 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F1BC8503 -20200603053449 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F1F91A73 -20200603053857 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F27C8A43 -20200603053957 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F2955523 -20200603054803 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F394838B -20200603055727 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F4BF9BE3 -20200603060437 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F5A887B3 -20200603060919 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F63DC10B -20200603061739 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F74CFFCB -20200603062124 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F7BE3FD7 -20200603062244 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F7E219A3 -20200603062352 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F800A877 -20200603062854 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F8A5CD2B -20200603063441 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F957937F -20200603063639 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17F98ED287 -20200603064225 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FA46F36B -20200603064300 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FA53E86F -20200603064723 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FAD9840B -20200603065325 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FB991D57 -20200603065827 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FC383623 -20200603065922 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FC4B78A3 -20200603070014 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FC5D3D33 -20200603070257 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FCB2934B -20200603070528 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FCF8C26F -20200603070954 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FD83D0B7 -20200603071417 2 6 100 3071 5 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FE089B4F -20200603071755 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED17FE7F6E9B -20200603073423 2 6 100 3071 2 E1D5789FC337053CEECF601ABA6CD8DC9625FAF3A8CBAFF40FB3C7B27FD61854C1E1D3D8D577F0FD466C911CA0550678F15A839C419F026ECE2B2C51828108F687DEEABF39748763AA1964D7F2D251756B10ECBDD78A1020B8E08AF0590A2E83661E53931ABD6A5193EB154051DE3B4329969AE835D7AB44C4E202C70FD202372384D4F3464ED486C85F1A3660B881923AC9B9C10733703F2BC7B76A04251E399D26EBA2AF41C76AD9FDA0C0BC63B0442E1A91239660B1B2A91885C7329A07E5EAA0B4727A793A0B2794F62E18FC3F563E89E91EA38FE55B0A9BF74FF6065CA7DFBAAC535384BCD7A19530B62ECC61979EB332C0677C600F128ECE2C38921814358AADFF5ECCE38761713D0537CAC626FF0D6DE6A58094451AE1ED53802170837EF38FA63FF3F3AF9989089B990D047E95A5AE436FBB00AD85D6B235B66FE21C8B19C2AAD7FEFC3132361210FDA9EEBABD0507CD95AF6079E29435626299064E793BCF766CD007C6442E67E035B779D7F2A756A02C6209C014A8ED180093BC73 -20200603081916 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB2D4D797 -20200603083145 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB388F177 -20200603083521 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB3B5C34B -20200603084043 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB40162F3 -20200603084749 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB4655173 -20200603092034 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB64D516B -20200603095055 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB8176DB3 -20200603095144 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB81A12B7 -20200603095539 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB84BE7E3 -20200603095824 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB86B8F43 -20200603101512 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBB960938B -20200603104916 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBB5FE757 -20200603105710 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBBCCBA53 -20200603105827 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBBD8F413 -20200603105917 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBBDBA9EB -20200603110729 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBC4E8FFB -20200603111137 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBC861FF7 -20200603111642 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBCC73993 -20200603111836 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBCDAA5EF -20200603113326 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBDB5695F -20200603115340 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBEDE1F7F -20200603120124 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBF484387 -20200603120350 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBBF66044B -20200603122542 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC0A9B2D3 -20200603123932 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC1727CEB -20200603130016 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC2A4BC9F -20200603133721 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC4C82B83 -20200603134150 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC50278E3 -20200603134315 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC50E06EF -20200603135758 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC5E92E73 -20200603140431 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC641B467 -20200603141500 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC6D1EF0B -20200603142240 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC73D85CF -20200603144519 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBC88AA813 -20200603152458 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCAB4342B -20200603154356 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCBB51E33 -20200603155251 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCC2FFA63 -20200603160553 2 6 100 4095 5 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCCE8D70F -20200603160829 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCD05EF5B -20200603164544 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCF2AA323 -20200603164741 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBCF3E737B -20200603170255 2 6 100 4095 2 FADB8928A550514C5D83CCCD98141A2A1EBC81D9B298AE4FB11CA19942682C2D72B29897BF77CA0A39B85130EAEB705C59BCBCB677FC6B08B7048FCFF55BFB6F1C6C44984002438FE3763B9342588649D2A79048975FCAF9C5BE658A3B73BA732768977A10565B597A1F3F58503384637A525369A00A4E50986780C66C8007D76523914FE52F7E4C479D86466A266317B8607665F49BE434643A528D177B57409ACBD387BCF8ED3609F8770933921F873F620771034774F41DDB33C3334747497F146529034F71563360B6778FD98614A67C6605D1D0540F10843516A3AF6E8F7DC81EE9EA3D61E8A6A54866E25EB6BEFAD1FEB08BBE2D3AF023471C249A6CE5112F3862F18A1DD3816298EAD7B9F064E243C01736866D06B1103C3FED190799DF25569F419019C98195D771DFF5FD82C01DB7883C3840B784F635F66B285116E4F84207930F0FCD05D8F07AAA3FAC67DAAE83B38F7AC1BDB719CBB1BAB1A735B567784BC7A3DD5A84C27C4F9443071AD03E4887A9354F2A4DDE965F4AF4325184857DC74A398AE4284777086CE88A7D0D20D2F23DB1CF4AD9D74A45719DC3162D50D27824283DAB31E7D58967E9F575F46F235733501200986AA4D0A94735F15330198EB804B39577F43E4F34D31385BA1D5B96A769BBA1616923421B8B277E26DEF215090EDB1174D99AAA7D3D1A2443D28EB5BF6E90A6C4E24BFBD016BC53 -20200603174159 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DDF71B183 -20200603175329 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE0166EB7 -20200603175916 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE062F643 -20200603184324 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE2FC12A3 -20200603184429 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE3055C0B -20200603185842 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE3D8A083 -20200603192814 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE58A7357 -20200603193254 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE5CB2ABF -20200603193621 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE5F55FC3 -20200603200025 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE75DAE53 -20200603201138 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE7FDB23F -20200603202852 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE8FADA4F -20200603203058 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE914E293 -20200603203547 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE955F197 -20200603204018 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DE990327F -20200603214442 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DED4B6E1B -20200603220036 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DEE2C08C3 -20200603222135 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DEF66B02B -20200603222250 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DEF70AB3B -20200603223212 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DEFF51C3F -20200603230927 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF211A5D3 -20200603231319 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF2433C9B -20200603231528 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF25BCB27 -20200603231746 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF276CF2F -20200603232250 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF2BD6513 -20200603233720 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF38497EB -20200603235438 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF47D8963 -20200604001143 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF570FF3B -20200604002250 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF60F878F -20200604002438 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DF620B41B -20200604055558 2 6 100 4095 5 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFA633BBF -20200604061051 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFB397083 -20200604061554 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFB7C2FDB -20200604063226 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFC65DF23 -20200604065024 2 6 100 4095 2 C313DC332CA881BD902A99A7D1BD21F3A30E3F7AB0CDFB5621C8040C10FCAE7B7CB62418B22FFE72A2010022D54C0D961ED8388D6B951A77F65CC83436C94D13AA701404ACAC2D205529444489AF0F6DBFD3BF9DFEE48ED180447017A5ED1BFA553B9307D6D8A7C5B9CEA439A293469433B5E42265D19DB8ABFD8C5A210ED8D0356FE9EBCEE90BE901A4485A621A5E76DE1D97A2F96E4BFF6BFC5A2E6D35F9294B1E9AD8A03EF4DE74B4474D7427F6D22D1D92D4308000D7D710A87C6005886BB5E09D8B5C6617C46BF3676B95DE7BBD8B4E9F600CF3D0D0692341FA0807451215C57AF94A0871D73564FEAAEF46B0B11440BE867734C7909523C48C31EB72BFFE4B4FBFDCAF6AE67E8D5EF5CC0FD343C3C7BA2058F666A9911C499EBAA19676D0911CC8ED919265EFB99ED650F88834EE52FE3FAB09D92F5B9B7A5B3C0B7682B9339416344913BE9851681E5941E92DC93AEF7D777C9A066D1B58EFC7D83573BC9030BDAC0C4FE2D6DD6C46CB53FC0790E198B62853DBE0DA046475292D627C2D71E8B0067F537EF9AD5BEA0070F873F840BD6ACD9BED642FB47C43A268C1E57EB16F7AA1DD6392025180C94606D6C2E5D9479DCE96DD90563A8897A237514953596B1319493BEBFD62F6F7FE94B0F1427A38B777ED1F98973740141F5E524F462BF20D7BF3B5F802FA1C071A5FD5E3FD6A35CFACF6D4351E4BF41DFD6980B3 -20200604082734 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB31F961E9F -20200604084249 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB31FDC7AF3 -20200604091259 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3206DC3DF -20200604101647 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB321ACC813 -20200604103215 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB321F009F7 -20200604111534 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB322C70503 -20200604125038 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB324A52B33 -20200604170714 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB329B0AADF -20200604201954 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB32D7E3A0F -20200604225914 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB330A536DF -20200604235825 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB331C4B13B -20200605002513 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3324381DF -20200605020140 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB33424AE3F -20200605174721 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB33BBFFA77 -20200605181350 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB33C39E413 -20200605211751 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB33FBA22CF -20200605220744 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB340A69BAB -20200605222038 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB340DC3917 -20200605224624 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3414FBDF7 -20200606004552 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB343904617 -20200606010539 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB343E728E3 -20200606041215 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB34773F577 -20200606043519 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB347DDC483 -20200606060158 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB349792CCF -20200606061048 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB349995E23 -20200606072525 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB34AFC43A3 -20200606110034 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB34EE5592B -20200606132049 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB351770B4B -20200606143556 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB352D19757 -20200606155651 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3543BDFC7 -20200606165831 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3554B535B -20200606212229 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB359FD9073 -20200606220136 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB35AA7E8EB -20200606223830 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB35B464AFF -20200607002602 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB35D27674B -20200607041439 2 6 100 6143 5 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3612F4687 -20200607090802 2 6 100 6143 2 C023C230380A2DADB3604BF16B0820515CAC3A56D4C81478C7A7F2C2A9447DA4CBF5D0322D1BAF511FBB97BDB4B548B1D011DF098DA0129BD4600767F8B691D569A167CA70FE65DEEC95923C9E4749103769BE8A03C021153D1A90E65F5B48A480E10733DEDD1A122ED26636D60F553090AB3DBE65D5E8D8ABCAC5E55E84F2FA8440847DC1F5B01EAE345E50CCF88FC765BF392F2C296980BD89AB34F9A7347DDFEBAFB710CF9264B9E0E2DB8EB44B525028C595136E87E45947096BA64053B2FE9E3415FE32DF3068467044BB9DC36A70846D7659D153403F5B3B57DFABF4D0459A9CEA5BD3BFDEEC00714A9F333F016B425338C68CD639E2215D40C98CEFB3790F1ED1696A6FF63D656759678ABEED75227423A4DECB18CAD41253D73EAC54E5F078CF31B195E1E7277A8EF677EE41786B2CFF84C95964F830546808222AF588561556C214853836C8B6818BEE0D1934C38F5A01030F98F57A3FB9C951F752E04045B7ADDF367A6C173624A6F42FEB27FE01E932D2E02DF7C46E1B664EE05A531BCD219CF734A26D10F98BCC313F58CA03B97E78E6F6B8F51CB7A563244E22318CF371383E5B20C36831097C00BBDA9440AA528090B1AE9D3A49DDCEA29B458CF63E22307125205538629FCBBCF7166881C7C238869629DD1D153E429D2D6A77E1E8599D26F9EF7DA4C499256FFCB32E8D7E488038A00737C6896D16C50C243AACC6AF29D1BD2F86C56C5A5DA77CF2676AA5ACF2223529DAA33BC137E65D943C263FA98788481E82D58281A7681E6A9E2F645EF229A7FA7407F31E459CF96AF1AFDAE863FDBA1C0072BB970CFF30491816DBD8D54B2A7683C3BA968B49812611BC4A0DC437EA791BF202E030355D1C52466171CBEDDB06ECA66E891D6A6417F4E33D7F586FC6043F92A8C9C526270F0552F08CA46374AED948437216B84F474FE2A8869FC4121DAA099BEDE62BE7A234617132FB6C22E6ACF13C6E0AFEB18AB556682B5331ED7B280985B38A3FFF7DFCDEC7535887CB2F9042298EB5D1B18841282A4552EF9292A58011644619D72C294FA4AA3E4930FDC32DCDB3666D9ED3 -20200607105240 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651481AC9A3 -20200607133637 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46514B532A43 -20200607163856 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46514EDA94F3 -20200607192855 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465152143C87 -20200607195432 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515283AF8F -20200607230617 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515617BC0F -20200608012123 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515893FD67 -20200608021859 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651599AB89B -20200608035721 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515B642983 -20200608044119 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515C305197 -20200608063659 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46515E6DD31B -20200608082941 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651609244BF -20200608110527 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516389D057 -20200608121159 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465164C740DB -20200608180046 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516B604DCB -20200608181840 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516BAD8D9B -20200608185332 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516C4C7C13 -20200608191623 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46516CB2720B -20200608222523 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651703AD573 -20200609002530 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46517274C703 -20200609024353 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C4651750D2B73 -20200609030451 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465175677013 -20200609033613 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465175F369F3 -20200609040050 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465176620273 -20200609062156 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465178F038AF -20200609070757 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465179BF4683 -20200609094557 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46517C97C613 -20200609143727 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C465181B85657 -20200609145622 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518205D68F -20200609150740 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518231FE23 -20200609230217 2 6 100 6143 5 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518A94E1BF -20200610010357 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518CBBC813 -20200610013612 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518D487AA3 -20200610014250 2 6 100 6143 2 C57F2CBC0C6147F572B0F48F4F8E26DABE9C61EB3DC99B6753A587B3C215984DAF3F996960C81C4B0DE94FA300D19F5373E4067CFDA4A885C57A30F412A1872ECC06BF86E74FA687836333C5A5C8AE8A0540D031EB84E11DEF9F08138D6D82321531829463B35F627979753D085580082D86C7B37C1AB72EA78333609505F508BE0C50347DF9E30D97FDFB6D9F6EC81174AD46695E913FED9AF505529ADB913FEA5795ED206275B356BB3718FC479DE36048F49619ED7ED09C1D43F1B74B7DA182B5D771987A5A0C5244B8379F966E3BF7E2053FF2055B67A4F42E8A4E16908DB847F5B9CF8801BB7031B03FC7041F67242E69D91C12BB5ED64C2FE5786D4A5F71E2DAC5A1E4860EC08D6D0769A26E6D6B03515DF82827C2BB6AD32A1B6F27AC7A3F8ECF39F4BA2B52A93E2606C31151B49E7B1830748B57C3E0B0CB5EB3F3AC15E13CFF02CFB10D75D37EA636BEA0924500879404F70628BD2950239996F409AD1F56F16443437184250D9C8BE3BC41B61407EE724BFE36D1B8C0D295B128AC3B279C2022B52CDFB6D24900789161048DC6123C21E5C1678F4B3B8D22CB4056CB1EF88C6CD8077BC19CEA36347DA42BC9442642A9227C06D3C2C8151F1DD501C50F4653131826C83F7220C15B5D0D967102DA6F9F565E6AA82E6086BDEF70A910646A90625E941CFD28B9ACF5CB9146A8E9ED55567A0037B5836AB354505357A0DE604A21ACC65A69C1FB52493F520F8CE8E307213DC83E72E1C996A8A2131EE08B863A31AA5E2431CE5D2051B3D3C713B76CAB9A396C885335422EDD2C7056AC91060EABCD70620BE7717C4C977C419D2B07A9D6D41E2FB5D698CCFD8B932E4748AC0120E35467BC774660CE678F04C64D59CAEF3112E7E1B766A2CF49D6B6C841131BBC42755899F5EB96BCB33AD4593B7EFD0E41A4B9517667F1305B9D9A84C9C9E9A4F1EA70CCC7649D63C2E611954F5A9DE6AA4C176FAF32044E268FC664B5378D314BC510D16B41A81C1342F902F295E68B7B16E3BB22CBEB3D59391EBEC058FCA8C9FB62D1E4FB9445706362C54EB804B89646A1A46C46518D5EFC23 -20200610044251 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A654DB7CCF -20200610045738 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A654FA9813 -20200610071715 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6567C3163 -20200610215424 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A65FFF83B7 -20200610224823 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6608D79FF -20200617060930 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A663CE8807 -20200617091256 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A665DBFE4B -20200617113153 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6676B33F7 -20200617170511 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A66B179027 -20200617224324 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A66EDBCFA7 -20200618013140 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A670B46447 -20200618133142 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A678A89E8F -20200619002228 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A67FC1FBF3 -20200619052551 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6830B759F -20200620020539 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A68A981AF3 -20200620090325 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A68EFF0E13 -20200620190400 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6955464D3 -20200620192646 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A69585D693 -20200620194126 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A695A1BFA3 -20200620235757 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A698313E5F -20200621064953 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A69C626CE3 -20200623073839 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6B44F5CDF -20200623133511 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6B7E45A07 -20200623163036 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6B9949D03 -20200623171631 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BA0088F3 -20200623190013 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BAFE9BB7 -20200623200819 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BBA63F8F -20200623233346 2 6 100 7679 2 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BDAF193B -20200624020817 2 6 100 7679 5 D9BDD28997D5CC2F34E75DB842230C8FEC671AF277140D4FA40FAC7618EA985F1F139D1D841B2D700173C78CDA1C4E7F8DAC16978D221EBA202B0B031CE0A66DA50EB015F8043028E99D4FA6D28D0C19E13822826DC669C1EC83F1B1BEDEDB0BDE18C99679C0A5658D1AF3A45349B0FBB68032242B11A530B532EA98BCA093E5ABFABB04BCB9B54E69C998C8145DEA14B5C0DBFB954F729B7C773C31C66E16649B14CDAEF76F64D1CC85E820B0015E4BDAD3F88E7FEBD64B153B8C2F5B580E60F94DDC3D9B8651A7847DF8AC0A458187265B86B7C363FD98671688956EDCB44EA5972C041DA42D04E8EF460744576DBB25BFC5F14D4C657055D59E1A22942D700E3A29B23730FC475C595DCA4F83DC7106F2C9D290F78C5CA26700B6D39CB0B27C60A1F4B6F0F7E6AAF4E0B02F567652313BD5BE594972364E158C1FF57F2081257DFC04E9D3365906355495A2D1AD063D14FA7F6F374ACF8336F055F47140FEAC995957A776CE16573C53932E9D537A9AD4419F94C1A53912452D761D0652FCB9580CFBBD293A7EFC80FEF3632F850DBF631C61CFE1A473E0B708513267764F5621BBB1AEB8AB055324CA910996469161108AC348ABBF9A22C61B1F42DE07DE8DA6E1B906D73FD71CBC5CBF006F72067044E7FF625C28AFD2F77AB0B991E7B4331A7B8E88C9B917F0BB167BCBC7BD1F0A84327BEAB988D818FC3A35B32BBC92E3D61347D76729AA98B6A51D24DADF6580A28629935D2057912C805BA7B55F76A064DA257F6E6EEE21BD919F17EB1B8BBB1D640C0B38E436AADD8DCB72080F9A837363E59ED252BB522AD98D9AE6E2F074D2D3719A49E1026E1B096B0CF974DEDC462997394C03FE11C766EB09C37AC37034C8A05568EFD9D6099DAB338551B320B103488F3757ECEEED3331402335444099535E4E06893C020D2096CF2DEC75EB3978B052179E495B573A032A5201BEFFB843463DEF35E06BDD1A9E00AD49C20B5B4DB9926DBA60DBF7F48FF63BC08C176CB384A10D9EFF2E3F6F912516B902B60F857DAF600A2E8ADE99254456790D270ECB95FB2E8CF7967F94B2C34B24472EC1E56789D17529D907DF57874652E2FA223DB8656570973E6239222E5FDB3B949D559679F938F622090FF0C97091959E93013F51C00E1AE31E0466E0A21C4B1CA98A18343E5386077FFC276AB3FD37C511D2C978C01B62E5F2FFE460515CD7B271AFB8244667AFBF26C09E6F6C7F9719F973A65E3FC3354A0FCC49336361BFAB9E0EB276FA1B5215E9C5C60CDE67DDB9CD6D2ED5A829CDEB8713A6962C1F781770EDE447C23A0AF1768BCFB2FF84B4B96F0662714772D79BB660A6BF306ADF -20200624120025 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9A48268CB -20200624212659 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9AAFA0B53 -20200625054216 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9B08B8B4B -20200625123632 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9B52A385B -20200625172019 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9B8463B1B -20200626052613 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C027DE2B -20200626101643 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C11E420F -20200626115032 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C21BE90F -20200626121646 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C259D8AB -20200626221832 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9C8D6C58F -20200627003443 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9CA48A947 -20200627072751 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9CEBA2483 -20200627132611 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9D172E21F -20200628074151 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9DCE587D7 -20200628192017 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9E443C567 -20200628211535 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9E564FA5B -20200629022616 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9E87B2F13 -20200629030222 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9E8D05DBF -20200629054955 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9EA889CF3 -20200629085314 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9EC71DF2F -20200629090539 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9EC8B1483 -20200629125524 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9EEE0A61B -20200629171748 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9F18A7977 -20200630033559 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189C9F7F90DBF -20200701005327 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA052CA8BF -20200701141753 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA0D5D91DF -20200701180117 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA0F982473 -20200701222250 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA12381BA3 -20200702010052 2 6 100 7679 5 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA13C5E40F -20200702020447 2 6 100 7679 2 F33B0F0818B623E831020BF1F21033CEDB49A00241324323E0D768AF68E1C989D401A834784F31ED3A332581A0589712AA215602B2811B35F6916664586EF5797ACF114313A4CF6E5A4AFB4307CD4C119AC0A1D2E6861E5A7E3D16BEA5ED82BB1801A68F2E77E9C5964D9E7CDEBAE4D292CCB458B9D2CE312149EE34B485835EC5A071C5AFF9FA8134D562FDA0381B03F987BB226F9CF647EB496096630362D97E165EB47D874F921EFDB408D88B132E10D99F5920C718DE8A5EECD228D030C7FC3EC712243C4C75E13299300C165962724C4B1CBA811B9158CB01402DCEADDD6849FEE51DEEC74A065EF226A2E41D4F6075C6C4C4466AAB2CFD00E8B7CD3EA75656D7F316F13E924FA133370CFBF59BCE94C2CA0F5F4595E4B3C9CBA040733AAAA53BCC2E2F30BF3A59D25613EC1DD0C373B9F256BA110FD7DDE5DE1697E79AE46956B2EB064E48C63EBA205AB1DBE65F39511F33DC0A7111B03B50AC1921A3EB1A321297BCFC28C6848F55597AFD510A0A2551D3275CB84EABA8624909CB135A2F25EC7352646B0C60DECAAB24C1B95C4E91BC1390E4BD6B420413B3909F8B5593CED45D91A1D462ECCFFC29D4BF9F23928E76672D6EE93148916DDB24C440DFAB01AA2942B4A249BB731C169A76A107D7F6A66F624D7507671E2C9507DA1819A6EBA212B13CC233EDE2BB7883441394A12A95A61BF6876061766913191B33597F1E8BF85AB5A26471C021B5029B34485E7B2D18186638F18EE0B85E72D4A9A866FF634C0652CF1F6BCA9C35669345E983D641A8C6FC6516D8772EC78622F950E175BC8577E99257D009FD8374EEC65507FA9034CCB7376858DDF91A97E5E826A563CB4F11A8C83DC92842F397FDC9861404BDFFFBFFD16ADDB85820123296EA52184C82D062EF68D37A6857473B0A93DFB48DF6CB19938945509F29E88D7C3BF6381AB154F5182E41C58E97341925F6CB545A86C15E4E04F155641BB12169E12B4800F89059746557C8432D08A8E2928EFB9EFA7A8CCB9BD1E55A85E0BDB872703626A89206DA36D5EE99E9BE711E20562150F9B35C0C7F262970F60C7CA5668D7FEEEEF31D6C9360830C656BBC72012DA0E9DE5D364F17EDAA261AC0489B2D39D7F9F54500583BA348CBF28875054017621F795EF7F0B20AE88C50768D981AB9EDFFD6A2B9C144CC815BDB01133138E7FE93D6B5167B164366B76783B68B7A383DC0856F29F35308AB5A6E092CCD238553E9ADF130706488FA95441D367BEFF42B90E590157E31C5D14BE574F674328EB835C8DF1C84A4CD39E31B545843F885B1F68D2F7C769FB67E3AF89ED0728D2F8C49DB7B5A079EC189CA14610AFB -20200702141056 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B8092131717 -20200702144742 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B8092635E07 -20200704195421 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80A98AA7BB -20200705044459 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80AE337807 -20200709044115 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80B1103903 -20200709111031 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80B4BB063F -20200709122228 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80B560D2AB -20200709231042 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80BB820B4B -20200710011425 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80BCA15883 -20200710070834 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80BFE94DD3 -20200711010355 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80C9C858F7 -20200711154230 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D1BFF01B -20200711210958 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D49EC027 -20200711221130 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D51FBF5B -20200712012057 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D6C56D7B -20200712025849 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80D79C8BD3 -20200712085111 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80DAB1DE77 -20200712111154 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80DBE208A3 -20200712170032 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80DEF05C2F -20200712205950 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80E0F0E3AB -20200713042732 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80E4A95523 -20200713054611 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80E54D52DB -20200713111019 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80E80C304B -20200713231114 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80EE498EEB -20200713232228 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80EE59CF2B -20200714023100 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80EFF07CC7 -20200714031313 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F044017F -20200714041520 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F0C471DF -20200714043639 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F0EA175F -20200714065444 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F21223F3 -20200714133000 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80F56A8F2F -20200715042829 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B80FD035EBF -20200715170628 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B81000F34CB -20200716042653 2 6 100 8191 2 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B8105A24213 -20200716044620 2 6 100 8191 5 FE8395C9AE4A595356F452E45DF7D762D3A014FEB24E19186365D2BB8740C384EE385601E524A910DC320C4B96D1FAECE8367AE226290C6484B2F9297F185D266063904ED73A257DC9A653750213D524AF0C46B2C13D51A95088B225BAED46BF3C451B9666D7371264E07A9269ED050B75DF602699A41083DA7B55E29B9A4D97DEB07F3731C7D56EBB26A8E4A980F1D085772A9779DF0B0C6D70D84A9422B4DA7118418C649B1CB4427D2BB1EE67710ECEFD41D0C4F5E4A7D87DEB4D5CA502DD56E1FE22F0BA53C3420566C7862D4A7E969958B3E935B73A323DDF7FC4839BD89AB696FEDD5299631C1DC15E849B753829A99CBA301A8DB3601203862059E33B1256D233E830BC2E4441B1458027BA97D0218B4B31D3EA350F550E328E5C32B8C36BE6F1E7F18B13F55BC42C54F6A5530255E206CC6CFC52CFC521B9B3355C9705BD66355310F89A4B70D44317E67C4B06D60001849E965E38F1F9C58AF177DFE3EB6048A54D02AD99E203C004714E97BFAF0163215DBAA9B1A262183B7109B60C975135D8DC02F6F48839EE2588BBBAD9D7C2126837B1C50019A721FD3D498979F10472BBC28FECA5AFF0560AECCE5249D809514B707DC9A57B358ACFAEB5A393E28AB752FE583DED0FCB40119702BD1E7CEFEC11980F64D034612B050919CA3121B2A9F1C4F66530EED3658CEEB0A7822A72DE37123AFD94BE8D7B6A9C2941AE9917697BA07B45815D0662491AF90222880878101792A8CB31926D9F66E6560B7E8273F213EA79311CE9261EBB9483E6FB8582650F69B834E792A614DB7D9ADEAA6E88368B8E72DB948E302420480E3F5B574F16CFA0F336555B649BFF5A3596D887DBAC229791FE5B194D95635709062C457261264B7B559D644D63CE12EA4FF7708D9B087453B318B57BC537E6FF3B8BBC408A5CD8DE6F3C628A0ECB5B9A020FB99A009C127861D54949B3BC068E2FCE802FFD69A8FBA34B474880532B88033B0F63D98F6BA5B455861FFE031A66427891E1492E999CB77C05F66E7458B5643DC43DAABDAA6A8BB4119A7C11B9B155820D5BE8CD91AD052769D73391D2FCE46F0BEADD6B62312C64ECD4613E5D1423F0EC56435BBFE0C43366BF60C361381AB1D8CAEC44D13C9DABE6937EF0018D689EE3F791CB1956CA46C32D293BD901BE4C95F4895525298C4D9D7EDA0E4840F81F458F520A0779CF09F45AE156C83195ECC82D85D4E71E535C6EF8933912A6459782923F2A7927919EDC80F5469DB628DE323D72881757FCF9BCC81D3E121A1BBF593A7B2EF10A2766FCF735FC993CF1303ADFE78D914A66CEDC64F606FD326B2DC501984CE64FE82DD4353AB1F7A3A2F556E73982D19CBF504E0901547D7F4B4E41B58E3F537774799DF4423B8376FE8D7760E3DBBD73E1D5DCB1499789711A90BE26D0DB48AA89E72B8105C3235F -20200717004114 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2563B2FF3 -20200717235130 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E25DEE6EFF -20200718065353 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E261E56D0F -20200719061659 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E26EE97997 -20200719174532 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2753B7F7B -20200719233549 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E278465B13 -20200720193256 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E27EAF2603 -20200720221223 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E28016951F -20200720225043 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E280684433 -20200721051511 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E283E5442B -20200721202027 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E28BF7EF47 -20200722031754 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E28FA5D78F -20200722033316 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E28FBF971F -20200722065544 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2917E7E8F -20200722082838 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E292454C9F -20200722174034 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E297121163 -20200723025424 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E29BB02057 -20200723041739 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E29C6C06E7 -20200723052236 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E29CFC7C53 -20200723065956 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E29DD62887 -20200723141158 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2A1DEDC7B -20200723143438 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2A20B359B -20200723180649 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2A3FDE2C3 -20200723182158 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2A41A0857 -20200724142608 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2AF0F839F -20200724163612 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2B034D293 -20200726001643 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2C133FD8B -20200726175941 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2CA996EAB -20200726180625 2 6 100 8191 2 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2CA9DE833 -20200727032532 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2CF5B2087 -20200727053855 2 6 100 8191 5 F80E15DF775E74500D293272136D58EC8D062AB4FCF79FE676D1E7C31466BBF53DB66029B5AA4C527F0D59D3D00BEE81CF126FD0F8CC2FB19017E9F6B02D75BE094347756941901536C84FF90D5E14953AABD9D6A660404C8164C9EFE33B0BD6B2CAC083F7EDD115393E43A2DD6CCE66037ACC14D987EB1F6B23A77BC2EBC3621B160C2561DCDED8E51CCDC7B2C6ABA4ED99F686218D9B925231626619CB61452D83FD6A0AD8CC12698777BD28762038D45399B1D0E06930D87444D4DD3EFE94287F34557D021077ED3E8F61E9FE6138F1BA7335198FE5D06373E5FFDAB4058E3697BC4A013C91F8B1DD1C9409A5A7D9A3707B958DF6E83052881C36724D98E8FA98C83FD8FBBFCD8B0C09B31ECDFE9D7884DCCD6F7E192A8B6F0DE93CB12891872DF631E1C4E5DF3C9B5A7FB773F9165236D776CCE0E80E61AC842D6B01AAA82856DA6E4581D542709C702FCBC2FE8C28B546BB21F42AF475076BAF67B21F92BB70703A0941962EE5D9DFDFC620DA16DEB0EBC166DB869E956AF4EAAF008BD2B78AA77474A481AFED15AB98751F3431A815C4B606F6A34423A0DA4236FB1339177FD9FB3AFBC8166E313FD8C02C12D8DE0184F3E6CEE043685B8372E14B84100A7BB3536460E3FF851F73E2ED904953F6481D33D7B4BD8A9C829F92911FDFAD6CA31EBC1B70E4CD3D964E7A922BFAD0A828959F3AAD1708E742F68FD8B5DA90558D9F8222DFC1765B835DBF7FF5785F0645D04B56EE67A76EEAF04243A1E4EE47787328EFAA880A463D064B203CB70CDEFF554D281A6E161D3EB55967763DD09F5A68FC23B8D3660C8EFB705706B699F9A9FED5F16E77E060220F5572F11564B7D5F27BCCA81A1052A9745A4C7C37B776BAA4CEE950513577300A0CBBF9C555DBD0D83BB49E51EBE66405A404B19A5CC18577A2ED5DE05AA2F459CB78A92845F4A4C0CC8559B8E0338425D7988E1FA4572D67BBD9B9AD3B7156FD8C079E18C1285DF894426BD702804C4C468726420EAAB61C82E33BAC8613D541DA5B767B0877C5C8607BE72B5EA322EC00A4575606E959051CC658322287D255786C5C21E9799E7B8E5F0C93BCF0A267CB4C48C8F4271DF0A34ED2BB9C2FD8091375FD1B3E61D7A3F2F71F4D33226331DF2B7F22E48D2D831C2EA0383D8A7481191780DADD0ED5AFC6F28ADC8796B8B558A1DA2FCB838BC167A0A0377A7ACCF0E30B87111F9DB1760F3C0D16F097DDD3330D6A9369E8A6E57CAE4E5EB290A3370E55202C08EBA5A4D06C01996BDC06BBE027EBF746DF1579F82BF3A3A2765EA4AA989B56F82D4812539182AFFC8F5A8CAC826D2A7720CC2327521075CC8C7084B2CCA30DF574CAC8C44148DF989B7B1E940CBFFE47EB3892147920C3D93AE764B769F2A71AC2A2A2C4E05C60C887151CE4B8947FBA7C756D6F69F5394A3106F3E2D07FAFE7 +20200930103859 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AA67732B +20200930104218 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AAEC16F3 +20200930104319 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AB1310F3 +20200930104333 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AB14C093 +20200930104405 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AB297677 +20200930104620 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AB8E47BF +20200930104658 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37ABA427AB +20200930104713 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37ABA93727 +20200930104858 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37ABEB0CD3 +20200930104955 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AC09DF6F +20200930105245 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37ACB5C36F +20200930105334 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37ACCD80EB +20200930105514 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AD0A024B +20200930105705 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AD4DA807 +20200930105838 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AD8515A7 +20200930105923 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AD99A2F3 +20200930110024 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37ADB9659B +20200930110055 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37ADC6CD9B +20200930110307 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AE16257B +20200930110335 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AE200B43 +20200930110447 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AE487643 +20200930110501 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AE49A30F +20200930110640 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AE7CB41F +20200930110705 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AE850193 +20200930110828 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AEAFC643 +20200930110947 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AED939F7 +20200930111052 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AEF8958B +20200930111318 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AF484B07 +20200930111345 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AF506FB3 +20200930111558 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37AF9D1DEB +20200930111857 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37B006FBA3 +20200930112128 2 6 100 2047 5 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37B05EE957 +20200930112416 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37B0C3E9BB +20200930112439 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37B0CC77D3 +20200930112529 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37B0E3D873 +20200930112751 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37B13355D3 +20200930112903 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37B15BABBB +20200930113019 2 6 100 2047 2 DD19D852DB5639810688F04A26C29999BB806D2F7C80880AE35BD4C2EBBD49BC5D2A326B03C5BF96777DE50D0F5C2AA928A46F550D5F5DF6AD619FB1F38E432B4EBB3B39FD49A6A8F187DD4BC7E541B6390033BFAE92E64020DF00C57DE1F9A51B66686EDADAD07C72CAAE33110A635484746BBF6A592A9A14B7A96754FDF1FFA3AE383A60927C0E03B9F959396D1FC452A404C1BF28BB914EAF591452865923778A99AA3608F899057C9DDAD66206E89621BDEEF2BFEB7B2D045CE3BA93AAA7A89121A5ED43C2CED0F22E271964741193E83C51DDCEE04A3ACD21C954EDFAF578547F85A4A62FE6B62D20BC2C6803302ACE817B64189EC9677C2D37B184B2A3 +20200930113412 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC5488ED437 +20200930113500 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC548A601CB +20200930113748 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC549036A23 +20200930113832 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC549165F87 +20200930113959 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC549496DBB +20200930114037 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC5495B861B +20200930114050 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC5495C68CB +20200930114255 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC549A6EB2B +20200930114431 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC549E07B43 +20200930114445 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC549E2CF23 +20200930114719 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54A3E7F8F +20200930114810 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54A563DEF +20200930115248 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54B012D4B +20200930115431 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54B397777 +20200930115527 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54B553237 +20200930115559 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54B625363 +20200930115639 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54B764653 +20200930115714 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54B85426F +20200930115814 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54BA69D8F +20200930120314 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54C7285E3 +20200930120351 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54C86F583 +20200930120424 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54C93ECD3 +20200930120459 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54CA6ADC3 +20200930120535 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54CB82843 +20200930120634 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54CDD2F6B +20200930120740 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54D05106B +20200930120808 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54D124907 +20200930120902 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54D35556B +20200930121004 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54D5D58A3 +20200930121027 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54D66AA1B +20200930121059 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54D798D2B +20200930121232 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54DB2997F +20200930121533 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54E249FBB +20200930121602 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54E30E23F +20200930121739 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54E67F36F +20200930121847 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54E8E56D3 +20200930122206 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54F05DEC7 +20200930122413 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54F513B07 +20200930122512 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54F712233 +20200930122719 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54FBCFD33 +20200930122737 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC54FC0216F +20200930122956 2 6 100 2047 5 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC550170507 +20200930123106 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC5503F0863 +20200930123146 2 6 100 2047 2 D9F77C62B924E4DC2FFF6682F124D0F01627EC2634654DF4A2447BF0F88EE3DE63675303C39FFEC329B8AB02FA7A4E35210B3AD9805B032A5AFC0835D65DA3A522477694920B4328A2EF80DCAD164A4A80AFDFD6E2D47020282DBB4F1CF132226C07C27E4948057A504B0B52FF665FA792E1DE498B3931270A6244FE4F116407BA08B00AC2CAFBF6D3C6C37EF7F5B9D155545E1D014F7D057F820182EB35B125669E9B87569A55EBE6DF6DC3230B31ACC0560EF1D4BEC78CBE46E203E57086AC96A74FFFD90F545E7845236E71E4329ED8281CF3819CA14B162D51CC58EC73BF462AE605FC548E41DE2479E3A006EA0E9EDB4ABAEFB5A7C0FA976FC5504FBFFB +20200930131958 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BBCE046BF +20200930133333 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BBDB3497F +20200930134619 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BBE93B7DB +20200930134843 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BBEB9F86B +20200930140124 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BBFB429AB +20200930140701 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC025DBE7 +20200930141445 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC0B94697 +20200930141618 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC0D070FB +20200930142039 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC12AB823 +20200930142500 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC18EE2A3 +20200930143133 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC2223D33 +20200930143655 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC2914A47 +20200930144031 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC2DF100F +20200930145023 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC3CD7DDF +20200930145245 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC40476EB +20200930145745 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC47CF4D3 +20200930150246 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC4F4DC13 +20200930150400 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC50F13BB +20200930151224 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC5D3446B +20200930151334 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC5E84957 +20200930151946 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC67BC6EB +20200930152246 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC6BE4C0B +20200930152442 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC6E58FEB +20200930152517 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC6EC7283 +20200930152544 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC6EFB5D3 +20200930153147 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC76614BB +20200930154247 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC876E263 +20200930154655 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC8D835FF +20200930155510 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC9A5DD53 +20200930155644 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC9C54223 +20200930155841 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BC9EF4E9B +20200930155951 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCA0893BB +20200930160156 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCA39256B +20200930160335 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCA58F26F +20200930160458 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCA79E25B +20200930161250 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCB3CD967 +20200930161643 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCB9AE923 +20200930162043 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCBFC8D17 +20200930162137 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCC0AE5BF +20200930162454 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCC5E286B +20200930162948 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCCD410A3 +20200930163811 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCDA71C3F +20200930163852 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCDAE81E7 +20200930164250 2 6 100 3071 5 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCE0B29AF +20200930164410 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCE25DA3B +20200930164557 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCE4CECFB +20200930164800 2 6 100 3071 2 D0F2B3CC37A29DF5AD1623D003ABD0987230EA8A417A02839C436A9E9C7A0581A9234176BC0F0F2F450158718D0C2F35AD83181A4C36AD0483D8FA07EB282666AF859B9DC8FF9F9EACBC804D8114277653AD082DF50DC8A4E1A7F012922A198E6677002FDB48F92F84A794C19621BA3997975245D6A441A0C3D92F742719B67C5C356F6EB229A0F004CF1A5F7908F18EB783934B5E3311593CCC3B88C41010CD5F0D0B63BB169E0410D9C5C1FF4E5798ADAFDE92ACEB42C0147EA12DCD59EDC0C354CF167219C9D2C7A2CEF76FECB233986FD48AAF3B9379537D8EDDD67C517A7134F188307C8C16E6D125425EB82E23625D51851463A06A71E0C91A1BB78BAF49535DFB51195C9755F3EAAC761A17803FB292A228E1109FCA837A8B8F7A9696F981F6EF48A6F285C00EB5750D8C61414C742EDDAEC16661219315B9D9A10AA81CDC496B273B0238BC77649D156AF9A031B11FE2B981FABEAEB102802BA8EFA4D743042FBB8C91F0D892469826C60CCBEE44C8167D664672492D564BCE7942D3 +20200930165856 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED3633990233 +20200930170645 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36344A3E63 +20200930171201 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED3634D3E62B +20200930171432 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED3635088CD7 +20200930171818 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36355FD633 +20200930172759 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36365E0643 +20200930173548 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36372023FF +20200930173839 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36375FB73B +20200930174243 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED3637C3C17B +20200930174555 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363812F603 +20200930175037 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363880305B +20200930175131 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36388E6AA3 +20200930175228 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36389FD95F +20200930180050 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363972ACC7 +20200930180301 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED3639A594D3 +20200930180756 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363A2043C7 +20200930180835 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363A25D30B +20200930180925 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363A32CB4B +20200930181538 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363AD672E7 +20200930181644 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363AEC260F +20200930182258 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363B8D9FCF +20200930182834 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363C161663 +20200930182932 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363C26369F +20200930183140 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363C575C93 +20200930183452 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363CA60763 +20200930184439 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363D9F9553 +20200930185118 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363E462B5B +20200930185600 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363EC13C83 +20200930185646 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363ECAC29F +20200930185830 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363EED78B7 +20200930190150 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363F41A293 +20200930190554 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363FA9D6C3 +20200930190652 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363FBA5D77 +20200930190818 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED363FD4D617 +20200930192133 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36413128DF +20200930192506 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36418D031B +20200930192844 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED3641E7B13F +20200930193716 2 6 100 3071 2 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED3642C5CDB3 +20200930195325 2 6 100 3071 5 E1009A27E8B33EC315331CCC6530EA1D6D434442F56A84A4F51EA47D915025BFF9A55E9225FD0D3829930D7469978A8BFC8DCC85703DD2C4B5297BE134E93D7EA72E4B7D18D62F10DFB196707CF4975EAE036E83D6302A61568111787BBAEEA6C483F9F68601017B48932924651B07EF5509BB5B208B298927A43A96E12E110C3EA911693EF9DB4094834D862A8C9AE60C3D21507E2E634573DA325298D02D99130007973CC2F7C95C0BAA1B2B4644D0E9E21880F665498462D8F041B6D2C95085AB34A8E490411014B3573AB9902F2F70FD3A48C7A7B0076AD1C8B073295851A590D578DE130CDAD896ABD2AEEDE74FB72D1A842B84A47C045248ABE149D10E1B7CD67F78B65573EA15B0088026C22D41CCF95E2F7CCDCBD70F3B685805186B7241568C03F2DE6BE72EB1FF91F9B811E168CF1A0DC6B1D2D9AC69AFB450583E8FFB2682158E10B120D750C75159058D04B27F1350012B484FFF93FDAAEB819C9D0F632E3358AE410E242494713E715E3F9150FE0882CC06153EED36447A6037 +20200930203427 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D121E283097 +20200930212141 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12206F330F +20200930213623 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12211E084B +20200930221333 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1221896A17 +20200930221945 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1221B2485B +20200930232214 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12227A70A3 +20201001002356 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1222FF2E9F +20201001004540 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12235AC837 +20201001004636 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12235B75FB +20201001043411 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1225B50D17 +20201001043728 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1225CB099B +20201001050054 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12268D7CA7 +20201001054849 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12282033E3 +20201001070929 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D122AF5291F +20201001072234 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D122B6EFDEB +20201001075250 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D122C8CF0D3 +20201001075437 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D122C94354B +20201001080649 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D122D0186B3 +20201001081829 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D122D66125F +20201001093449 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D123048EE7F +20201001093748 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12305B5857 +20201001094150 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12307B06CB +20201001095043 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1230C795B3 +20201001100350 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12313BC2DB +20201001104031 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1232922ECF +20201001105657 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12332F3B07 +20201001112635 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12344498B7 +20201001112836 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12344E3D63 +20201001114337 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1234D9384F +20201001115808 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12355D26AF +20201001120939 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1235C35313 +20201001122331 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D12363C302F +20201001124432 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1236FFFF6B +20201001125356 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D123754B623 +20201001130844 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1237DAB06F +20201001131243 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1237F8E297 +20201001133149 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1238A92C87 +20201001140357 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D1239DBC1AF +20201001142245 2 6 100 4095 2 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D123A811F7B +20201001150145 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D123BDFE8AF +20201001153400 2 6 100 4095 5 FF1950A9D266D427EB8A232ACAF44612A47682EB0B8C89257EAE4D9F586CFC514878E79DF5A708945A9B2C5441A7708EC3904EC7C6C31424F23D30B14791B5A1DE417FAC45773E1A4FDFEC320C0BE611CE6BF0CFCD5EA9DB5F1878E04094441A35F9D22109EDBCE9AB6B9E433B1301C6A7921AF2590E84434B58DC8CEB83FD24C080D1998E9A6BBF7BB9BFB218FBFB6B0BC2CA7CCC260D7E1443E18B85CFF71724F21B9C855557CDC2C490A496D31E0746CAC6A6012553E013B38CE7F394E664034E137AA4750C72A5560F4DBE9B0B28D82D5EB560FE4211F5280F35811C65365C386CEA8B30B8AEAE43D61B053AAB32C41B582B24D0C1FADC212DBD52559CC8E1AC18A548D1A6EDBC47AB15E86CCEF826776C09E07262777147308C407D5DFC7E1A1364370FFA5B5D57845F148C2FD86C4CF7EA2173AC66BE202F3A1C33E68F1151328271B058974D26F7755D2114BC0D96E5B15025D0B0F66221F391AA4FDF8AE7C99C1FD4B54B42AE06EA094ACB81D66C37B628136525D31AE7CD4A63CB35DE81B7D33D8B721915DE58689F4D7D182619361CA5F76680F2B85D674DDF3875C0520B22A6C8EF96CB304D9CB2461F152AAEA09F8E976B9A46E98F7BFF7F29F09129107B2C3F427E71DB802B8EF9A8BCFB819BADDFDD8CC9AAD1EB51E78C5C31BD1176727C2538313AED63F01FF037E26AE225EEF011392B64BD2D123CFF695F +20201001160243 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F92DE577B +20201001170341 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F95291CDB +20201001180757 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F9796CF73 +20201001181955 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F97FF1F0F +20201001182457 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F9828801B +20201001184200 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F98C75E07 +20201001210558 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F9E43BE07 +20201001212737 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F9F0A37B7 +20201001212838 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F9F0B5457 +20201001213858 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F9F68AB57 +20201001214136 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607F9F761B13 +20201001221702 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FA0C0896B +20201001224659 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FA1D48B9F +20201001231459 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FA2DCDC9F +20201002001557 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FA5293EC7 +20201002011559 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FA768B563 +20201002011835 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FA774F6BB +20201002014757 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FA88C774F +20201002015750 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FA8E1C2FF +20201002024356 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FAA91DF73 +20201002024735 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FAAA9836F +20201002024957 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FAABA24AB +20201002031500 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FABA7157B +20201002040434 2 6 100 4095 5 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FAD709107 +20201002045704 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FAF572503 +20201002061053 2 6 100 4095 2 E2C28B8617B3FEA1703BB9D3CB9518575094744626E5585F741511C44A4DBF419A7B4EAFBBD14DBBA20CD669577AC7CFEB5C93E951D6F2A5A194FC3C16282C2C0DF160DBB439B67D6D49AF4F7879F8D679923E29E4063872399198A86EEDA598C481B77427CE7EF3E56BE86A00460DE9834E8B40B205B3380BD392A83B927C4A49644C801A3568496CB2687B08091553DD8059D8FD8C21604067A3A0223E5188FEE3064BE5C678C7CA9EA9ADA446AF462A6412B11EBA7DAFC7886A2B9D1FC494ECFA41A5D4830FDAEFA3F1168753E9FF51DE1C3390A00C29AAC16630397A61B96B7D5A18FD5B57A18A5271A8C2FC25BBEF730CCB2DE2B590B9491161B4DE310EABD2D60C4DF8CA703D19A13DE58D562B7561EAA4E27B25BE5B61D71F97CFF4B0F3FC0DC89622B0EF252E1C9616F0447553CFF22FD7198483652D901BB9316F5B713BA475DD9BFFA8501B19B2BC79EDD41320AFB94B48F274F0C5822A02EF1D53A94EAE036FCCB8082AF1E58EEFA617D22FAF56FFB0A9501367737D1DD337BAC4E4E72DFDBF90F6A256E7ABD09FBAE7D54E092005838DE90324B1DE72C547FC4C755E3374F24600B7180E8AD18FFAB46ACD869BB04FCED13EE9697BEF19FFD3B072D90C67F2D5E250B4272487A84F4F4BAD3B2CE442B6C43C6BAD6769B557DBBA81C7FDBDF968C4E573BE3EC843616EA72654B9B3FAFD7B7BFFB7607FB20F6B6B +20201002074332 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346552B8B83 +20201002074853 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346553476CB +20201002091337 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3465645C7CB +20201002142139 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3465A322A33 +20201002152133 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3465AEC6C1B +20201002153735 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3465B14A583 +20201002232438 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34660F939B3 +20201003163937 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34662F17E83 +20201003174335 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34663EDC143 +20201003181552 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346646B5843 +20201003183800 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34664C050D7 +20201003204020 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34666AA62F7 +20201003205151 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34666D033EB +20201004015235 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3466BE5911F +20201004021543 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3466C4163AB +20201004024523 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3466CBA09CB +20201004035043 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3466DD63DE3 +20201004082640 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34672816CD7 +20201004090437 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346731E155B +20201004093742 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34673A25113 +20201004131132 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3467738EC47 +20201004145042 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34678D108D3 +20201004163923 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3467A690F9F +20201004230643 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346800C7B27 +20201004235413 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34680AEEF73 +20201005014706 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3468252BDFF +20201005024434 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3468341BA4F +20201005030558 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34683932AF3 +20201005055647 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346865E7FA3 +20201005061138 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34686945117 +20201005062031 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34686B2CB93 +20201005064657 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346871DBCEB +20201005070706 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346876960BF +20201005071036 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346876F40F7 +20201005091658 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346897E0C33 +20201005145338 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3468EF9163F +20201005190527 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3469321BB4F +20201005205529 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34694F47DC7 +20201005224734 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34696CF509F +20201005230339 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC346970CE03B +20201005230714 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3469713E643 +20201006014521 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34699AA76D7 +20201006015351 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC34699C5B68B +20201006025138 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3469ABB46E3 +20201006031630 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3469B1F8423 +20201006034858 2 6 100 6143 5 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3469BA1ABAF +20201006051131 2 6 100 6143 2 E5AFFE1F31466A1BE4039398F290C9CEE2D03FBDED18E2E034E872E714AB7B7FB8F2E9A798D0E2C53B49722FE0AA884A349ADD9FA7A8D4F1FD3E38C1D35697F054D96566127016CF7C0618E8B3C4F875D08E61359923B77E8012F43F2FE10E538F0BD34644F84F2F545DA683C0D148BAE62FC69A7D3EE24A6B5726BBF970A711091105B4084DAA923AE2C1DBF9D8C024E2F641BDDCFD8FB96B4B46C6D279B26E45CA8CF335448422A3F20C65BC05A12F62229F9FED22B1B912A0390DFF1360012528E3C287E09C1C89AA140F524804915FA0C84715F887615F5AE67D7D63BA48C75E192BD364C6E0C0F0377B788017879CB352FD50786C34DABA7F7AB6CF6455A90577DCDC5B06586A06E2A14E6447697FD09D0A9F1B92B831CD4EEAAD0105C6BE0168753106AEA5479A73054E76CFC2566F0284E3157444E05C61A5261A10B736B63EDA6BA54DE994F78877F13882FA53362C3819A4F3903E7BF7A5368EA4F5C20FDE4027AF86B6427FBB0FA76EDCA0D9568A1F489A14B3E2D32F8EAB69AB7968BAC3854FE2438697E75C80B02DDB654E3415B5DD7679B961DB83E6780B761FAB21952531180E55E950FA857B92AEC62AB206192AADD19E3C15B8535DBDFCA6E0EDF3C78B19DF447DF55544CF0DBFFCAD14F2DCF04CAE3BF8F114B0C9840A71F0E6164C4D794576F784AB8B02181E91C7889FFC5E07B7DA8A020768BE1A1C38FECA405AEEC5CAFF565580C7BD8F3B253F644AE36D4CAB288D722E75FE3589816633E51CB5B3006502BD334817F52F4A4EDA5000550E112C1FF20C8FEB1B3817B1962D0A6C4DDB0962481137105CC8578655CAB1F9AFF21E940334BFD6865818B1DF6FDC45366919AF6FB090A7A8F462432475DBDBF7283299841923BA6C8FD898FC3E1265200454277B982A2448E7A1FF988987FBB28EE99B6C23CD90616BCFAE9C6F37FE76ABE02471ABD2893E1463DE6B5D9CAF5834626DBAD677EDEBD9F9F12D49806EAC5F47EE3478E9FF807988A0A660949904DD56181347E9C51084746AB0091D1D1971C6D3114628AF5436671FB9081BE04E9203193DC3469CFA587B +20201006053954 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001ECC7BF5B +20201006064528 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001EDF81BAF +20201006093842 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001F11E3503 +20201006121934 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001F3FF0177 +20201006153835 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001F786BCDF +20201006170235 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001F901D577 +20201006182016 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001FA6168FB +20201006191339 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001FB522CBB +20201006195142 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001FBF4754B +20201006211554 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001FD6BE76F +20201006212227 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741001FD7FE12B +20201007024718 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741002032B9907 +20201007045343 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100204BFAA1B +20201007051121 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100205076413 +20201007100412 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100208CEB647 +20201007105152 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741002099A8B4B +20201007184739 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100211D63A67 +20201007185842 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410021200590F +20201007203729 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100213B2D4BB +20201007222649 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741002158A0683 +20201007223626 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100215AD592B +20201008020122 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100218F8249F +20201008032338 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100219D09A5F +20201008043839 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410021ABC6F43 +20201008075139 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410021BF1E2F3 +20201008170038 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410021F0268C3 +20201008213147 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410022246D527 +20201009054743 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741002281358D7 +20201009131236 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410022A23103B +20201009144009 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410022B121897 +20201009171246 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410022CBB3DEB +20201009192053 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D7410022E25ED7B +20201010012452 2 6 100 6143 5 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D741002322EB987 +20201010035137 2 6 100 6143 2 F410017F9AF266B6BCEF66D7F7275A68046DB5CC083716B6FF98473EC618ADA763E5597D86382DFDBB196A85A0052A538B3F9EE034D42C5F3E853E5FADEBB28906808929594908915DA9E30C5D536E32DE63422019874E7CA4E78D40377CCEC9195334FFE9154A2EB1BF284125D96884A83C6E40E6C5E95EDF8F8B9D216EEB8A1E4C23AED0E369EC8F539E448BDB2FDAB8A6FB1D3028761215BAFDE14FAC330E5BE737CF21EC2B404E662CC938176B9397C834CA1542FDC38B5B3318A81EB5AC8953EB2F1A1C44FAEE2B3BD8F4873AE5EDEEB6873A5BB0C6839A40DB49B8E31A7FFF887506CBCE5F073C9EF4FC4800E56BB398EE503592B4D7B125D9810A144F0C311F086237324EAB4C44FC58488FB9743A1C7FD9159B229EDD210F6A867EBDE32540227EFC30079EE523D0C2B8F1741F23D146F2C5AB1C65E6BA70AE84CB95855A7D36141C5F1E99A1C50F80164E2F395972C0987200A9FA69A2186F4F40F3A59D7AEF13F21EC0F6991B25C8EA953C8686FA8D33FD9925478A6FB47881DAE26BAE33242B7B56640E218D0B72C46B99EBCCE6067927811488E503F65F5475DAE38F9501A4EA15C01E8535C1BC3F26129DF44DBE2296AB2D9A5C2F5964F1DA39C9632B7C47C2849431DEC1CC36A318A2272152D12955F1FF3D778C6AE74D788CC123045413F03E5018C7FD4E910CC74573D6D13B37770CFCC6185DA667F1F407559A03255F0A6A3502AC9C90CF2905D3FE21F2007D46B44B834D4AF582A3C16866FF3328C3AD95C3664A80676F78403DF76493C6444FD0C99C634C99B0DDB77C269EE24F52A2AC9D1D07B4BF9D026BD9C7EB3ED69EED20DF479A4746E2AE8C15950D641838A48C8C62363C28B7E92D1825C761BF1E23EEAEFA39FE7E37B7A4F924CB5EBB5E4F1C242E23E543DEDB682A5DAB7A135D06E26F540A27E3D810A6AF98BDBB4F9019A6AC0B5BAF69D5F1D9252B828D765DB1E27D84C523B8A03D786639B49C6C1F689BE8705E81E81DAC297F3E27F3A1AB8DE6415AE57A223426653BB252CE66D84E72111098F2EFAD3D1A5070E6401A95AEC2BC2D74100233C8CA3B +20201010075246 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CD9AF6FAF +20201011005752 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CE072FD57 +20201011035835 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CE1ABACE3 +20201011045403 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CE206506F +20201011060537 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CE27A97FB +20201011115031 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CE4C9A3CB +20201011133049 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CE56A800B +20201011140549 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CE5A2017F +20201011155546 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CE6582D4B +20201012201951 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CEF20BA0B +20201012210958 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CEF6C1183 +20201013021520 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CF1335633 +20201013102151 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CF2D63E73 +20201013194804 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842CF7E6D4C7 +20201015013344 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D06CDC71B +20201015042038 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D083DF63B +20201015181014 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D0F9A17D7 +20201016000141 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D12B0733B +20201016010059 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D13320473 +20201016060609 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D15D95FFB +20201016203844 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D1CB8A8DB +20201017073647 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D20D7DD0B +20201017091847 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D219EE067 +20201017175021 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D24FD1EC7 +20201017203342 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D263E40C3 +20201018020027 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D28F52363 +20201018123438 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D2E5C85F7 +20201019034610 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D33CD718F +20201019040103 2 6 100 7679 2 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D33DD1DD3 +20201019172329 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D39DA76EF +20201020150153 2 6 100 7679 5 E0E88C8B4130B3D284A584051788589172810660E9C906C4C2ECCDEA00D86E8937D6BBC63E3440099A392243F42DCBE6A4F61BBCDED0ACBAFD932A02F5D9FF92A497E674EE5FF2BC962FDE0112C4D1856CAD9DA2D5A405B00D39B485E2E548895A2A2131FF7233B5FAADA6FD0DC8F8974837FEB9BE4E249C59A7D4AD006A7D6B9113DCEBB39800DF767CD0349403FAE188B6275F2BB0DDF6DE071E0A9D449FBCCD9F4E228EE2D9B2CEA92B4D00A642A76015EA7D32B8E6EFE9D0D97147725C5F934F634C21F72FAF6F88333CE15F2C7C802E4AFB1EEE46B2F73B2826D910D073761C5BD591083B15B2AE1125B73A1ACBAAD9F0D960B07A7878205FC7D0836A3F2B19E7F12751428DC3172566569E66693B934052927487642B35E69352078C9E3D43CB67C4FB0FB4C94187301CBBDAD8BE2F79B7D935F94D14DD3B112BB8B547422DE7EF283F238C3788AE1598DBA603AF0056B4542BA3539E679719274002E3686E7E635867EB522522E6FAD9FD0E8706226EE54B5C5466B64CD75221AE3B5733C0B5C89915696D3298FC6D170FC5E47F8573A467BC1E874A602F8E03404509A267A19DCD37FDEC7CB493FAF0304E119C1A7F5B8422B869DEE218B104C548FC13B1A929D0CD8648A48F178667509D8C9BBE96AEB662963297E0113A73E8F2F8E7111FC0360D225D24683D6B61FD0021C71AB81287BD22484C595D07D61C086D3DD25D1C3ECAF9AF055FB787792714913C6581A3036170636A140FD591BACE3DD50B9699F5BA74982CEDE088597EC321E0E4557DF6BC22E7F222C2D8856C2A86C98F5D035EA9895405487FFF99131D579F8851AFB137A164549DB4032611CA1006EAE41B32FF6C1CA9D06E39B9F28DAEC34CBE306CB06BFAB4593E00BA1F94C8B39F63AE2527370133AD2F4D677D513B0A7197050742AC1B4DA61E74C233607B609FBB4A76A84DC20B946053984CD2FD84650CD643E5ABA45FD8745F8F75BEE5EDE53F41ED1B988867C3E7035575A36BCE0D850403D667084AE568A748DE9A5B4BCBDAE177E01DB757B0E3D49CBF43ECBC60AC03948B0310F62DF81E11F6354301EDA8AC224A8B7A29DC47F3555FE8EF4984EBDD6366B4F5EF70C45F8E5328FA95524115BF6FEC4744BF0CA3157312B06BBAE6556F593C47AB882BAC8D08DA7C344ADB8783750EA2430E6B4E2D91AF27DF76849E99E6A65A8559A90D8B5CD3824F797CA5B8AB558ED8445D7F712BD2D52333D8DBCAA4276FF707DE6EA058A24A9C5E9AB670DE852D4B27AE34E240249117E55300D841AA98259DE5BD8DFA314593105A5F021CF851531EBB2801B0DD9E461BBC950F85287E2664842D4103CA8F +20201021183337 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E131FE7B74B3 +20201021202448 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E131FF319DAF +20201021213639 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E131FFA89A0B +20201022063057 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132034F99D3 +20201022115254 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132057AB2E7 +20201023091548 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1320E388F3B +20201023155346 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13210E51F83 +20201023164559 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1321134EC0F +20201023191235 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132122BB8FF +20201024021831 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132151C7F0F +20201024074540 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13217561F0F +20201024125958 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132197854A3 +20201025030550 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1321EE79E7B +20201025032329 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1321EFD314B +20201025071942 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13220971ACF +20201025154749 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132240A521B +20201025212128 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13225E3DBA7 +20201026101451 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1322BA1534B +20201026144219 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1322E1B43E7 +20201026175052 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1322FD9F0E3 +20201027065946 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1323743774F +20201027075829 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13237C8D247 +20201027091325 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132386EF5D7 +20201027182322 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1323D730207 +20201027192352 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1323DFBCC5F +20201028065039 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1324455CE7B +20201028072438 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132449B6C73 +20201029012952 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1324DE7EFEB +20201029151546 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1324FFF1267 +20201030020447 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132541F7A77 +20201030080540 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132565E434F +20201030145946 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E132590127CB +20201030213938 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1325B8DAC6F +20201031043834 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E1325E3A7FFB +20201031135651 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13261DCB697 +20201031191235 2 6 100 7679 5 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13263B62007 +20201101074141 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13267FD28B3 +20201101124549 2 6 100 7679 2 EC2D59C5C4EEEDEB50FE8CC4EDB2661541C6FB7B76D2C764FA9BDC7EEC91874D2F03EFF1E495C8E6E28F6D2774C47823A3F735D4C9E2235E6A09D12BE2D44EFE02749DDDD578EFEC411AB997793A43AA266B4C54F2E4A950A810194D3482361F063952E3B2ADC024CF691EE36FEDCA94ED5CBF45FC5B08F766164719991EBDFA75C96975E3D6528AA19154F11F066E56969F9132CA6B0AFA6FB7032853CCC760530E0380E68CA3C1AC755693E25F4A45E80EF3D5F711746A204A48E5C6E92DC0A928C96F5E77FA41BFF01D66CA8A86C21CD2651ED3548225F5EB5F1B2C0BB7CDE4A6E7CCDE9CAF0CB1B779385A4EE55B845D23B5958950154DFCC45640EC6E821C1E67B8E1408B574DEEA98D3258664F351B390C71476E47FECA8ED24F3C8860867A952B5586018C417B527F2E86EF3D0EFCDAFC8B7D21B62521905BF3FE47F6B90A86D19FA57562692189E20B66788DC67DB045B8C5D75032F932616E838B267E2686FD15DAC391B7CFF9BC8B7C64C32D1D95553BE7C39238C2D80E9C63796B474BD9F270ECD0F79137C20DA0E5349B8C20F224115CC24020BFFF7FC2238E83894DFCF0760BC07618A95B35E996840B1655F9826BE3E0E2D993C7E653555697B528B2E9FA1C177728278E56C447C6B783437830EDDB938B931D6DAF9DEA98574720346741A7635D8B7C1010666AD6E108C1AC05F6EF15DD04E6A3B16DE1798F2B61C491D52862B6517AD01353909BDB10D83837EFAC26838ED308474E75207FE738070D7CAA3FD8DBE8480507D8E6C21660DB2A7E933B600C2C8F0EDCED45D9D7E3A05E7A0DB7EE728882AA40D332E2BECD9D48B48C349D48712FCBA01D5804C8F290DB60AD0AF9E3B1E7DC968F11CF96729578A43FEB1317FFE321A8CC1ACF62C290B5DF621FFA4BCABB228ABEF5D573F7CA7123651C126B6DB1CD7A54F7E9C79041B763AC8831C1C0DB2EFA4BCEC3E2A4E21C7BA3D8DA09C6444B4B00254C70D650B59AF22764C71BCBA012B45AC429D8463E2B5708004BF05DB42990C7368B3DE5D9109E8C1301D342FFDCAC9713C78F23AB73922A0C1FF41B8D22F64EB07B60580D34DAB63A43DFA90CFD6AB493917BBB6AD0B9075AB2C34E02CF7375C5499FDCCD7DEE23A201F62AA8474D7F38221CD202507663D0033087FA156E5DE7BE1E8CE9BFAA8955F254B97853C2FB45098A14EB0A51DA2BAA41C0F6A172AAF39839C4B0965AA0FBB92E755590F72B6EE24A0E006170AC9ED4CCC1D9DA4711FB1AE2019F4AFE4FD4D942E3FE04AA995E0F153518C5772CDAEB0545D4ED0C539CAA693968342D2BF4718CA134B2339FC404C0A6EF98E4D1F41810E13269E893A3 +20201102211136 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3517F41C1B +20201104100232 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3524190003 +20201105060459 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE352B3534C3 +20201105221348 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3530AF83DF +20201106144432 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3532F388EB +20201106185057 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE353439AA67 +20201106205758 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3534DBDE9F +20201108084639 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE353FE7CAAB +20201108111802 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3540A8BEE3 +20201110061156 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE354999F6FF +20201110093838 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE354AA4B823 +20201110151143 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE354C50D693 +20201111171657 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3552F4F60B +20201112131542 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3557968743 +20201112142355 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3557E37967 +20201114080059 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE356084D88B +20201114083959 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3560ACB6BB +20201115001553 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3564EE2F57 +20201120223033 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE356F28AE3F +20201121022848 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3570473673 +20201122013144 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE357695B923 +20201122062444 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE3577F6EA23 +20201122185950 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE357B47DF37 +20201123124747 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE357FD02753 +20201123192135 2 6 100 8191 5 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE35819E1A87 +20201124212459 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE35891DC76B +20201126010742 2 6 100 8191 2 F1B12D9320A14F9678850067F9130D8767B7A6E198931A99000937CFE7EEDE8605377479AB32BB47AD82183273900757DBEE9BBDC91459257355DBD3E523235F97FEA3162BAA5F020B81E12CFC85D2DE52517F7CF6448C64597E60675DBFE632696B1C21818EC5E35EF2002FEEC0E061E0C2782549B1BBFD6409CDF616F7D3283FEE82D16E1D44A6FB7802DAB848AFA33E308EB4B517CD239C86205B652B89328746AEB81211CFCFE70B64876D2F6BBA9D74C45D5CE3AA96EC016FCFC13B99C5C55DD4ABB60B35431C90F8BDB281BE1EBBE0054423FB91DB94DEC350598976AF244D86C07E97A171469DE89714F5944C21E92489374CA4C45BDD6A0278750B0FCB29177FF27A382A946CBA9931A98A2676469011B25D0ECBACA7CE710CFCA47C2ED2E9D7DE22E49F56ED7D7D1218C54266720741A687DF37F18ED39A56A067E13D9A8886A67ADEFED30D05F6D0EEA6138CBBF9DD738B406957E08FBB7D6BEC2047DBB314484CA3A4838CA57803F89D90A5130A9CA79364485F58C63AC85D4154A287DEB324D240D253036A17A07AB818535BD7DE1E57DB2646714789447C4A6EBE1538D569DF267BA4CB1DFD3EDFF71D7AF4BFDEADE2912EF0790ACABDFE5B87C7EADED47A0C06B889B47FA85A9F9CC2038C048F930A30772A09991C910DECCAB3F7AF1814F2DF3FF2AE66686E8A010DD4ABF3825491DB8EAEA4D7A957D1F4BF3A060AD3D20F821D76C9F60410E32AA67D1798ECF3F514ED3DCF62348F7739A6ECEC53010A3B656D45A808237ACECE87377C8EA21D89E350D2CB4E31A017981C70718BF681D0A4E216ACF7D950615B4E4B48BA1AD10C436BD466DEB6F61222003FB6C42017A98E780C272DAE2AEE4C3291B0C112918F287BADAB2A22A7DCC78B10D55AB6BF4FD4651F0A8BD9F2CCA24D07BA33B09928C77ADE6F73D1C36247C8D5CC568A337721F9073515B65DB7E7555BADE6F201545EB766A97C3E0780FA67B042DBFBF208F409ABEEAFC6D4C4A9D89693A4E6C041C98A3C200576F4BF22D7C03376FBEB972ECBE96B156212E4A91925515D0C0707C61826C1386D8B7C6F210EF51D566BD847554C47B364C1BC97EC1F316AB9EFCA7B3D2AD326C3E00D4A2A01F1F559119C9702DDA5D1651A83E4107EDDA43FCD824B47591CA2DE11F356C9FB90DFEAF2B625FE65F070171CC558DAB5A1305286274BDCFE6A80155A80025D0CFEE151CD96197E35D2763B59DC20FA90F99597460E60D1069977F9CDCD3F942BAC1178AF9002425CDE4F83CFEFD8288F0154FA615D22D2573FE7C9E66FBD012C9D8FCD1447C095FA3F14A23A6E3A264EC35F97A868828A1ED87DC0434855AD9442DB6FD833CD92CE182691DE15762A973CE94E6E50033B0FC41DE50699848DF71B67A25B42AB8F53CBC348E797FE141BA21ED856ACF2BEE1A2DE358F8CD93B +20201126112257 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52C39B7333 +20201126140745 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52C45E6703 +20201126214355 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52C6780D9B +20201130015948 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52D6D7FA8F +20201130065350 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52D840F33B +20201130145645 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52DABEE3A3 +20201201235732 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52E5502703 +20201202082252 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52E817B86B +20201202104859 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52E8D8B1BF +20201202160137 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52EA838D97 +20201203002758 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52ED4610C7 +20201203025251 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52EE01CD03 +20201203041751 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52EE6A8983 +20201203111152 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52F0A4F47B +20201203145545 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52F1CBE427 +20201205170601 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F52FEF5ADC3 +20201206111756 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5304585883 +20201206134442 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5304DFD00B +20201206210155 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5307041CE3 +20201211131928 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F530E903C57 +20201211155555 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F530FB34647 +20201212050222 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F53159567A7 +20201212065249 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5316666907 +20201212112957 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5318743CAB +20201213055402 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F53209F5C8B +20201213092727 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F53222C28F7 +20201213111750 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5322F62BB7 +20201214024800 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5329702E43 +20201214140453 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F532D4542E3 +20201214145631 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F532D9AB18B +20201215023044 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5332A0951B +20201219175046 2 6 100 8191 5 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F5338F2214F +20201220100836 2 6 100 8191 2 D9DDC7C88FDE577A58F31AEE0835F0FB225841D9D09B3C82716C06C36FBC0F0402761E9F90D2CC5488C1BB87DCBBD138B1CBC24B1A052C8A2F8BE13EDE229AC234A5FDBDB26E73547264DA65F1B4CF41CDCE8D4EBF88CEEC4EFD23CEC8955B06DA81AA15889746DCFB193CD3BECE98DCFC1E429C87F7B72D8AB5C18EC3DDC80020C5246593B9E9BF898EA44485CA1D355188C14042AC06A7FDBCFF51F554AB06B3F8169429C660109DD4B36F6717F9CE25838244000C417BB9802011D9416ADB8A00F0F71A50E50A58CA97F08A6C1EABEEC8B3BD0980E1AD6A7ED70A71E5B5CC7EC87B4EA621CF8EE85FA9B5EB936F890AC6BFAB56CBA7B6E5F5BC758398F4FF239A4FBB300FCCF380CDEDEC74FE498188D9BAC3CA512813F9E2266D4B60C8A5F151ED4BD9753D5FA904C663893F0A859BF467EAC5C3B4F0006F5012EA5A0C65F5110972942A91DE30C1B0B320C54A0A261DB041650A6218A722FA409A839EE1C9F2C96A579B19FBBE420F96E803ACF5A6ADFAEB706AE8262187A436B7ECA3023564A62D5172A0C332EE9F2E46D935C2815F8405F988C5C48017048F9A1C24002D5D72A18C3652D5FE8DA864401A25FAA6EF257C86E501641C3F34FC5614EF5D0F69485E425FC954B83071687E6B752207014BDE88ED10061556D1B6694519AA04BDC6A38D1D57A0A3051DE893FB6BDF70AD8ED60075E7E2C616BF2CB96BE77EA8901464B97C3CF8CE183406FB15ACC9AE372BB6496BFAD79AE677CA62428A8735A8A8730EEA89838F3338A7F596A0BEA48DE878CB867D2BDAF2F40BB67FDCBEF2FEB56907E6567BF2C45B574C8A37049643B78CA2B31AB90AC13EBBCACA3630DE646260C6E37D3D64600E9FB73139ACE1C2FD22FF05B8E4F1E603E98C1BB37BDABDE4704B94121F50F9E1848829E342150406D8545FF66162938162866926937DF23C5F1AC81F0517578C0D9B8CC1D28CA8FDA0E920FA222C67D313CE63F95FF6304E8ECDD595CB796B3771554F90C16FDD7D76F2B231D2FE711D3C088E36E52300B19A82C4B60BECC37DBA9CCD2150F46FF49142DE3F422B1CE5D7AC3B33300C7EE67C19299DB467E37EC6C5F3C6CD33BD98646C35B645528F6DC3FD356E49596989E444C6B8462A9F69DF7F83C26240D51AA7D1707DBFD92E1729794259D966D69F6934427F7C3A86706ECAE13ED69F4B104DD5BA70E36BE82EF52D6E8EE420C11E7C6ABEF4CBF61E61AD071243D6A8B13C4B107150C8D2DA91544D71F3F6B3108D25FD0A3116F65E92E45684BFD7EE7D939CEF0A02675B5B44DED75E336CF2ECC39C72458930E48DDAC2AF194C79EA0CE4EB5181549EFB8B098F9768119B42932945C782512FDE8BD6C39E3BF76120BB926CACE17DFADFE9FECAAEE6ED339C87C05CA8EC214FE9000A6D72A2602DE6110BAF0AB5E30AADB07F53402DD333 From 1cd67ee15ce3d192ab51be22bc4872a6a7a4b6d9 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 12 Mar 2021 13:16:10 +1100 Subject: [PATCH 0285/1788] Move generic includes outside of ifdef. This ensures that the macros in log.h are defined in the case where either of --with-solaris-projects or --with-solaris-privs are used without --with-solaris-contracts. bz#3278. --- openbsd-compat/port-solaris.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openbsd-compat/port-solaris.c b/openbsd-compat/port-solaris.c index 7d5a28cd0b12..b84fbff5e7f5 100644 --- a/openbsd-compat/port-solaris.c +++ b/openbsd-compat/port-solaris.c @@ -17,8 +17,6 @@ #include "config.h" #include "includes.h" -#ifdef USE_SOLARIS_PROCESS_CONTRACTS - #include #include #include @@ -31,12 +29,14 @@ #include #include +#include "log.h" + +#ifdef USE_SOLARIS_PROCESS_CONTRACTS + #include #include #include -#include "log.h" - #define CT_TEMPLATE CTFS_ROOT "/process/template" #define CT_LATEST CTFS_ROOT "/process/latest" From 82fef71e20ffef425b932bec26f5bc46aa1ed41c Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 12 Mar 2021 15:58:57 +1100 Subject: [PATCH 0286/1788] Allow (but return EACCES) fstatat64 in sandbox. This is apparently used in some configurations of OpenSSL when glibc has getrandom(). bz#3276, patch from Kris Karas, ok djm@ --- sandbox-seccomp-filter.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c index d8dc7120bdd4..7981c84ad10c 100644 --- a/sandbox-seccomp-filter.c +++ b/sandbox-seccomp-filter.c @@ -154,6 +154,9 @@ static const struct sock_filter preauth_insns[] = { #ifdef __NR_fstat64 SC_DENY(__NR_fstat64, EACCES), #endif +#ifdef __NR_fstatat64 + SC_DENY(__NR_fstatat64, EACCES), +#endif #ifdef __NR_open SC_DENY(__NR_open, EACCES), #endif From 721948e67488767df0fa0db71ff2578ee2bb9210 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Sat, 13 Mar 2021 01:52:16 +0000 Subject: [PATCH 0287/1788] upstream: Add TEST_SSH_MODULI_FILE variable to allow overriding of the moduli file used during the test run. OpenBSD-Regress-ID: be10f785263120edb64fc87db0e0d6570a10220a --- regress/test-exec.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/regress/test-exec.sh b/regress/test-exec.sh index 11475938bed6..4d04e04b1978 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -1,4 +1,4 @@ -# $OpenBSD: test-exec.sh,v 1.77 2021/02/17 03:59:00 dtucker Exp $ +# $OpenBSD: test-exec.sh,v 1.78 2021/03/13 01:52:16 dtucker Exp $ # Placed in the Public Domain. #SUDO=sudo @@ -470,7 +470,7 @@ EOF # but if you aren't careful with permissions then the unit tests could # be abused to locally escalate privileges. if [ ! -z "$TEST_SSH_UNSAFE_PERMISSIONS" ]; then - echo "StrictModes no" >> $OBJ/sshd_config + echo " StrictModes no" >> $OBJ/sshd_config else # check and warn if excessive permissions are likely to cause failures. unsafe="" @@ -498,6 +498,11 @@ EOD fi fi +if [ ! -z "$TEST_SSH_MODULI_FILE" ]; then + trace "adding modulifile='$TEST_SSH_MODULI_FILE' to sshd_config" + echo " ModuliFile '$TEST_SSH_MODULI_FILE'" >> $OBJ/sshd_config +fi + if [ ! -z "$TEST_SSH_SSHD_CONFOPTS" ]; then trace "adding sshd_config option $TEST_SSH_SSHD_CONFOPTS" echo "$TEST_SSH_SSHD_CONFOPTS" >> $OBJ/sshd_config From e5895e8ecfac65086ea6b34d0d168409a66a15e1 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 10 Mar 2021 04:58:45 +0000 Subject: [PATCH 0288/1788] upstream: no need to reset buffer after send_msg() as that is done for us; patch from Mike Frysinger OpenBSD-Commit-ID: 565516495ff8362a38231e0f1a087b8ae66da59c --- sftp-client.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sftp-client.c b/sftp-client.c index 4603b0098779..7465c3d972e0 100644 --- a/sftp-client.c +++ b/sftp-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.c,v 1.139 2020/12/04 02:41:10 djm Exp $ */ +/* $OpenBSD: sftp-client.c,v 1.140 2021/03/10 04:58:45 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -418,8 +418,6 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, send_msg(ret, msg); - sshbuf_reset(msg); - get_msg_extended(ret, msg, 1); /* Expecting a VERSION reply */ From 69d6d4b0c8a88d3d1288415605f36e2df61a2f12 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Wed, 10 Mar 2021 06:32:27 +0000 Subject: [PATCH 0289/1788] upstream: Import regenerated moduli file. OpenBSD-Commit-ID: 7ac6c252d2a5be8fbad4c66d9d35db507c9dac5b --- .skipped-commit-ids | 1 + 1 file changed, 1 insertion(+) diff --git a/.skipped-commit-ids b/.skipped-commit-ids index 495dbf1d1df3..1de78172232a 100644 --- a/.skipped-commit-ids +++ b/.skipped-commit-ids @@ -22,6 +22,7 @@ d9b910e412d139141b072a905e66714870c38ac0 Makefile.inc 52ff0e3205036147b2499889353ac082e505ea54 moduli update 07b5031e9f49f2b69ac5e85b8da4fc9e393992a0 Makefile.inc cc12a9029833d222043aecd252d654965c351a69 moduli-gen Makefile +7ac6c252d2a5be8fbad4c66d9d35db507c9dac5b moduli update Old upstream tree: From f07519a2af96109325b5a48b1af18b57601074ca Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 12 Mar 2021 03:43:40 +0000 Subject: [PATCH 0290/1788] upstream: pwcopy() struct passwd that we're going to reuse across a bunch of library calls; bz3273 ok dtucker@ OpenBSD-Commit-ID: b6eafa977b2e44607b1b121f5de855107809b762 --- ssh-keygen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ssh-keygen.c b/ssh-keygen.c index cfb5f1151661..a442dc8e8841 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.427 2020/12/20 23:36:51 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.428 2021/03/12 03:43:40 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -3154,6 +3154,7 @@ main(int argc, char **argv) pw = getpwuid(getuid()); if (!pw) fatal("No user exists for uid %lu", (u_long)getuid()); + pw = pwcopy(pw); if (gethostname(hostname, sizeof(hostname)) == -1) fatal("gethostname: %s", strerror(errno)); From 88057eb6df912abf2678ea5c846d9d9cbc92752c Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 12 Mar 2021 04:08:19 +0000 Subject: [PATCH 0291/1788] upstream: Add ModuliFile keyword to sshd_config to specify the location of the "moduli" file containing the groups for DH-GEX. This will allow us to run tests against arbitrary moduli files without having to install them. ok djm@ OpenBSD-Commit-ID: 8df99d60b14ecaaa28f3469d01fc7f56bff49f66 --- dh.c | 23 ++++++++++++++++++----- dh.h | 3 ++- servconf.c | 12 ++++++++++-- servconf.h | 3 ++- sshd.c | 6 +++++- sshd_config.5 | 14 ++++++++++++-- 6 files changed, 49 insertions(+), 12 deletions(-) diff --git a/dh.c b/dh.c index b5bb35e48243..82590f68881a 100644 --- a/dh.c +++ b/dh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dh.c,v 1.72 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: dh.c,v 1.73 2021/03/12 04:08:19 dtucker Exp $ */ /* * Copyright (c) 2000 Niels Provos. All rights reserved. * @@ -45,6 +45,18 @@ #include "openbsd-compat/openssl-compat.h" +static const char *moduli_filename; + +void dh_set_moduli_file(const char *filename) +{ + moduli_filename = filename; +} + +static const char * get_moduli_filename(void) +{ + return moduli_filename ? moduli_filename : _PATH_DH_MODULI; +} + static int parse_prime(int linenum, char *line, struct dhgroup *dhg) { @@ -152,9 +164,9 @@ choose_dh(int min, int wantbits, int max) int best, bestcount, which, linenum; struct dhgroup dhg; - if ((f = fopen(_PATH_DH_MODULI, "r")) == NULL) { + if ((f = fopen(get_moduli_filename(), "r")) == NULL) { logit("WARNING: could not open %s (%s), using fixed modulus", - _PATH_DH_MODULI, strerror(errno)); + get_moduli_filename(), strerror(errno)); return (dh_new_group_fallback(max)); } @@ -185,7 +197,8 @@ choose_dh(int min, int wantbits, int max) if (bestcount == 0) { fclose(f); - logit("WARNING: no suitable primes in %s", _PATH_DH_MODULI); + logit("WARNING: no suitable primes in %s", + get_moduli_filename()); return (dh_new_group_fallback(max)); } which = arc4random_uniform(bestcount); @@ -210,7 +223,7 @@ choose_dh(int min, int wantbits, int max) fclose(f); if (bestcount != which + 1) { logit("WARNING: selected prime disappeared in %s, giving up", - _PATH_DH_MODULI); + get_moduli_filename()); return (dh_new_group_fallback(max)); } diff --git a/dh.h b/dh.h index 5d6df6297011..c6326a39d532 100644 --- a/dh.h +++ b/dh.h @@ -1,4 +1,4 @@ -/* $OpenBSD: dh.h,v 1.18 2019/09/06 05:23:55 djm Exp $ */ +/* $OpenBSD: dh.h,v 1.19 2021/03/12 04:08:19 dtucker Exp $ */ /* * Copyright (c) 2000 Niels Provos. All rights reserved. @@ -47,6 +47,7 @@ int dh_gen_key(DH *, int); int dh_pub_is_valid(const DH *, const BIGNUM *); u_int dh_estimate(int); +void dh_set_moduli_file(const char *); /* * Max value from RFC4419. diff --git a/servconf.c b/servconf.c index 9695583a0f85..4cc936ddca19 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.377 2021/02/24 01:18:08 dtucker Exp $ */ +/* $OpenBSD: servconf.c,v 1.378 2021/03/12 04:08:19 dtucker Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -305,6 +305,8 @@ fill_default_server_options(ServerOptions *options) add_listen_addr(options, NULL, NULL, 0); if (options->pid_file == NULL) options->pid_file = xstrdup(_PATH_SSH_DAEMON_PID_FILE); + if (options->moduli_file == NULL) + options->moduli_file = xstrdup(_PATH_DH_MODULI); if (options->login_grace_time == -1) options->login_grace_time = 120; if (options->permit_root_login == PERMIT_NOT_SET) @@ -500,7 +502,7 @@ typedef enum { sPermitTTY, sStrictModes, sEmptyPasswd, sTCPKeepAlive, sPermitUserEnvironment, sAllowTcpForwarding, sCompression, sRekeyLimit, sAllowUsers, sDenyUsers, sAllowGroups, sDenyGroups, - sIgnoreUserKnownHosts, sCiphers, sMacs, sPidFile, + sIgnoreUserKnownHosts, sCiphers, sMacs, sPidFile, sModuliFile, sGatewayPorts, sPubkeyAuthentication, sPubkeyAcceptedAlgorithms, sXAuthLocation, sSubsystem, sMaxStartups, sMaxAuthTries, sMaxSessions, sBanner, sUseDNS, sHostbasedAuthentication, @@ -548,6 +550,7 @@ static struct { { "hostdsakey", sHostKeyFile, SSHCFG_GLOBAL }, /* alias */ { "hostkeyagent", sHostKeyAgent, SSHCFG_GLOBAL }, { "pidfile", sPidFile, SSHCFG_GLOBAL }, + { "modulifile", sModuliFile, SSHCFG_GLOBAL }, { "serverkeybits", sDeprecated, SSHCFG_GLOBAL }, { "logingracetime", sLoginGraceTime, SSHCFG_GLOBAL }, { "keyregenerationinterval", sDeprecated, SSHCFG_GLOBAL }, @@ -1451,6 +1454,10 @@ process_server_config_line_depth(ServerOptions *options, char *line, } break; + case sModuliFile: + charptr = &options->moduli_file; + goto parse_filename; + case sPermitRootLogin: intptr = &options->permit_root_login; multistate_ptr = multistate_permitrootlogin; @@ -2875,6 +2882,7 @@ dump_config(ServerOptions *o) /* string arguments */ dump_cfg_string(sPidFile, o->pid_file); + dump_cfg_string(sModuliFile, o->moduli_file); dump_cfg_string(sXAuthLocation, o->xauth_location); dump_cfg_string(sCiphers, o->ciphers); dump_cfg_string(sMacs, o->macs); diff --git a/servconf.h b/servconf.h index 4f4fd9ba4686..3ce9284fe4b5 100644 --- a/servconf.h +++ b/servconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: servconf.h,v 1.151 2021/01/26 05:32:21 dtucker Exp $ */ +/* $OpenBSD: servconf.h,v 1.152 2021/03/12 04:08:19 dtucker Exp $ */ /* * Author: Tatu Ylonen @@ -93,6 +93,7 @@ typedef struct { char *host_key_agent; /* ssh-agent socket for host keys. */ char *pid_file; /* Where to put our pid */ + char *moduli_file; /* moduli file for DH-GEX */ int login_grace_time; /* Disconnect if no auth in this time * (sec). */ int permit_root_login; /* PERMIT_*, see above */ diff --git a/sshd.c b/sshd.c index 6277e6d6db89..bda7455fd707 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.570 2021/02/05 02:20:23 dtucker Exp $ */ +/* $OpenBSD: sshd.c,v 1.571 2021/03/12 04:08:19 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -124,6 +124,7 @@ #include "ssherr.h" #include "sk-api.h" #include "srclimit.h" +#include "dh.h" /* Re-exec fds */ #define REEXEC_DEVCRYPTO_RESERVED_FD (STDERR_FILENO + 1) @@ -1724,6 +1725,9 @@ main(int ac, char **av) parse_server_config(&options, rexeced_flag ? "rexec" : config_file_name, cfg, &includes, NULL); + if (options.moduli_file != NULL) + dh_set_moduli_file(options.moduli_file); + /* Fill in default values for those options not explicitly set. */ fill_default_server_options(&options); diff --git a/sshd_config.5 b/sshd_config.5 index 3db9353c9118..c3a67e1868b8 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.328 2021/02/27 23:42:37 djm Exp $ -.Dd $Mdocdate: February 27 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.329 2021/03/12 04:08:19 dtucker Exp $ +.Dd $Mdocdate: March 12 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -1256,6 +1256,16 @@ will refuse connection attempts with a probability of rate/100 (30%) if there are currently start (10) unauthenticated connections. The probability increases linearly and all connection attempts are refused if the number of unauthenticated connections reaches full (60). +.It Cm ModuliFile +Specifies the +.Xr moduli 5 +file that contains the Diffie-Hellman groups used for the +.Dq diffie-hellman-group-exchange-sha1 +and +.Dq diffie-hellman-group-exchange-sha256 +key exchange methods. +The default is +.Pa /etc/moduli . .It Cm PasswordAuthentication Specifies whether password authentication is allowed. The default is From 4d48219c72ab0c71238806f057f0e9630b7dd25c Mon Sep 17 00:00:00 2001 From: "jsg@openbsd.org" Date: Fri, 12 Mar 2021 05:18:01 +0000 Subject: [PATCH 0292/1788] upstream: spelling OpenBSD-Commit-ID: 478bc3db04f62f1048ed6e1765400f3ab325e60f --- ssh_config.5 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index f81191890547..c5f12af89e61 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.349 2021/02/28 22:56:30 dtucker Exp $ -.Dd $Mdocdate: February 28 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.350 2021/03/12 05:18:01 jsg Exp $ +.Dd $Mdocdate: March 12 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1977,7 +1977,7 @@ The local user ID. .It %K The base64 encoded host key. .It %k -The host key alias if specified, otherwise the orignal remote hostname given +The host key alias if specified, otherwise the original remote hostname given on the command line. .It %L The local hostname. From 0c054538fccf92b4a028008321d3711107bee6d5 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 13 Mar 2021 13:51:26 +1100 Subject: [PATCH 0293/1788] Point TEST_SSH_MODULI_FILE at our own moduli. This will allow the test to run without requiring a moduli file installed at the configured default path. --- Makefile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile.in b/Makefile.in index e3cd296cabb0..15db373d22a2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -16,6 +16,7 @@ sysconfdir=@sysconfdir@ piddir=@piddir@ srcdir=@srcdir@ top_srcdir=@top_srcdir@ +abs_top_srcdir=@abs_top_srcdir@ DESTDIR= VPATH=@srcdir@ @@ -699,6 +700,7 @@ interop-tests t-exec file-tests: regress-prep regress-binaries $(TARGETS) TEST_SSH_PKCS11_HELPER="$${BUILDDIR}/ssh-pkcs11-helper" \ TEST_SSH_SK_HELPER="$${BUILDDIR}/ssh-sk-helper" \ TEST_SSH_SFTPSERVER="$${BUILDDIR}/sftp-server" \ + TEST_SSH_MODULI_FILE="$(abs_top_srcdir)/moduli" \ TEST_SSH_PLINK="plink" \ TEST_SSH_PUTTYGEN="puttygen" \ TEST_SSH_CONCH="conch" \ From 867a7dcf003c51d5a83f83565771a35f0d9530ac Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 13 Mar 2021 13:52:53 +1100 Subject: [PATCH 0294/1788] Don't install moduli during tests. Now that we have TEST_SSH_MODULI_FILE pointing to the moduli in the soure directory we don't need to install the file to prevent warnings about it being missing. --- .github/workflows/c-cpp.yml | 2 -- .github/workflows/selfhosted.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index c2e9c5327ecb..f3fc475c761b 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -46,8 +46,6 @@ jobs: run: ./.github/configure.sh ${{ matrix.configs }} - name: make run: make -j2 - - name: install moduli - run: sudo sh -c "mkdir -p /usr/local/etc/; cp moduli /usr/local/etc/" - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index aadcb42b4ddc..c96d0994118c 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -51,8 +51,6 @@ jobs: config.log - name: make run: vmrun make - - name: install moduli - run: vmrun "sudo mkdir -p /usr/local/etc/; sudo cp moduli /usr/local/etc/" - name: make tests run: vmrun ./.github/run_test.sh ${{ matrix.configs }} - name: save regress logs From 5ca8a9216559349c56e09039c4335636fd85c241 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 13 Mar 2021 14:40:43 +1100 Subject: [PATCH 0295/1788] Only call dh_set_moduli_file if using OpenSSL. Fixes link failure when configuring --without-openssl since dh.c is not linked in. --- sshd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sshd.c b/sshd.c index bda7455fd707..32dd4dd4db8a 100644 --- a/sshd.c +++ b/sshd.c @@ -1725,8 +1725,10 @@ main(int ac, char **av) parse_server_config(&options, rexeced_flag ? "rexec" : config_file_name, cfg, &includes, NULL); +#ifdef WITH_OPENSSL if (options.moduli_file != NULL) dh_set_moduli_file(options.moduli_file); +#endif /* Fill in default values for those options not explicitly set. */ fill_default_server_options(&options); From 860b67604416640e8db14f365adc3f840aebcb1f Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 16 Mar 2021 06:15:43 +0000 Subject: [PATCH 0296/1788] upstream: don't let logging clobber errno before use OpenBSD-Commit-ID: ce6cca370005c270c277c51c111bb6911e1680ec --- sftp-server.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sftp-server.c b/sftp-server.c index 7300900ace62..752820f5cec4 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-server.c,v 1.122 2021/02/18 00:30:17 djm Exp $ */ +/* $OpenBSD: sftp-server.c,v 1.123 2021/03/16 06:15:43 djm Exp $ */ /* * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * @@ -807,15 +807,17 @@ process_write(u_int32_t id) status = SSH2_FX_FAILURE; else { if (!(handle_to_flags(handle) & O_APPEND) && - lseek(fd, off, SEEK_SET) == -1) { + lseek(fd, off, SEEK_SET) == -1) { status = errno_to_portable(errno); - error_f("seek failed"); + error_f("seek \"%.100s\": %s", handle_to_name(handle), + strerror(errno)); } else { /* XXX ATOMICIO ? */ ret = write(fd, data, len); if (ret == -1) { - error_f("write: %s", strerror(errno)); status = errno_to_portable(errno); + error_f("write \"%.100s\": %s", + handle_to_name(handle), strerror(errno)); } else if ((size_t)ret == len) { status = SSH2_FX_OK; handle_update_write(handle, ret); From 1269b8a686bf1254b03cd38af78167a04aa6ec88 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 19 Mar 2021 02:18:28 +0000 Subject: [PATCH 0297/1788] upstream: increase maximum SSH2_FXP_READ to match the maximum packet size. Also handle zero-length reads that are borderline nonsensical but not explicitly banned by the spec. Based on patch from Mike Frysinger, feedback deraadt@ ok dtucker@ OpenBSD-Commit-ID: 4e67d60d81bde7b84a742b4ee5a34001bdf80d9c --- sftp-server.c | 62 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/sftp-server.c b/sftp-server.c index 752820f5cec4..4cf856235e1c 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-server.c,v 1.123 2021/03/16 06:15:43 djm Exp $ */ +/* $OpenBSD: sftp-server.c,v 1.124 2021/03/19 02:18:28 djm Exp $ */ /* * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * @@ -55,7 +55,7 @@ char *sftp_realpath(const char *, char *); /* sftp-realpath.c */ /* Maximum data read that we are willing to accept */ -#define SFTP_MAX_READ_LENGTH (64 * 1024) +#define SFTP_MAX_READ_LENGTH (SFTP_MAX_MSG_LENGTH - 1024) /* Our verbosity */ static LogLevel log_level = SYSLOG_LEVEL_ERROR; @@ -748,7 +748,8 @@ process_close(u_int32_t id) static void process_read(u_int32_t id) { - u_char buf[SFTP_MAX_READ_LENGTH]; + static u_char *buf; + static size_t buflen; u_int32_t len; int r, handle, fd, ret, status = SSH2_FX_FAILURE; u_int64_t off; @@ -758,30 +759,43 @@ process_read(u_int32_t id) (r = sshbuf_get_u32(iqueue, &len)) != 0) fatal_fr(r, "parse"); - debug("request %u: read \"%s\" (handle %d) off %llu len %d", + debug("request %u: read \"%s\" (handle %d) off %llu len %u", id, handle_to_name(handle), handle, (unsigned long long)off, len); - if (len > sizeof buf) { - len = sizeof buf; - debug2("read change len %d", len); + if ((fd = handle_to_fd(handle)) == -1) + goto out; + if (len > SFTP_MAX_READ_LENGTH) { + debug2("read change len %u to %u", len, SFTP_MAX_READ_LENGTH); + len = SFTP_MAX_READ_LENGTH; } - fd = handle_to_fd(handle); - if (fd >= 0) { - if (lseek(fd, off, SEEK_SET) == -1) { - error("process_read: seek failed"); - status = errno_to_portable(errno); - } else { - ret = read(fd, buf, len); - if (ret == -1) { - status = errno_to_portable(errno); - } else if (ret == 0) { - status = SSH2_FX_EOF; - } else { - send_data(id, buf, ret); - status = SSH2_FX_OK; - handle_update_read(handle, ret); - } - } + if (len > buflen) { + debug3_f("allocate %zu => %u", buflen, len); + if ((buf = realloc(NULL, len)) == NULL) + fatal_f("realloc failed"); + buflen = len; } + if (lseek(fd, off, SEEK_SET) == -1) { + status = errno_to_portable(errno); + error_f("seek \"%.100s\": %s", handle_to_name(handle), + strerror(errno)); + goto out; + } + if (len == 0) { + /* weird, but not strictly disallowed */ + ret = 0; + } else if ((ret = read(fd, buf, len)) == -1) { + status = errno_to_portable(errno); + error_f("read \"%.100s\": %s", handle_to_name(handle), + strerror(errno)); + goto out; + } else if (ret == 0) { + status = SSH2_FX_EOF; + goto out; + } + send_data(id, buf, ret); + handle_update_read(handle, ret); + /* success */ + status = SSH2_FX_OK; + out: if (status != SSH2_FX_OK) send_status(id, status); } From 8a9520836e71830f4fccca066dba73fea3d16bda Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 19 Mar 2021 02:22:34 +0000 Subject: [PATCH 0298/1788] upstream: return non-zero exit status when killed by signal; bz#3281 ok dtucker@ OpenBSD-Commit-ID: 117b31cf3c807993077b596bd730c24da9e9b816 --- clientloop.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clientloop.c b/clientloop.c index 70f492f89371..941c150f94ce 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.358 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.359 2021/03/19 02:22:34 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1423,7 +1423,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, if (received_signal) { verbose("Killed by signal %d.", (int) received_signal); - cleanup_exit(0); + cleanup_exit(255); } /* From 71241fc05db4bbb11bb29340b44b92e2575373d8 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Mon, 29 Mar 2021 15:14:25 +1100 Subject: [PATCH 0299/1788] gnome-ssh-askpass3 is a valid target here --- contrib/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/Makefile b/contrib/Makefile index 3a36387b3222..1cc5b63012b7 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -1,7 +1,7 @@ PKG_CONFIG = pkg-config all: - @echo "Valid targets: gnome-ssh-askpass1 gnome-ssh-askpass2" + @echo "Valid targets: gnome-ssh-askpass1 gnome-ssh-askpass2 gnome-ssk-askpass3" gnome-ssh-askpass1: gnome-ssh-askpass1.c $(CC) $(CFLAGS) `gnome-config --cflags gnome gnomeui` \ From 6653c61202d104e59c8e741329fcc567f7bc36b8 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 31 Mar 2021 21:58:07 +0000 Subject: [PATCH 0300/1788] upstream: do not advertise protocol extensions that have been disallowed by the command-line options (e.g. -p/-P/-R); ok dtucker@ OpenBSD-Commit-ID: 3a8a76b3f5131741aca4b41bfab8d101c9926205 --- sftp-server.c | 86 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 33 deletions(-) diff --git a/sftp-server.c b/sftp-server.c index 4cf856235e1c..e602af215149 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-server.c,v 1.124 2021/03/19 02:18:28 djm Exp $ */ +/* $OpenBSD: sftp-server.c,v 1.125 2021/03/31 21:58:07 djm Exp $ */ /* * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * @@ -161,6 +161,18 @@ static const struct sftp_handler extended_handlers[] = { { NULL, NULL, 0, NULL, 0 } }; +static const struct sftp_handler * +extended_handler_byname(const char *name) +{ + int i; + + for (i = 0; extended_handlers[i].handler != NULL; i++) { + if (strcmp(name, extended_handlers[i].ext_name) == 0) + return &extended_handlers[i]; + } + return NULL; +} + static int request_permitted(const struct sftp_handler *h) { @@ -647,6 +659,28 @@ send_statvfs(u_int32_t id, struct statvfs *st) sshbuf_free(msg); } +/* + * Prepare SSH2_FXP_VERSION extension advertisement for a single extension. + * The extension is checked for permission prior to advertisment. + */ +static int +compose_extension(struct sshbuf *msg, const char *name, const char *ver) +{ + int r; + const struct sftp_handler *exthnd; + + if ((exthnd = extended_handler_byname(name)) == NULL) + fatal_f("internal error: no handler for %s", name); + if (!request_permitted(exthnd)) { + debug2_f("refusing to advertise disallowed extension %s", name); + return 0; + } + if ((r = sshbuf_put_cstring(msg, name)) != 0 || + (r = sshbuf_put_cstring(msg, ver)) != 0) + fatal_fr(r, "compose %s", name); + return 0; +} + /* parse incoming */ static void @@ -661,29 +695,18 @@ process_init(void) if ((msg = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u8(msg, SSH2_FXP_VERSION)) != 0 || - (r = sshbuf_put_u32(msg, SSH2_FILEXFER_VERSION)) != 0 || - /* POSIX rename extension */ - (r = sshbuf_put_cstring(msg, "posix-rename@openssh.com")) != 0 || - (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ - /* statvfs extension */ - (r = sshbuf_put_cstring(msg, "statvfs@openssh.com")) != 0 || - (r = sshbuf_put_cstring(msg, "2")) != 0 || /* version */ - /* fstatvfs extension */ - (r = sshbuf_put_cstring(msg, "fstatvfs@openssh.com")) != 0 || - (r = sshbuf_put_cstring(msg, "2")) != 0 || /* version */ - /* hardlink extension */ - (r = sshbuf_put_cstring(msg, "hardlink@openssh.com")) != 0 || - (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ - /* fsync extension */ - (r = sshbuf_put_cstring(msg, "fsync@openssh.com")) != 0 || - (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ - /* lsetstat extension */ - (r = sshbuf_put_cstring(msg, "lsetstat@openssh.com")) != 0 || - (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ - /* limits extension */ - (r = sshbuf_put_cstring(msg, "limits@openssh.com")) != 0 || - (r = sshbuf_put_cstring(msg, "1")) != 0) /* version */ + (r = sshbuf_put_u32(msg, SSH2_FILEXFER_VERSION)) != 0) fatal_fr(r, "compose"); + + /* extension advertisments */ + compose_extension(msg, "posix-rename@openssh.com", "1"); + compose_extension(msg, "statvfs@openssh.com", "2"); + compose_extension(msg, "fstatvfs@openssh.com", "2"); + compose_extension(msg, "hardlink@openssh.com", "1"); + compose_extension(msg, "fsync@openssh.com", "1"); + compose_extension(msg, "lsetstat@openssh.com", "1"); + compose_extension(msg, "limits@openssh.com", "1"); + send_msg(msg); sshbuf_free(msg); } @@ -1497,21 +1520,18 @@ process_extended(u_int32_t id) { char *request; int i, r; + const struct sftp_handler *exthand; if ((r = sshbuf_get_cstring(iqueue, &request, NULL)) != 0) fatal_fr(r, "parse"); - for (i = 0; extended_handlers[i].handler != NULL; i++) { - if (strcmp(request, extended_handlers[i].ext_name) == 0) { - if (!request_permitted(&extended_handlers[i])) - send_status(id, SSH2_FX_PERMISSION_DENIED); - else - extended_handlers[i].handler(id); - break; - } - } - if (extended_handlers[i].handler == NULL) { + if ((exthand = extended_handler_byname(request)) == NULL) { error("Unknown extended request \"%.100s\"", request); send_status(id, SSH2_FX_OP_UNSUPPORTED); /* MUST */ + } else { + if (!request_permitted(exthand)) + send_status(id, SSH2_FX_PERMISSION_DENIED); + else + exthand->handler(id); } free(request); } From 1339800fef8d0dfbfeabff71b34670105bcfddd2 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 31 Mar 2021 22:16:34 +0000 Subject: [PATCH 0301/1788] upstream: Use new limits@openssh.com protocol extension to let the client select good limits based on what the server supports. Split the download and upload buffer sizes to allow them to be chosen independently. In practice (and assuming upgraded sftp/sftp-server at each end), this increases the download buffer 32->64KiB and the upload buffer 32->255KiB. Patches from Mike Frysinger; ok dtucker@ OpenBSD-Commit-ID: ebd61c80d85b951b794164acc4b2f2fd8e88606c --- sftp-client.c | 111 +++++++++++++++++++++++++++++++++++++++++++++----- sftp-client.h | 13 +++++- sftp.c | 9 ++-- 3 files changed, 115 insertions(+), 18 deletions(-) diff --git a/sftp-client.c b/sftp-client.c index 7465c3d972e0..c76032c82abf 100644 --- a/sftp-client.c +++ b/sftp-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.c,v 1.140 2021/03/10 04:58:45 djm Exp $ */ +/* $OpenBSD: sftp-client.c,v 1.141 2021/03/31 22:16:34 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -61,6 +61,12 @@ extern volatile sig_atomic_t interrupted; extern int showprogress; +/* Default size of buffer for up/download */ +#define DEFAULT_COPY_BUFLEN 32768 + +/* Default number of concurrent outstanding requests */ +#define DEFAULT_NUM_REQUESTS 64 + /* Minimum amount of data to read at a time */ #define MIN_READ_SIZE 512 @@ -77,7 +83,8 @@ extern int showprogress; struct sftp_conn { int fd_in; int fd_out; - u_int transfer_buflen; + u_int download_buflen; + u_int upload_buflen; u_int num_requests; u_int version; u_int msg_id; @@ -87,6 +94,7 @@ struct sftp_conn { #define SFTP_EXT_HARDLINK 0x00000008 #define SFTP_EXT_FSYNC 0x00000010 #define SFTP_EXT_LSETSTAT 0x00000020 +#define SFTP_EXT_LIMITS 0x00000040 u_int exts; u_int64_t limit_kbps; struct bwlimit bwlimit_in, bwlimit_out; @@ -405,8 +413,10 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, ret->msg_id = 1; ret->fd_in = fd_in; ret->fd_out = fd_out; - ret->transfer_buflen = transfer_buflen; - ret->num_requests = num_requests; + ret->download_buflen = ret->upload_buflen = + transfer_buflen ? transfer_buflen : DEFAULT_COPY_BUFLEN; + ret->num_requests = + num_requests ? num_requests : DEFAULT_NUM_REQUESTS; ret->exts = 0; ret->limit_kbps = 0; @@ -469,6 +479,10 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, strcmp((char *)value, "1") == 0) { ret->exts |= SFTP_EXT_LSETSTAT; known = 1; + } else if (strcmp(name, "limits@openssh.com") == 0 && + strcmp((char *)value, "1") == 0) { + ret->exts |= SFTP_EXT_LIMITS; + known = 1; } if (known) { debug2("Server supports extension \"%s\" revision %s", @@ -482,16 +496,41 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, sshbuf_free(msg); + /* Query the server for its limits */ + if (ret->exts & SFTP_EXT_LIMITS) { + struct sftp_limits limits; + if (do_limits(ret, &limits) != 0) + fatal_f("limits failed"); + + /* If the caller did not specify, find a good value */ + if (transfer_buflen == 0) { + ret->download_buflen = limits.read_length; + ret->upload_buflen = limits.write_length; + debug("Using server download size %u", ret->download_buflen); + debug("Using server upload size %u", ret->upload_buflen); + } + + /* Use the server limit to scale down our value only */ + if (num_requests == 0 && limits.open_handles) { + ret->num_requests = + MINIMUM(DEFAULT_NUM_REQUESTS, limits.open_handles); + debug("Server handle limit %llu; using %u", + (unsigned long long)limits.open_handles, ret->num_requests); + } + } + /* Some filexfer v.0 servers don't support large packets */ - if (ret->version == 0) - ret->transfer_buflen = MINIMUM(ret->transfer_buflen, 20480); + if (ret->version == 0) { + ret->download_buflen = MINIMUM(ret->download_buflen, 20480); + ret->upload_buflen = MINIMUM(ret->upload_buflen, 20480); + } ret->limit_kbps = limit_kbps; if (ret->limit_kbps > 0) { bandwidth_limit_init(&ret->bwlimit_in, ret->limit_kbps, - ret->transfer_buflen); + ret->download_buflen); bandwidth_limit_init(&ret->bwlimit_out, ret->limit_kbps, - ret->transfer_buflen); + ret->upload_buflen); } return ret; @@ -503,6 +542,56 @@ sftp_proto_version(struct sftp_conn *conn) return conn->version; } +int +do_limits(struct sftp_conn *conn, struct sftp_limits *limits) +{ + u_int id, msg_id; + u_char type; + struct sshbuf *msg; + int r; + + if ((conn->exts & SFTP_EXT_LIMITS) == 0) { + error("Server does not support limits@openssh.com extension"); + return -1; + } + + if ((msg = sshbuf_new()) == NULL) + fatal_f("sshbuf_new failed"); + + id = conn->msg_id++; + if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 || + (r = sshbuf_put_u32(msg, id)) != 0 || + (r = sshbuf_put_cstring(msg, "limits@openssh.com")) != 0) + fatal_fr(r, "compose"); + send_msg(conn, msg); + debug3("Sent message limits@openssh.com I:%u", id); + + get_msg(conn, msg); + + if ((r = sshbuf_get_u8(msg, &type)) != 0 || + (r = sshbuf_get_u32(msg, &msg_id)) != 0) + fatal_fr(r, "parse"); + + debug3("Received limits reply T:%u I:%u", type, msg_id); + if (id != msg_id) + fatal("ID mismatch (%u != %u)", msg_id, id); + if (type != SSH2_FXP_EXTENDED_REPLY) { + fatal("Expected SSH2_FXP_EXTENDED_REPLY(%u) packet, got %u", + SSH2_FXP_EXTENDED_REPLY, type); + } + + memset(limits, 0, sizeof(*limits)); + if ((r = sshbuf_get_u64(msg, &limits->packet_length)) != 0 || + (r = sshbuf_get_u64(msg, &limits->read_length)) != 0 || + (r = sshbuf_get_u64(msg, &limits->write_length)) != 0 || + (r = sshbuf_get_u64(msg, &limits->open_handles)) != 0) + fatal_fr(r, "parse limits"); + + sshbuf_free(msg); + + return 0; +} + int do_close(struct sftp_conn *conn, const u_char *handle, u_int handle_len) { @@ -1236,7 +1325,7 @@ do_download(struct sftp_conn *conn, const char *remote_path, else size = 0; - buflen = conn->transfer_buflen; + buflen = conn->download_buflen; if ((msg = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); @@ -1701,7 +1790,7 @@ do_upload(struct sftp_conn *conn, const char *local_path, } startid = ackid = id + 1; - data = xmalloc(conn->transfer_buflen); + data = xmalloc(conn->upload_buflen); /* Read from local and write to remote */ offset = progress_counter = (resume ? c->size : 0); @@ -1721,7 +1810,7 @@ do_upload(struct sftp_conn *conn, const char *local_path, if (interrupted || status != SSH2_FX_OK) len = 0; else do - len = read(local_fd, data, conn->transfer_buflen); + len = read(local_fd, data, conn->upload_buflen); while ((len == -1) && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)); diff --git a/sftp-client.h b/sftp-client.h index 32a24a3c4302..6f6c49fb2099 100644 --- a/sftp-client.h +++ b/sftp-client.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.h,v 1.29 2020/12/04 02:41:10 djm Exp $ */ +/* $OpenBSD: sftp-client.h,v 1.30 2021/03/31 22:16:34 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller @@ -53,6 +53,14 @@ struct sftp_statvfs { u_int64_t f_namemax; }; +/* Used for limits response on the wire from the server */ +struct sftp_limits { + u_int64_t packet_length; + u_int64_t read_length; + u_int64_t write_length; + u_int64_t open_handles; +}; + /* * Initialise a SSH filexfer connection. Returns NULL on error or * a pointer to a initialized sftp_conn struct on success. @@ -61,6 +69,9 @@ struct sftp_conn *do_init(int, int, u_int, u_int, u_int64_t); u_int sftp_proto_version(struct sftp_conn *); +/* Query server limits */ +int do_limits(struct sftp_conn *, struct sftp_limits *); + /* Close file referred to by 'handle' */ int do_close(struct sftp_conn *, const u_char *, u_int); diff --git a/sftp.c b/sftp.c index fb3c08d1958e..b9804b56678b 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.206 2021/01/08 02:44:14 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.207 2021/03/31 22:16:34 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -70,9 +70,6 @@ typedef void EditLine; #include "sftp-common.h" #include "sftp-client.h" -#define DEFAULT_COPY_BUFLEN 32768 /* Size of buffer for up/download */ -#define DEFAULT_NUM_REQUESTS 64 /* # concurrent outstanding requests */ - /* File to read commands from */ FILE* infile; @@ -2341,8 +2338,8 @@ main(int argc, char **argv) extern int optind; extern char *optarg; struct sftp_conn *conn; - size_t copy_buffer_len = DEFAULT_COPY_BUFLEN; - size_t num_requests = DEFAULT_NUM_REQUESTS; + size_t copy_buffer_len = 0; + size_t num_requests = 0; long long limit_kbps = 0; /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ From 473ddfc2d6b602cb2d1d897e0e5c204de145cd9a Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 19 Mar 2021 03:25:01 +0000 Subject: [PATCH 0302/1788] upstream: split OpenBSD-Regress-ID: f6c03c0e4c58b3b9e04b161757b8c10dc8378c34 --- regress/unittests/misc/test_convtime.c | 55 ++++++++++++++++ regress/unittests/misc/test_expand.c | 86 ++++++++++++++++++++++++++ regress/unittests/misc/test_parse.c | 82 ++++++++++++++++++++++++ 3 files changed, 223 insertions(+) create mode 100644 regress/unittests/misc/test_convtime.c create mode 100644 regress/unittests/misc/test_expand.c create mode 100644 regress/unittests/misc/test_parse.c diff --git a/regress/unittests/misc/test_convtime.c b/regress/unittests/misc/test_convtime.c new file mode 100644 index 000000000000..8da05a26181f --- /dev/null +++ b/regress/unittests/misc/test_convtime.c @@ -0,0 +1,55 @@ +/* $OpenBSD: test_convtime.c,v 1.1 2021/03/19 03:25:01 djm Exp $ */ +/* + * Regress test for misc time conversion functions. + * + * Placed in the public domain. + */ + +#include +#include +#include +#include +#include +#include + +#include "test_helper.h" + +#include "log.h" +#include "misc.h" + +void test_convtime(void); + +void +test_convtime(void) +{ + char buf[1024]; + + TEST_START("misc_convtime"); + ASSERT_INT_EQ(convtime("0"), 0); + ASSERT_INT_EQ(convtime("1"), 1); + ASSERT_INT_EQ(convtime("2s"), 2); + ASSERT_INT_EQ(convtime("3m"), 180); + ASSERT_INT_EQ(convtime("1m30"), 90); + ASSERT_INT_EQ(convtime("1m30s"), 90); + ASSERT_INT_EQ(convtime("1h1s"), 3601); + ASSERT_INT_EQ(convtime("1h30m"), 90 * 60); + ASSERT_INT_EQ(convtime("1d"), 24 * 60 * 60); + ASSERT_INT_EQ(convtime("1w"), 7 * 24 * 60 * 60); + ASSERT_INT_EQ(convtime("1w2d3h4m5"), 788645); + ASSERT_INT_EQ(convtime("1w2d3h4m5s"), 788645); + /* any negative number or error returns -1 */ + ASSERT_INT_EQ(convtime("-1"), -1); + ASSERT_INT_EQ(convtime(""), -1); + ASSERT_INT_EQ(convtime("trout"), -1); + ASSERT_INT_EQ(convtime("-77"), -1); + /* boundary conditions */ + snprintf(buf, sizeof buf, "%llu", (long long unsigned)INT_MAX); + ASSERT_INT_EQ(convtime(buf), INT_MAX); + snprintf(buf, sizeof buf, "%llu", (long long unsigned)INT_MAX + 1); + ASSERT_INT_EQ(convtime(buf), -1); + ASSERT_INT_EQ(convtime("3550w5d3h14m7s"), 2147483647); +#if INT_MAX == 2147483647 + ASSERT_INT_EQ(convtime("3550w5d3h14m8s"), -1); +#endif + TEST_DONE(); +} diff --git a/regress/unittests/misc/test_expand.c b/regress/unittests/misc/test_expand.c new file mode 100644 index 000000000000..2a5e1bf1a5da --- /dev/null +++ b/regress/unittests/misc/test_expand.c @@ -0,0 +1,86 @@ +/* $OpenBSD: test_expand.c,v 1.1 2021/03/19 03:25:01 djm Exp $ */ +/* + * Regress test for misc string expansion functions. + * + * Placed in the public domain. + */ + +#include +#include +#include +#include +#include +#include + +#include "test_helper.h" + +#include "log.h" +#include "misc.h" + +void test_expand(void); + +void +test_expand(void) +{ + int parseerr; + char *ret; + + TEST_START("dollar_expand"); + ASSERT_INT_EQ(setenv("FOO", "bar", 1), 0); + ASSERT_INT_EQ(setenv("BAR", "baz", 1), 0); + ASSERT_INT_EQ(unsetenv("BAZ"), 0); +#define ASSERT_DOLLAR_EQ(x, y) do { \ + char *str = dollar_expand(NULL, (x)); \ + ASSERT_STRING_EQ(str, (y)); \ + free(str); \ +} while(0) + ASSERT_DOLLAR_EQ("${FOO}", "bar"); + ASSERT_DOLLAR_EQ(" ${FOO}", " bar"); + ASSERT_DOLLAR_EQ("${FOO} ", "bar "); + ASSERT_DOLLAR_EQ(" ${FOO} ", " bar "); + ASSERT_DOLLAR_EQ("${FOO}${BAR}", "barbaz"); + ASSERT_DOLLAR_EQ(" ${FOO} ${BAR}", " bar baz"); + ASSERT_DOLLAR_EQ("${FOO}${BAR} ", "barbaz "); + ASSERT_DOLLAR_EQ(" ${FOO} ${BAR} ", " bar baz "); + ASSERT_DOLLAR_EQ("$", "$"); + ASSERT_DOLLAR_EQ(" $", " $"); + ASSERT_DOLLAR_EQ("$ ", "$ "); + + /* suppress error messages for error handing tests */ + log_init("test_misc", SYSLOG_LEVEL_QUIET, SYSLOG_FACILITY_AUTH, 1); + /* error checking, non existent variable */ + ret = dollar_expand(&parseerr, "a${BAZ}"); + ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 0); + ret = dollar_expand(&parseerr, "${BAZ}b"); + ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 0); + ret = dollar_expand(&parseerr, "a${BAZ}b"); + ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 0); + /* invalid format */ + ret = dollar_expand(&parseerr, "${"); + ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 1); + ret = dollar_expand(&parseerr, "${F"); + ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 1); + ret = dollar_expand(&parseerr, "${FO"); + ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 1); + /* empty variable name */ + ret = dollar_expand(&parseerr, "${}"); + ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 1); + /* restore loglevel to default */ + log_init("test_misc", SYSLOG_LEVEL_INFO, SYSLOG_FACILITY_AUTH, 1); + TEST_DONE(); + + TEST_START("percent_expand"); + ASSERT_STRING_EQ(percent_expand("%%", "%h", "foo", NULL), "%"); + ASSERT_STRING_EQ(percent_expand("%h", "h", "foo", NULL), "foo"); + ASSERT_STRING_EQ(percent_expand("%h ", "h", "foo", NULL), "foo "); + ASSERT_STRING_EQ(percent_expand(" %h", "h", "foo", NULL), " foo"); + ASSERT_STRING_EQ(percent_expand(" %h ", "h", "foo", NULL), " foo "); + ASSERT_STRING_EQ(percent_expand(" %a%b ", "a", "foo", "b", "bar", NULL), + " foobar "); + TEST_DONE(); + + TEST_START("percent_dollar_expand"); + ASSERT_STRING_EQ(percent_dollar_expand("%h${FOO}", "h", "foo", NULL), + "foobar"); + TEST_DONE(); +} diff --git a/regress/unittests/misc/test_parse.c b/regress/unittests/misc/test_parse.c new file mode 100644 index 000000000000..6fa4558e22d8 --- /dev/null +++ b/regress/unittests/misc/test_parse.c @@ -0,0 +1,82 @@ +/* $OpenBSD: test_parse.c,v 1.1 2021/03/19 03:25:01 djm Exp $ */ +/* + * Regress test for misc user/host/URI parsing functions. + * + * Placed in the public domain. + */ + +#include +#include +#include +#include +#include +#include + +#include "test_helper.h" + +#include "log.h" +#include "misc.h" + +void test_parse(void); + +void +test_parse(void) +{ + int port; + char *user, *host, *path; + + TEST_START("misc_parse_user_host_path"); + ASSERT_INT_EQ(parse_user_host_path("someuser@some.host:some/path", + &user, &host, &path), 0); + ASSERT_STRING_EQ(user, "someuser"); + ASSERT_STRING_EQ(host, "some.host"); + ASSERT_STRING_EQ(path, "some/path"); + free(user); free(host); free(path); + TEST_DONE(); + + TEST_START("misc_parse_user_ipv4_path"); + ASSERT_INT_EQ(parse_user_host_path("someuser@1.22.33.144:some/path", + &user, &host, &path), 0); + ASSERT_STRING_EQ(user, "someuser"); + ASSERT_STRING_EQ(host, "1.22.33.144"); + ASSERT_STRING_EQ(path, "some/path"); + free(user); free(host); free(path); + TEST_DONE(); + + TEST_START("misc_parse_user_[ipv4]_path"); + ASSERT_INT_EQ(parse_user_host_path("someuser@[1.22.33.144]:some/path", + &user, &host, &path), 0); + ASSERT_STRING_EQ(user, "someuser"); + ASSERT_STRING_EQ(host, "1.22.33.144"); + ASSERT_STRING_EQ(path, "some/path"); + free(user); free(host); free(path); + TEST_DONE(); + + TEST_START("misc_parse_user_[ipv4]_nopath"); + ASSERT_INT_EQ(parse_user_host_path("someuser@[1.22.33.144]:", + &user, &host, &path), 0); + ASSERT_STRING_EQ(user, "someuser"); + ASSERT_STRING_EQ(host, "1.22.33.144"); + ASSERT_STRING_EQ(path, "."); + free(user); free(host); free(path); + TEST_DONE(); + + TEST_START("misc_parse_user_ipv6_path"); + ASSERT_INT_EQ(parse_user_host_path("someuser@[::1]:some/path", + &user, &host, &path), 0); + ASSERT_STRING_EQ(user, "someuser"); + ASSERT_STRING_EQ(host, "::1"); + ASSERT_STRING_EQ(path, "some/path"); + free(user); free(host); free(path); + TEST_DONE(); + + TEST_START("misc_parse_uri"); + ASSERT_INT_EQ(parse_uri("ssh", "ssh://someuser@some.host:22/some/path", + &user, &host, &port, &path), 0); + ASSERT_STRING_EQ(user, "someuser"); + ASSERT_STRING_EQ(host, "some.host"); + ASSERT_INT_EQ(port, 22); + ASSERT_STRING_EQ(path, "some/path"); + free(user); free(host); free(path); + TEST_DONE(); +} From 259d648e63e82ade4fe2c2c73c8b67fe57d9d049 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 19 Mar 2021 04:23:50 +0000 Subject: [PATCH 0303/1788] upstream: add a test for misc.c:argv_split(), currently fails OpenBSD-Regress-ID: ad6b96d6ebeb9643b698b3575bdd6f78bb144200 --- regress/unittests/misc/test_argv.c | 139 +++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 regress/unittests/misc/test_argv.c diff --git a/regress/unittests/misc/test_argv.c b/regress/unittests/misc/test_argv.c new file mode 100644 index 000000000000..0ce86694d38e --- /dev/null +++ b/regress/unittests/misc/test_argv.c @@ -0,0 +1,139 @@ +/* $OpenBSD: test_argv.c,v 1.1 2021/03/19 04:23:50 djm Exp $ */ +/* + * Regress test for misc argv handling functions. + * + * Placed in the public domain. + */ + +#include +#include +#include +#include +#include +#include + +#include "test_helper.h" + +#include "log.h" +#include "misc.h" + +void test_argv(void); + +static void +free_argv(char **av, int ac) +{ + int i; + + for (i = 0; i < ac; i++) + free(av[i]); + free(av); +} + +void +test_argv(void) +{ + char **av = NULL; + int ac = 0; + +#define RESET_ARGV() \ + do { \ + free_argv(av, ac); \ + av = NULL; \ + ac = -1; \ + } while (0) + + TEST_START("empty args"); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("", &ac, &av), 0); + ASSERT_INT_EQ(ac, 0); + ASSERT_PTR_NE(av, NULL); + ASSERT_PTR_EQ(av[0], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split(" ", &ac, &av), 0); + ASSERT_INT_EQ(ac, 0); + ASSERT_PTR_NE(av, NULL); + ASSERT_PTR_EQ(av[0], NULL); + TEST_DONE(); + + TEST_START("trivial args"); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("leamas", &ac, &av), 0); + ASSERT_INT_EQ(ac, 1); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "leamas"); + ASSERT_PTR_EQ(av[1], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("smiley leamas", &ac, &av), 0); + ASSERT_INT_EQ(ac, 2); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "smiley"); + ASSERT_STRING_EQ(av[1], "leamas"); + ASSERT_PTR_EQ(av[2], NULL); + TEST_DONE(); + + TEST_START("quoted"); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("\"smiley\"", &ac, &av), 0); + ASSERT_INT_EQ(ac, 1); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "smiley"); + ASSERT_PTR_EQ(av[1], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("leamas \" smiley \"", &ac, &av), 0); + ASSERT_INT_EQ(ac, 2); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "leamas"); + ASSERT_STRING_EQ(av[1], " smiley "); + ASSERT_PTR_EQ(av[2], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("\"smiley leamas\"", &ac, &av), 0); + ASSERT_INT_EQ(ac, 1); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "smiley leamas"); + ASSERT_PTR_EQ(av[1], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("smiley\" leamas\" liz", &ac, &av), 0); + ASSERT_INT_EQ(ac, 2); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "smiley leamas"); + ASSERT_STRING_EQ(av[1], "liz"); + ASSERT_PTR_EQ(av[2], NULL); + TEST_DONE(); + + TEST_START("escaped"); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("\\\"smiley\\'", &ac, &av), 0); + ASSERT_INT_EQ(ac, 1); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "\"smiley'"); + ASSERT_PTR_EQ(av[1], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("'\\'smiley\\\"'", &ac, &av), 0); + ASSERT_INT_EQ(ac, 1); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "'smiley\""); + ASSERT_PTR_EQ(av[1], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("smiley\\'s leamas\\'", &ac, &av), 0); + ASSERT_INT_EQ(ac, 2); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "smiley's"); + ASSERT_STRING_EQ(av[1], "leamas'"); + ASSERT_PTR_EQ(av[2], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("leamas\\\\smiley", &ac, &av), 0); + ASSERT_INT_EQ(ac, 1); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "leamas\\smiley"); + ASSERT_PTR_EQ(av[1], NULL); + RESET_ARGV(); + ASSERT_INT_EQ(argv_split("leamas\\\\ \\\\smiley", &ac, &av), 0); + ASSERT_INT_EQ(ac, 2); + ASSERT_PTR_NE(av, NULL); + ASSERT_STRING_EQ(av[0], "leamas\\"); + ASSERT_STRING_EQ(av[1], "\\smiley"); + ASSERT_PTR_EQ(av[2], NULL); + TEST_DONE(); + + /* XXX test char *argv_assemble(int argc, char **argv) */ +} From 4cbc4a722873d9b68cb5496304dc050d7168df78 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Wed, 31 Mar 2021 21:59:26 +0000 Subject: [PATCH 0304/1788] upstream: cannot effectively test posix-rename extension after changes in feature advertisment. OpenBSD-Regress-ID: 5e390bf88d379162aaa81b60ed86b34cb0c54d29 --- regress/sftp-perm.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/regress/sftp-perm.sh b/regress/sftp-perm.sh index 304ca0ac5877..de96a14da8e8 100644 --- a/regress/sftp-perm.sh +++ b/regress/sftp-perm.sh @@ -1,4 +1,4 @@ -# $OpenBSD: sftp-perm.sh,v 1.2 2013/10/17 22:00:18 djm Exp $ +# $OpenBSD: sftp-perm.sh,v 1.3 2021/03/31 21:59:26 djm Exp $ # Placed in the Public Domain. tid="sftp permissions" @@ -220,13 +220,15 @@ perm_test \ "test ! -d ${COPY}.dd" \ "test -d ${COPY}.dd" -perm_test \ - "posix-rename" \ - "realpath,stat,lstat" \ - "rename $COPY ${COPY}.1" \ - "touch $COPY" \ - "test -f ${COPY}.1 -a ! -f $COPY" \ - "test -f $COPY -a ! -f ${COPY}.1" +# Can't readily test this because the client falls back to traditional rename. +# XXX maybe there is a behaviorial difference we can test for? +#perm_test \ +# "posix-rename" \ +# "realpath,stat,lstat" \ +# "rename $COPY ${COPY}.1" \ +# "touch $COPY" \ +# "test -f ${COPY}.1 -a ! -f $COPY" \ +# "test -f $COPY -a ! -f ${COPY}.1" perm_test \ "rename" \ From f75bcbba58a08c670727ece5e3f8812125969799 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 3 Apr 2021 16:22:48 +1100 Subject: [PATCH 0305/1788] missing bits from 259d648e --- regress/unittests/misc/Makefile | 6 +- regress/unittests/misc/tests.c | 160 ++------------------------------ 2 files changed, 15 insertions(+), 151 deletions(-) diff --git a/regress/unittests/misc/Makefile b/regress/unittests/misc/Makefile index 04eddcd788a8..0658c38c6a23 100644 --- a/regress/unittests/misc/Makefile +++ b/regress/unittests/misc/Makefile @@ -1,7 +1,11 @@ -# $OpenBSD: Makefile,v 1.4 2021/01/09 12:24:31 dtucker Exp $ +# $OpenBSD: Makefile,v 1.6 2021/03/19 04:23:50 djm Exp $ PROG=test_misc SRCS=tests.c +SRCS+= test_convtime.c +SRCS+= test_expand.c +SRCS+= test_parse.c +SRCS+= test_argv.c # From usr.bin/ssh/Makefile.inc SRCS+= sshbuf.c diff --git a/regress/unittests/misc/tests.c b/regress/unittests/misc/tests.c index d873dc24154e..fe9544a93fa0 100644 --- a/regress/unittests/misc/tests.c +++ b/regress/unittests/misc/tests.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tests.c,v 1.4 2021/01/15 02:58:11 dtucker Exp $ */ +/* $OpenBSD: tests.c,v 1.6 2021/03/19 04:23:50 djm Exp $ */ /* * Regress test for misc helper functions. * @@ -17,156 +17,16 @@ #include "log.h" #include "misc.h" +void test_parse(void); +void test_convtime(void); +void test_expand(void); +void test_argv(void); + void tests(void) { - int port, parseerr; - char *user, *host, *path, *ret; - char buf[1024]; - - TEST_START("misc_parse_user_host_path"); - ASSERT_INT_EQ(parse_user_host_path("someuser@some.host:some/path", - &user, &host, &path), 0); - ASSERT_STRING_EQ(user, "someuser"); - ASSERT_STRING_EQ(host, "some.host"); - ASSERT_STRING_EQ(path, "some/path"); - free(user); free(host); free(path); - TEST_DONE(); - - TEST_START("misc_parse_user_ipv4_path"); - ASSERT_INT_EQ(parse_user_host_path("someuser@1.22.33.144:some/path", - &user, &host, &path), 0); - ASSERT_STRING_EQ(user, "someuser"); - ASSERT_STRING_EQ(host, "1.22.33.144"); - ASSERT_STRING_EQ(path, "some/path"); - free(user); free(host); free(path); - TEST_DONE(); - - TEST_START("misc_parse_user_[ipv4]_path"); - ASSERT_INT_EQ(parse_user_host_path("someuser@[1.22.33.144]:some/path", - &user, &host, &path), 0); - ASSERT_STRING_EQ(user, "someuser"); - ASSERT_STRING_EQ(host, "1.22.33.144"); - ASSERT_STRING_EQ(path, "some/path"); - free(user); free(host); free(path); - TEST_DONE(); - - TEST_START("misc_parse_user_[ipv4]_nopath"); - ASSERT_INT_EQ(parse_user_host_path("someuser@[1.22.33.144]:", - &user, &host, &path), 0); - ASSERT_STRING_EQ(user, "someuser"); - ASSERT_STRING_EQ(host, "1.22.33.144"); - ASSERT_STRING_EQ(path, "."); - free(user); free(host); free(path); - TEST_DONE(); - - TEST_START("misc_parse_user_ipv6_path"); - ASSERT_INT_EQ(parse_user_host_path("someuser@[::1]:some/path", - &user, &host, &path), 0); - ASSERT_STRING_EQ(user, "someuser"); - ASSERT_STRING_EQ(host, "::1"); - ASSERT_STRING_EQ(path, "some/path"); - free(user); free(host); free(path); - TEST_DONE(); - - TEST_START("misc_parse_uri"); - ASSERT_INT_EQ(parse_uri("ssh", "ssh://someuser@some.host:22/some/path", - &user, &host, &port, &path), 0); - ASSERT_STRING_EQ(user, "someuser"); - ASSERT_STRING_EQ(host, "some.host"); - ASSERT_INT_EQ(port, 22); - ASSERT_STRING_EQ(path, "some/path"); - free(user); free(host); free(path); - TEST_DONE(); - - TEST_START("misc_convtime"); - ASSERT_INT_EQ(convtime("0"), 0); - ASSERT_INT_EQ(convtime("1"), 1); - ASSERT_INT_EQ(convtime("2s"), 2); - ASSERT_INT_EQ(convtime("3m"), 180); - ASSERT_INT_EQ(convtime("1m30"), 90); - ASSERT_INT_EQ(convtime("1m30s"), 90); - ASSERT_INT_EQ(convtime("1h1s"), 3601); - ASSERT_INT_EQ(convtime("1h30m"), 90 * 60); - ASSERT_INT_EQ(convtime("1d"), 24 * 60 * 60); - ASSERT_INT_EQ(convtime("1w"), 7 * 24 * 60 * 60); - ASSERT_INT_EQ(convtime("1w2d3h4m5"), 788645); - ASSERT_INT_EQ(convtime("1w2d3h4m5s"), 788645); - /* any negative number or error returns -1 */ - ASSERT_INT_EQ(convtime("-1"), -1); - ASSERT_INT_EQ(convtime(""), -1); - ASSERT_INT_EQ(convtime("trout"), -1); - ASSERT_INT_EQ(convtime("-77"), -1); - /* boundary conditions */ - snprintf(buf, sizeof buf, "%llu", (long long unsigned)INT_MAX); - ASSERT_INT_EQ(convtime(buf), INT_MAX); - snprintf(buf, sizeof buf, "%llu", (long long unsigned)INT_MAX + 1); - ASSERT_INT_EQ(convtime(buf), -1); - ASSERT_INT_EQ(convtime("3550w5d3h14m7s"), 2147483647); -#if INT_MAX == 2147483647 - ASSERT_INT_EQ(convtime("3550w5d3h14m8s"), -1); -#endif - TEST_DONE(); - - TEST_START("dollar_expand"); - if (setenv("FOO", "bar", 1) != 0) - abort(); - if (setenv("BAR", "baz", 1) != 0) - abort(); - if (unsetenv("BAZ") != 0) - abort(); -#define ASSERT_DOLLAR_EQ(x, y) do { \ - char *str = dollar_expand(NULL, (x)); \ - ASSERT_STRING_EQ(str, (y)); \ - free(str); \ -} while(0) - ASSERT_DOLLAR_EQ("${FOO}", "bar"); - ASSERT_DOLLAR_EQ(" ${FOO}", " bar"); - ASSERT_DOLLAR_EQ("${FOO} ", "bar "); - ASSERT_DOLLAR_EQ(" ${FOO} ", " bar "); - ASSERT_DOLLAR_EQ("${FOO}${BAR}", "barbaz"); - ASSERT_DOLLAR_EQ(" ${FOO} ${BAR}", " bar baz"); - ASSERT_DOLLAR_EQ("${FOO}${BAR} ", "barbaz "); - ASSERT_DOLLAR_EQ(" ${FOO} ${BAR} ", " bar baz "); - ASSERT_DOLLAR_EQ("$", "$"); - ASSERT_DOLLAR_EQ(" $", " $"); - ASSERT_DOLLAR_EQ("$ ", "$ "); - - /* suppress error messages for error handing tests */ - log_init("test_misc", SYSLOG_LEVEL_QUIET, SYSLOG_FACILITY_AUTH, 1); - /* error checking, non existent variable */ - ret = dollar_expand(&parseerr, "a${BAZ}"); - ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 0); - ret = dollar_expand(&parseerr, "${BAZ}b"); - ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 0); - ret = dollar_expand(&parseerr, "a${BAZ}b"); - ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 0); - /* invalid format */ - ret = dollar_expand(&parseerr, "${"); - ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 1); - ret = dollar_expand(&parseerr, "${F"); - ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 1); - ret = dollar_expand(&parseerr, "${FO"); - ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 1); - /* empty variable name */ - ret = dollar_expand(&parseerr, "${}"); - ASSERT_PTR_EQ(ret, NULL); ASSERT_INT_EQ(parseerr, 1); - /* restore loglevel to default */ - log_init("test_misc", SYSLOG_LEVEL_INFO, SYSLOG_FACILITY_AUTH, 1); - TEST_DONE(); - - TEST_START("percent_expand"); - ASSERT_STRING_EQ(percent_expand("%%", "%h", "foo", NULL), "%"); - ASSERT_STRING_EQ(percent_expand("%h", "h", "foo", NULL), "foo"); - ASSERT_STRING_EQ(percent_expand("%h ", "h", "foo", NULL), "foo "); - ASSERT_STRING_EQ(percent_expand(" %h", "h", "foo", NULL), " foo"); - ASSERT_STRING_EQ(percent_expand(" %h ", "h", "foo", NULL), " foo "); - ASSERT_STRING_EQ(percent_expand(" %a%b ", "a", "foo", "b", "bar", NULL), - " foobar "); - TEST_DONE(); - - TEST_START("percent_dollar_expand"); - ASSERT_STRING_EQ(percent_dollar_expand("%h${FOO}", "h", "foo", NULL), - "foobar"); - TEST_DONE(); + test_parse(); + test_convtime(); + test_expand(); + test_argv(); } From dc3c0be8208c488e64a8bcb7d9efad98514e0ffb Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Apr 2021 05:21:46 +0000 Subject: [PATCH 0306/1788] upstream: Fix two problems in string->argv conversion: 1) multiple MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit backslashes were not being dequoted correctly and 2) quoted space in the middle of a string was being incorrectly split. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A unit test for these cases has already been committed prompted by and based on GHPR#223 by Eero Häkkinen; ok markus@ OpenBSD-Commit-ID: d7ef27abb4eeeaf6e167e9312e4abe9e89faf1e4 --- misc.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/misc.c b/misc.c index d988ce3b96c5..e209454422d3 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.162 2021/02/28 01:50:47 dtucker Exp $ */ +/* $OpenBSD: misc.c,v 1.163 2021/04/03 05:21:46 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -1935,11 +1935,6 @@ argv_split(const char *s, int *argcp, char ***argvp) /* Start of a token */ quote = 0; - if (s[i] == '\\' && - (s[i + 1] == '\'' || s[i + 1] == '\"' || s[i + 1] == '\\')) - i++; - else if (s[i] == '\'' || s[i] == '"') - quote = s[i++]; argv = xreallocarray(argv, (argc + 2), sizeof(*argv)); arg = argv[argc++] = xcalloc(1, strlen(s + i) + 1); @@ -1959,8 +1954,10 @@ argv_split(const char *s, int *argcp, char ***argvp) } } else if (quote == 0 && (s[i] == ' ' || s[i] == '\t')) break; /* done */ + else if (quote == 0 && (s[i] == '\"' || s[i] == '\'')) + quote = s[i]; /* quote start */ else if (quote != 0 && s[i] == quote) - break; /* done */ + quote = 0; /* quote end */ else arg[j++] = s[i]; } From 464ebc82aa926dd132ec75a0b064574ef375675e Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Apr 2021 05:28:43 +0000 Subject: [PATCH 0307/1788] upstream: unused variable OpenBSD-Commit-ID: 85f6a394c8e0f60d15ecddda75176f112007b205 --- sftp-server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sftp-server.c b/sftp-server.c index e602af215149..2add175b1467 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-server.c,v 1.125 2021/03/31 21:58:07 djm Exp $ */ +/* $OpenBSD: sftp-server.c,v 1.126 2021/04/03 05:28:43 djm Exp $ */ /* * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * @@ -1519,7 +1519,7 @@ static void process_extended(u_int32_t id) { char *request; - int i, r; + int r; const struct sftp_handler *exthand; if ((r = sshbuf_get_cstring(iqueue, &request, NULL)) != 0) From 082804c14e548cada75c81003a3c68ee098138ee Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Apr 2021 05:40:39 +0000 Subject: [PATCH 0308/1788] upstream: ensure that pkcs11_del_provider() is called before exit - some PKCS#11 providers get upset if C_Initialize is not matched with C_Finalize. From Adithya Baglody via GHPR#234; ok markus OpenBSD-Commit-ID: f8e770e03b416ee9a58f9762e162add900f832b6 --- ssh.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ssh.c b/ssh.c index 53330da5aecd..a8c0a4b0fd52 100644 --- a/ssh.c +++ b/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.552 2021/02/23 00:05:31 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.553 2021/04/03 05:40:39 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1690,6 +1690,10 @@ main(int ac, char **av) options.certificate_files[i] = NULL; } +#ifdef ENABLE_PKCS11 + (void)pkcs11_del_provider(options.pkcs11_provider); +#endif + skip_connect: exit_status = ssh_session2(ssh, cinfo); ssh_conn_info_free(cinfo); From 460aee9298f365357e9fd26851c22e0dca51fd6a Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Apr 2021 05:46:41 +0000 Subject: [PATCH 0309/1788] upstream: fix incorrect plural; from Ville Skyt =?UTF-8?q?t=C3=A4=20via=20GHPR#181?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenBSD-Commit-ID: 92f31754c6296d8f403d7c293e09dc27292d22c9 --- sshd.8 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sshd.8 b/sshd.8 index b2fad56d3e3a..1aa56ba7ee0e 100644 --- a/sshd.8 +++ b/sshd.8 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd.8,v 1.313 2020/08/27 01:07:10 djm Exp $ -.Dd $Mdocdate: August 27 2020 $ +.\" $OpenBSD: sshd.8,v 1.314 2021/04/03 05:46:41 djm Exp $ +.Dd $Mdocdate: April 3 2021 $ .Dt SSHD 8 .Os .Sh NAME @@ -695,7 +695,7 @@ be prepared by the administrator (optional), and the per-user file is maintained automatically: whenever the user connects to an unknown host, its key is added to the per-user file. .Pp -Each line in these files contains the following fields: markers (optional), +Each line in these files contains the following fields: marker (optional), hostnames, keytype, base64-encoded key, comment. The fields are separated by spaces. .Pp From 7cd262c1c5a08cc7f4f30e3cab108ef089d0a57b Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 3 Apr 2021 16:59:10 +1100 Subject: [PATCH 0310/1788] Save config.h and config.log on failure too. --- .github/workflows/c-cpp.yml | 6 ++++-- .github/workflows/selfhosted.yml | 14 ++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index f3fc475c761b..0e427f9003b0 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -51,11 +51,13 @@ jobs: env: SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 - - name: save regress logs + - name: save logs if: failure() uses: actions/upload-artifact@v2 with: - name: ${{ matrix.os }}-${{ matrix.configs }}-regress-logs + name: ${{ matrix.os }}-${{ matrix.configs }}-logs path: | + config.h + config.log regress/*.log regress/valgrind-out/ diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index c96d0994118c..1cf6b5da0a34 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -41,24 +41,18 @@ jobs: run: vmstartup - name: configure run: vmrun ./.github/configure.sh ${{ matrix.configs }} - - name: save config files - if: failure() - uses: actions/upload-artifact@v2 - with: - name: ${{ matrix.os }}-${{ matrix.configs }}-config-files - path: | - config.h - config.log - name: make run: vmrun make - name: make tests run: vmrun ./.github/run_test.sh ${{ matrix.configs }} - - name: save regress logs + - name: save logs if: failure() uses: actions/upload-artifact@v2 with: - name: ${{ matrix.os }}-${{ matrix.configs }}-regress-logs + name: ${{ matrix.os }}-${{ matrix.configs }}-logs path: | + config.h + config.log regress/*.log regress/valgrind-out/ - name: shutdown VM From 34afde5c73b5570d6f8cce9b49993b23b77bfb86 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Apr 2021 05:54:14 +0000 Subject: [PATCH 0311/1788] upstream: whitespace (tab after space) OpenBSD-Commit-ID: 0e2b3f7674e985d3f7c27ff5028e690ba1c2efd4 --- chacha.h | 4 ++-- channels.h | 6 +++--- log.h | 4 ++-- servconf.h | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/chacha.h b/chacha.h index 762052565d5c..19a61e294230 100644 --- a/chacha.h +++ b/chacha.h @@ -1,4 +1,4 @@ -/* $OpenBSD: chacha.h,v 1.4 2016/08/27 04:04:56 guenther Exp $ */ +/* $OpenBSD: chacha.h,v 1.5 2021/04/03 05:54:14 djm Exp $ */ /* chacha-merged.c version 20080118 @@ -16,7 +16,7 @@ struct chacha_ctx { u_int input[16]; }; -#define CHACHA_MINKEYLEN 16 +#define CHACHA_MINKEYLEN 16 #define CHACHA_NONCELEN 8 #define CHACHA_CTRLEN 8 #define CHACHA_STATELEN (CHACHA_NONCELEN+CHACHA_CTRLEN) diff --git a/channels.h b/channels.h index 74e9b3f87110..191a87da7173 100644 --- a/channels.h +++ b/channels.h @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.h,v 1.135 2020/09/20 05:47:25 djm Exp $ */ +/* $OpenBSD: channels.h,v 1.136 2021/04/03 05:54:14 djm Exp $ */ /* * Author: Tatu Ylonen @@ -177,7 +177,7 @@ struct Channel { channel_filter_cleanup_fn *filter_cleanup; /* keep boundaries */ - int datagram; + int datagram; /* non-blocking connect */ /* XXX make this a pointer so the structure can be opaque */ @@ -187,7 +187,7 @@ struct Channel { mux_callback_fn *mux_rcb; void *mux_ctx; int mux_pause; - int mux_downstream_id; + int mux_downstream_id; }; #define CHAN_EXTENDED_IGNORE 0 diff --git a/log.h b/log.h index 5ec793ceef46..347ce0392be5 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.30 2020/12/04 02:25:13 djm Exp $ */ +/* $OpenBSD: log.h,v 1.31 2021/04/03 05:54:14 djm Exp $ */ /* * Author: Tatu Ylonen @@ -61,7 +61,7 @@ void log_verbose_add(const char *); void log_verbose_reset(void); SyslogFacility log_facility_number(char *); -const char * log_facility_name(SyslogFacility); +const char * log_facility_name(SyslogFacility); LogLevel log_level_number(char *); const char * log_level_name(LogLevel); diff --git a/servconf.h b/servconf.h index 3ce9284fe4b5..7ad9d6ae46f5 100644 --- a/servconf.h +++ b/servconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: servconf.h,v 1.152 2021/03/12 04:08:19 dtucker Exp $ */ +/* $OpenBSD: servconf.h,v 1.153 2021/04/03 05:54:14 djm Exp $ */ /* * Author: Tatu Ylonen @@ -236,7 +236,7 @@ typedef struct { struct connection_info { const char *user; const char *host; /* possibly resolved hostname */ - const char *address; /* remote address */ + const char *address; /* remote address */ const char *laddress; /* local address */ int lport; /* local port */ const char *rdomain; /* routing domain if available */ From 31d8d231eb9377df474746a822d380c5d68d7ad6 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Apr 2021 06:18:40 +0000 Subject: [PATCH 0312/1788] upstream: highly polished whitespace, mostly fixing spaces-for-tab and bad indentation on continuation lines. Prompted by GHPR#185 OpenBSD-Commit-ID: e5c81f0cbdcc6144df1ce468ec1bac366d8ad6e9 --- addrmatch.c | 4 ++-- auth-krb5.c | 6 +++--- auth-options.c | 4 ++-- auth.c | 4 ++-- auth2-pubkey.c | 7 ++++--- auth2.c | 6 +++--- channels.c | 8 ++++---- channels.h | 4 ++-- cipher.c | 6 +++--- dh.c | 4 ++-- kex.c | 4 ++-- kexgen.c | 4 ++-- log.c | 4 ++-- misc.c | 4 ++-- misc.h | 12 ++++++------ mux.c | 10 +++++----- packet.c | 16 ++++++++-------- readconf.c | 8 ++++---- scp.c | 7 +++---- servconf.c | 14 +++++++------- servconf.h | 8 ++++---- serverloop.c | 4 ++-- session.c | 4 ++-- sftp-client.c | 11 ++++++----- sftp-server.c | 6 +++--- sftp.c | 4 ++-- srclimit.c | 2 +- ssh-add.c | 6 +++--- ssh-agent.c | 8 ++++---- ssh-keygen.c | 16 ++++++++-------- ssh-sk-client.c | 8 ++++---- ssh_api.c | 6 +++--- sshconnect.c | 16 +++++++++------- sshconnect2.c | 6 +++--- sshd.c | 10 ++++++---- sshkey-xmss.c | 4 ++-- sshkey-xmss.h | 12 ++++++------ sshkey.c | 22 +++++++++++----------- utf8.h | 10 +++++----- xmalloc.h | 7 +++---- 40 files changed, 155 insertions(+), 151 deletions(-) diff --git a/addrmatch.c b/addrmatch.c index 3215c653d36a..b0dc096804db 100644 --- a/addrmatch.c +++ b/addrmatch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: addrmatch.c,v 1.16 2021/01/09 11:58:50 dtucker Exp $ */ +/* $OpenBSD: addrmatch.c,v 1.17 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2004-2008 Damien Miller @@ -76,7 +76,7 @@ addr_match_list(const char *addr, const char *_list) break; } else if (r == 0) { if (addr != NULL && addr_netmatch(&try_addr, - &match_addr, masklen) == 0) { + &match_addr, masklen) == 0) { foundit: if (neg) { ret = -1; diff --git a/auth-krb5.c b/auth-krb5.c index 3096f1c8ea4d..bc17b6d445f8 100644 --- a/auth-krb5.c +++ b/auth-krb5.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth-krb5.c,v 1.23 2018/07/09 21:35:50 markus Exp $ */ +/* $OpenBSD: auth-krb5.c,v 1.24 2021/04/03 06:18:40 djm Exp $ */ /* * Kerberos v5 authentication and ticket-passing routines. * @@ -99,7 +99,7 @@ auth_krb5_password(Authctxt *authctxt, const char *password) #ifdef HEIMDAL # ifdef HAVE_KRB5_CC_NEW_UNIQUE problem = krb5_cc_new_unique(authctxt->krb5_ctx, - krb5_mcc_ops.prefix, NULL, &ccache); + krb5_mcc_ops.prefix, NULL, &ccache); # else problem = krb5_cc_gen_new(authctxt->krb5_ctx, &krb5_mcc_ops, &ccache); # endif @@ -123,7 +123,7 @@ auth_krb5_password(Authctxt *authctxt, const char *password) # ifdef HAVE_KRB5_CC_NEW_UNIQUE problem = krb5_cc_new_unique(authctxt->krb5_ctx, - krb5_fcc_ops.prefix, NULL, &authctxt->krb5_fwd_ccache); + krb5_fcc_ops.prefix, NULL, &authctxt->krb5_fwd_ccache); # else problem = krb5_cc_gen_new(authctxt->krb5_ctx, &krb5_fcc_ops, &authctxt->krb5_fwd_ccache); diff --git a/auth-options.c b/auth-options.c index 55b2e9b4cf1c..f68c629dd2c2 100644 --- a/auth-options.c +++ b/auth-options.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth-options.c,v 1.94 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: auth-options.c,v 1.95 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2018 Damien Miller * @@ -810,7 +810,7 @@ sshauthopt_serialise(const struct sshauthopt *opts, struct sshbuf *m, (r = serialise_nullable_string(m, untrusted ? NULL : opts->required_from_host_cert)) != 0 || (r = serialise_nullable_string(m, - untrusted ? NULL : opts->required_from_host_keys)) != 0) + untrusted ? NULL : opts->required_from_host_keys)) != 0) return r; /* Array options */ diff --git a/auth.c b/auth.c index a0e3cd6fe481..b560eed14b1d 100644 --- a/auth.c +++ b/auth.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth.c,v 1.151 2020/12/22 00:12:22 djm Exp $ */ +/* $OpenBSD: auth.c,v 1.152 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -514,7 +514,7 @@ auth_openfile(const char *file, struct passwd *pw, int strict_modes, if ((fd = open(file, O_RDONLY|O_NONBLOCK)) == -1) { if (log_missing || errno != ENOENT) debug("Could not open %s '%s': %s", file_type, file, - strerror(errno)); + strerror(errno)); return NULL; } diff --git a/auth2-pubkey.c b/auth2-pubkey.c index 411d2d885144..721c1d9bd750 100644 --- a/auth2-pubkey.c +++ b/auth2-pubkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2-pubkey.c,v 1.106 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: auth2-pubkey.c,v 1.107 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -674,7 +674,8 @@ check_authkey_line(struct ssh *ssh, struct passwd *pw, struct sshkey *key, goto fail_reason; } if (sshkey_cert_check_authority(key, 0, 0, 0, - keyopts->cert_principals == NULL ? pw->pw_name : NULL, &reason) != 0) + keyopts->cert_principals == NULL ? pw->pw_name : NULL, + &reason) != 0) goto fail_reason; verbose("Accepted certificate ID \"%s\" (serial %llu) " @@ -785,7 +786,7 @@ user_cert_trusted_ca(struct ssh *ssh, struct passwd *pw, struct sshkey *key, found_principal = 1; /* If principals file or command is specified, then require a match */ use_authorized_principals = principals_file != NULL || - options.authorized_principals_command != NULL; + options.authorized_principals_command != NULL; if (!found_principal && use_authorized_principals) { reason = "Certificate does not contain an authorized principal"; goto fail_reason; diff --git a/auth2.c b/auth2.c index 3c8a67bbc595..84d0ed16e7e2 100644 --- a/auth2.c +++ b/auth2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auth2.c,v 1.160 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: auth2.c,v 1.161 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -228,7 +228,7 @@ user_specific_delay(const char *user) double delay; (void)snprintf(b, sizeof b, "%llu%s", - (unsigned long long)options.timing_secret, user); + (unsigned long long)options.timing_secret, user); if (ssh_digest_memory(SSH_DIGEST_SHA512, b, strlen(b), hash, len) != 0) fatal_f("ssh_digest_memory"); /* 0-4.2 ms of delay */ @@ -703,7 +703,7 @@ void auth2_record_info(Authctxt *authctxt, const char *fmt, ...) { va_list ap; - int i; + int i; free(authctxt->auth_method_info); authctxt->auth_method_info = NULL; diff --git a/channels.c b/channels.c index b60d56c48bb8..2f402253954c 100644 --- a/channels.c +++ b/channels.c @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.c,v 1.405 2021/02/15 20:43:15 markus Exp $ */ +/* $OpenBSD: channels.c,v 1.406 2021/04/03 06:18:40 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2299,7 +2299,7 @@ channel_handler_init(struct ssh_channels *sc) chan_fn **pre, **post; if ((pre = calloc(SSH_CHANNEL_MAX_TYPE, sizeof(*pre))) == NULL || - (post = calloc(SSH_CHANNEL_MAX_TYPE, sizeof(*post))) == NULL) + (post = calloc(SSH_CHANNEL_MAX_TYPE, sizeof(*post))) == NULL) fatal_f("allocation failed"); pre[SSH_CHANNEL_OPEN] = &channel_pre_open; @@ -2699,7 +2699,7 @@ channel_proxy_downstream(struct ssh *ssh, Channel *downstream) goto out; } c = channel_new(ssh, "mux proxy", SSH_CHANNEL_MUX_PROXY, - -1, -1, -1, 0, 0, 0, ctype, 1); + -1, -1, -1, 0, 0, 0, ctype, 1); c->mux_ctx = downstream; /* point to mux client */ c->mux_downstream_id = id; /* original downstream id */ if ((r = sshbuf_put_cstring(modified, ctype)) != 0 || @@ -2726,7 +2726,7 @@ channel_proxy_downstream(struct ssh *ssh, Channel *downstream) goto out; } c = channel_new(ssh, "mux proxy", SSH_CHANNEL_MUX_PROXY, - -1, -1, -1, 0, 0, 0, "mux-down-connect", 1); + -1, -1, -1, 0, 0, 0, "mux-down-connect", 1); c->mux_ctx = downstream; /* point to mux client */ c->mux_downstream_id = id; c->remote_id = remote_id; diff --git a/channels.h b/channels.h index 191a87da7173..378d987c6c04 100644 --- a/channels.h +++ b/channels.h @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.h,v 1.136 2021/04/03 05:54:14 djm Exp $ */ +/* $OpenBSD: channels.h,v 1.137 2021/04/03 06:18:40 djm Exp $ */ /* * Author: Tatu Ylonen @@ -289,7 +289,7 @@ int channel_input_status_confirm(int, u_int32_t, struct ssh *); /* file descriptor handling (read/write) */ void channel_prepare_select(struct ssh *, fd_set **, fd_set **, int *, - u_int*, time_t*); + u_int*, time_t*); void channel_after_select(struct ssh *, fd_set *, fd_set *); void channel_output_poll(struct ssh *); diff --git a/cipher.c b/cipher.c index 639511cfdb1e..38d5bee7fbe1 100644 --- a/cipher.c +++ b/cipher.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cipher.c,v 1.118 2020/12/21 11:09:32 dtucker Exp $ */ +/* $OpenBSD: cipher.c,v 1.119 2021/04/03 06:18:40 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -495,9 +495,9 @@ cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, size_t len) if (cipher_authlen(c)) { if (!EVP_CIPHER_CTX_ctrl(cc->evp, EVP_CTRL_GCM_IV_GEN, len, iv)) - return SSH_ERR_LIBCRYPTO_ERROR; + return SSH_ERR_LIBCRYPTO_ERROR; } else if (!EVP_CIPHER_CTX_get_iv(cc->evp, iv, len)) - return SSH_ERR_LIBCRYPTO_ERROR; + return SSH_ERR_LIBCRYPTO_ERROR; #endif return 0; } diff --git a/dh.c b/dh.c index 82590f68881a..ce2eb4725e65 100644 --- a/dh.c +++ b/dh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dh.c,v 1.73 2021/03/12 04:08:19 dtucker Exp $ */ +/* $OpenBSD: dh.c,v 1.74 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2000 Niels Provos. All rights reserved. * @@ -274,7 +274,7 @@ dh_pub_is_valid(const DH *dh, const BIGNUM *dh_pub) */ if (bits_set < 4) { logit("invalid public DH value (%d/%d)", - bits_set, BN_num_bits(dh_p)); + bits_set, BN_num_bits(dh_p)); return 0; } return 1; diff --git a/kex.c b/kex.c index 30425ab8ab9b..709a0ec63aa0 100644 --- a/kex.c +++ b/kex.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kex.c,v 1.167 2021/01/31 22:55:29 djm Exp $ */ +/* $OpenBSD: kex.c,v 1.168 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -1188,7 +1188,7 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms, if (version_addendum != NULL && *version_addendum == '\0') version_addendum = NULL; if ((r = sshbuf_putf(our_version, "SSH-%d.%d-%.100s%s%s\r\n", - PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_VERSION, + PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_VERSION, version_addendum == NULL ? "" : " ", version_addendum == NULL ? "" : version_addendum)) != 0) { oerrno = errno; diff --git a/kexgen.c b/kexgen.c index 35b83ccfb0f3..bde28053ddf1 100644 --- a/kexgen.c +++ b/kexgen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kexgen.c,v 1.6 2021/01/31 22:55:29 djm Exp $ */ +/* $OpenBSD: kexgen.c,v 1.7 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2019 Markus Friedl. All rights reserved. * @@ -322,7 +322,7 @@ input_kex_gen_init(int type, u_int32_t seq, struct ssh *ssh) /* sign H */ if ((r = kex->sign(ssh, server_host_private, server_host_public, - &signature, &slen, hash, hashlen, kex->hostkey_alg)) != 0) + &signature, &slen, hash, hashlen, kex->hostkey_alg)) != 0) goto out; /* send server hostkey, ECDH pubkey 'Q_S' and signed H */ diff --git a/log.c b/log.c index 4d786c2cf63b..36ab284d6ff6 100644 --- a/log.c +++ b/log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: log.c,v 1.56 2020/12/04 02:25:13 djm Exp $ */ +/* $OpenBSD: log.c,v 1.57 2021/04/03 06:18:40 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -318,7 +318,7 @@ log_redirect_stderr_to(const char *logfile) if ((fd = open(logfile, O_WRONLY|O_CREAT|O_APPEND, 0600)) == -1) { fprintf(stderr, "Couldn't open logfile %s: %s\n", logfile, - strerror(errno)); + strerror(errno)); exit(1); } log_stderr_fd = fd; diff --git a/misc.c b/misc.c index e209454422d3..b0ece2442cc7 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.163 2021/04/03 05:21:46 djm Exp $ */ +/* $OpenBSD: misc.c,v 1.164 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005-2020 Damien Miller. All rights reserved. @@ -1195,7 +1195,7 @@ vdollar_percent_expand(int *parseerror, int dollar, int percent, string += 2; /* skip over '${' */ if ((varend = strchr(string, '}')) == NULL) { error_f("environment variable '%s' missing " - "closing '}'", string); + "closing '}'", string); goto out; } len = varend - string; diff --git a/misc.h b/misc.h index e8239ace73ed..58914bd7f128 100644 --- a/misc.h +++ b/misc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.h,v 1.94 2021/03/03 08:42:52 djm Exp $ */ +/* $OpenBSD: misc.h,v 1.95 2021/04/03 06:18:40 djm Exp $ */ /* * Author: Tatu Ylonen @@ -117,9 +117,9 @@ struct arglist { u_int nalloc; }; void addargs(arglist *, char *, ...) - __attribute__((format(printf, 2, 3))); + __attribute__((format(printf, 2, 3))); void replacearg(arglist *, u_int, char *, ...) - __attribute__((format(printf, 3, 4))); + __attribute__((format(printf, 3, 4))); void freeargs(arglist *); int tun_open(int, int, char **); @@ -174,7 +174,7 @@ const char *iptos2str(int); void mktemp_proto(char *, size_t); void child_set_env(char ***envp, u_int *envsizep, const char *name, - const char *value); + const char *value); int argv_split(const char *, int *, char ***); char *argv_assemble(int, char **argv); @@ -182,9 +182,9 @@ int exited_cleanly(pid_t, const char *, const char *, int); struct stat; int safe_path(const char *, struct stat *, const char *, uid_t, - char *, size_t); + char *, size_t); int safe_path_fd(int, const char *, struct passwd *, - char *err, size_t errlen); + char *err, size_t errlen); /* authorized_key-style options parsing helpers */ int opt_flag(const char *opt, int allow_negate, const char **optsp); diff --git a/mux.c b/mux.c index d0f066a77d62..faf4ef1e92a7 100644 --- a/mux.c +++ b/mux.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mux.c,v 1.86 2020/10/29 02:52:43 djm Exp $ */ +/* $OpenBSD: mux.c,v 1.87 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 2002-2008 Damien Miller * @@ -554,7 +554,7 @@ format_forward(u_int ftype, struct Forward *fwd) xasprintf(&ret, "dynamic forward %.200s:%d -> *", (fwd->listen_host == NULL) ? (options.fwd_opts.gateway_ports ? "*" : "LOCALHOST") : - fwd->listen_host, fwd->listen_port); + fwd->listen_host, fwd->listen_port); break; case MUX_FWD_REMOTE: xasprintf(&ret, "remote forward %.200s:%d -> %.200s:%d", @@ -649,7 +649,7 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) rfwd->allocated_port)) != 0) fatal_fr(r, "reply"); channel_update_permission(ssh, rfwd->handle, - rfwd->allocated_port); + rfwd->allocated_port); } else { reply_ok(out, fctx->rid); } @@ -664,7 +664,7 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) xasprintf(&failmsg, "remote port forwarding failed for " "listen port %d", rfwd->listen_port); - debug2_f("clearing registered forwarding for listen %d, " + debug2_f("clearing registered forwarding for listen %d, " "connect %s:%d", rfwd->listen_port, rfwd->connect_path ? rfwd->connect_path : rfwd->connect_host, rfwd->connect_port); @@ -2278,7 +2278,7 @@ muxclient(const char *path) if (strlcpy(addr.sun_path, path, sizeof(addr.sun_path)) >= sizeof(addr.sun_path)) fatal("ControlPath too long ('%s' >= %u bytes)", path, - (unsigned int)sizeof(addr.sun_path)); + (unsigned int)sizeof(addr.sun_path)); if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) == -1) fatal_f("socket(): %s", strerror(errno)); diff --git a/packet.c b/packet.c index 4bd8b4ec9e05..85784ac57702 100644 --- a/packet.c +++ b/packet.c @@ -1,4 +1,4 @@ -/* $OpenBSD: packet.c,v 1.299 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: packet.c,v 1.300 2021/04/03 06:18:40 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -684,7 +684,7 @@ static int ssh_packet_init_compression(struct ssh *ssh) { if (!ssh->state->compression_buffer && - ((ssh->state->compression_buffer = sshbuf_new()) == NULL)) + ((ssh->state->compression_buffer = sshbuf_new()) == NULL)) return SSH_ERR_ALLOC_FAIL; return 0; } @@ -886,11 +886,11 @@ ssh_set_newkeys(struct ssh *ssh, int mode) } if (state->newkeys[mode] != NULL) { debug_f("rekeying %s, input %llu bytes %llu blocks, " - "output %llu bytes %llu blocks", dir, - (unsigned long long)state->p_read.bytes, - (unsigned long long)state->p_read.blocks, - (unsigned long long)state->p_send.bytes, - (unsigned long long)state->p_send.blocks); + "output %llu bytes %llu blocks", dir, + (unsigned long long)state->p_read.bytes, + (unsigned long long)state->p_read.blocks, + (unsigned long long)state->p_send.bytes, + (unsigned long long)state->p_send.blocks); kex_free_newkeys(state->newkeys[mode]); state->newkeys[mode] = NULL; } @@ -925,7 +925,7 @@ ssh_set_newkeys(struct ssh *ssh, int mode) explicit_bzero(mac->key, mac->key_len); */ if ((comp->type == COMP_ZLIB || (comp->type == COMP_DELAYED && - state->after_authentication)) && comp->enabled == 0) { + state->after_authentication)) && comp->enabled == 0) { if ((r = ssh_packet_init_compression(ssh)) < 0) return r; if (mode == MODE_OUT) { diff --git a/readconf.c b/readconf.c index 724974b708f9..0f27652b48b8 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.352 2021/02/24 01:18:08 dtucker Exp $ */ +/* $OpenBSD: readconf.c,v 1.353 2021/04/03 06:18:40 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -676,7 +676,7 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw, snprintf(uidstr, sizeof(uidstr), "%llu", (unsigned long long)pw->pw_uid); conn_hash_hex = ssh_connection_hash(thishost, host, - portstr, ruser); + portstr, ruser); keyalias = options->host_key_alias ? options->host_key_alias : host; @@ -1026,7 +1026,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, parse_multistate: arg = strdelim(&s); if ((value = parse_multistate_value(arg, filename, linenum, - multistate_ptr)) == -1) { + multistate_ptr)) == -1) { error("%s line %d: unsupported option \"%s\".", filename, linenum, arg); return -1; @@ -1994,7 +1994,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host, arg = strdelim(&s); arg2 = strdelim(&s); value = parse_multistate_value(arg, filename, linenum, - multistate_yesnoaskconfirm); + multistate_yesnoaskconfirm); value2 = 0; /* unlimited lifespan by default */ if (value == 3 && arg2 != NULL) { /* allow "AddKeysToAgent confirm 5m" */ diff --git a/scp.c b/scp.c index 59b0a36a1378..d23f34c1755b 100644 --- a/scp.c +++ b/scp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scp.c,v 1.213 2020/10/18 11:32:01 djm Exp $ */ +/* $OpenBSD: scp.c,v 1.214 2021/04/03 06:18:40 djm Exp $ */ /* * scp - secure remote copy. This is basically patched BSD rcp which * uses ssh to do the data transfer (instead of using rcmd). @@ -630,7 +630,7 @@ do_times(int fd, int verb, const struct stat *sb) static int parse_scp_uri(const char *uri, char **userp, char **hostp, int *portp, - char **pathp) + char **pathp) { int r; @@ -1423,8 +1423,7 @@ sink(int argc, char **argv, const char *src) if (pflag) (void) chmod(np, mode); } else { - /* Handle copying from a read-only - directory */ + /* Handle copying from a read-only directory */ mod_flag = 1; if (mkdir(np, mode | S_IRWXU) == -1) goto bad; diff --git a/servconf.c b/servconf.c index 4cc936ddca19..4d1910feb432 100644 --- a/servconf.c +++ b/servconf.c @@ -1,5 +1,5 @@ -/* $OpenBSD: servconf.c,v 1.378 2021/03/12 04:08:19 dtucker Exp $ */ +/* $OpenBSD: servconf.c,v 1.379 2021/04/03 06:18:40 djm Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -2117,7 +2117,7 @@ process_server_config_line_depth(ServerOptions *options, char *line, case sMatch: if (cmdline) fatal("Match directive not supported as a command-line " - "option"); + "option"); value = match_cfg_line(&cp, linenum, (*inc_flags & SSHCFG_NEVERMATCH ? NULL : connectinfo)); if (value < 0) @@ -2454,7 +2454,7 @@ load_server_config(const char *filename, struct sshbuf *conf) sshbuf_reset(conf); /* grow buffer, so realloc is avoided for large config files */ if (fstat(fileno(f), &st) == 0 && st.st_size > 0 && - (r = sshbuf_allocate(conf, st.st_size)) != 0) + (r = sshbuf_allocate(conf, st.st_size)) != 0) fatal_fr(r, "allocate"); while (getline(&line, &linesize, f) != -1) { lineno++; @@ -2507,12 +2507,12 @@ int parse_server_match_testspec(struct connection_info *ci, char *spec) ci->lport = a2port(p + 6); if (ci->lport == -1) { fprintf(stderr, "Invalid port '%s' in test mode" - " specification %s\n", p+6, p); + " specification %s\n", p+6, p); return -1; } } else { fprintf(stderr, "Invalid test mode specification %s\n", - p); + p); return -1; } } @@ -2918,9 +2918,9 @@ dump_config(ServerOptions *o) dump_cfg_strarray_oneline(sAuthorizedKeysFile, o->num_authkeys_files, o->authorized_keys_files); dump_cfg_strarray(sHostKeyFile, o->num_host_key_files, - o->host_key_files); + o->host_key_files); dump_cfg_strarray(sHostCertificate, o->num_host_cert_files, - o->host_cert_files); + o->host_cert_files); dump_cfg_strarray(sAllowUsers, o->num_allow_users, o->allow_users); dump_cfg_strarray(sDenyUsers, o->num_deny_users, o->deny_users); dump_cfg_strarray(sAllowGroups, o->num_allow_groups, o->allow_groups); diff --git a/servconf.h b/servconf.h index 7ad9d6ae46f5..f7cdac22a54b 100644 --- a/servconf.h +++ b/servconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: servconf.h,v 1.153 2021/04/03 05:54:14 djm Exp $ */ +/* $OpenBSD: servconf.h,v 1.154 2021/04/03 06:18:40 djm Exp $ */ /* * Author: Tatu Ylonen @@ -294,13 +294,13 @@ struct connection_info *get_connection_info(struct ssh *, int, int); void initialize_server_options(ServerOptions *); void fill_default_server_options(ServerOptions *); int process_server_config_line(ServerOptions *, char *, const char *, int, - int *, struct connection_info *, struct include_list *includes); + int *, struct connection_info *, struct include_list *includes); void process_permitopen(struct ssh *ssh, ServerOptions *options); void load_server_config(const char *, struct sshbuf *); void parse_server_config(ServerOptions *, const char *, struct sshbuf *, - struct include_list *includes, struct connection_info *); + struct include_list *includes, struct connection_info *); void parse_server_match_config(ServerOptions *, - struct include_list *includes, struct connection_info *); + struct include_list *includes, struct connection_info *); int parse_server_match_testspec(struct connection_info *, char *); int server_match_spec_complete(struct connection_info *); void copy_set_server_options(ServerOptions *, ServerOptions *, int); diff --git a/serverloop.c b/serverloop.c index 306658cbcc21..669179718555 100644 --- a/serverloop.c +++ b/serverloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: serverloop.c,v 1.225 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: serverloop.c,v 1.226 2021/04/03 06:18:41 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -838,7 +838,7 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh) options.disable_forwarding || (!want_reply && fwd.listen_port == 0) || (fwd.listen_port != 0 && - !bind_permitted(fwd.listen_port, pw->pw_uid))) { + !bind_permitted(fwd.listen_port, pw->pw_uid))) { success = 0; ssh_packet_send_debug(ssh, "Server has disabled port forwarding."); } else { diff --git a/session.c b/session.c index 4b155f913f2c..c02f7d25e5e3 100644 --- a/session.c +++ b/session.c @@ -1,4 +1,4 @@ -/* $OpenBSD: session.c,v 1.327 2020/12/14 03:13:12 djm Exp $ */ +/* $OpenBSD: session.c,v 1.328 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved @@ -1388,7 +1388,7 @@ do_setusercontext(struct passwd *pw) if (!in_chroot && options.chroot_directory != NULL && strcasecmp(options.chroot_directory, "none") != 0) { - tmp = tilde_expand_filename(options.chroot_directory, + tmp = tilde_expand_filename(options.chroot_directory, pw->pw_uid); snprintf(uidstr, sizeof(uidstr), "%llu", (unsigned long long)pw->pw_uid); diff --git a/sftp-client.c b/sftp-client.c index c76032c82abf..cadaee6bdaa2 100644 --- a/sftp-client.c +++ b/sftp-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.c,v 1.141 2021/03/31 22:16:34 djm Exp $ */ +/* $OpenBSD: sftp-client.c,v 1.142 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -515,7 +515,8 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests, ret->num_requests = MINIMUM(DEFAULT_NUM_REQUESTS, limits.open_handles); debug("Server handle limit %llu; using %u", - (unsigned long long)limits.open_handles, ret->num_requests); + (unsigned long long)limits.open_handles, + ret->num_requests); } } @@ -577,7 +578,7 @@ do_limits(struct sftp_conn *conn, struct sftp_limits *limits) fatal("ID mismatch (%u != %u)", msg_id, id); if (type != SSH2_FXP_EXTENDED_REPLY) { fatal("Expected SSH2_FXP_EXTENDED_REPLY(%u) packet, got %u", - SSH2_FXP_EXTENDED_REPLY, type); + SSH2_FXP_EXTENDED_REPLY, type); } memset(limits, 0, sizeof(*limits)); @@ -1036,7 +1037,7 @@ do_hardlink(struct sftp_conn *conn, const char *oldpath, const char *newpath) fatal_fr(r, "compose"); send_msg(conn, msg); debug3("Sent message hardlink@openssh.com \"%s\" -> \"%s\"", - oldpath, newpath); + oldpath, newpath); sshbuf_free(msg); status = get_status(conn, id); @@ -1753,7 +1754,7 @@ do_upload(struct sftp_conn *conn, const char *local_path, if ((off_t)c->size >= sb.st_size) { error("destination file bigger or same size as " - "source file"); + "source file"); close(local_fd); return -1; } diff --git a/sftp-server.c b/sftp-server.c index 2add175b1467..cce52dbc2f11 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-server.c,v 1.126 2021/04/03 05:28:43 djm Exp $ */ +/* $OpenBSD: sftp-server.c,v 1.127 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * @@ -151,7 +151,7 @@ static const struct sftp_handler handlers[] = { /* SSH2_FXP_EXTENDED submessages */ static const struct sftp_handler extended_handlers[] = { { "posix-rename", "posix-rename@openssh.com", 0, - process_extended_posix_rename, 1 }, + process_extended_posix_rename, 1 }, { "statvfs", "statvfs@openssh.com", 0, process_extended_statvfs, 0 }, { "fstatvfs", "fstatvfs@openssh.com", 0, process_extended_fstatvfs, 0 }, { "hardlink", "hardlink@openssh.com", 0, process_extended_hardlink, 1 }, @@ -1376,7 +1376,7 @@ process_extended_statvfs(u_int32_t id) send_status(id, errno_to_portable(errno)); else send_statvfs(id, &st); - free(path); + free(path); } static void diff --git a/sftp.c b/sftp.c index b9804b56678b..37b0ec39988a 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.207 2021/03/31 22:16:34 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.208 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -741,7 +741,7 @@ process_put(struct sftp_conn *conn, const char *src, const char *dst, } free(tmp); - resume |= global_aflag; + resume |= global_aflag; if (!quiet && resume) mprintf("Resuming upload of %s to %s\n", g.gl_pathv[i], abs_dst); diff --git a/srclimit.c b/srclimit.c index e2446f13130a..5014ed79f296 100644 --- a/srclimit.c +++ b/srclimit.c @@ -102,7 +102,7 @@ srclimit_check_allow(int sock, int id) return 1; } debug3("%s: new unauthenticated connection from %s/%d, at %d of %d", - __func__, xas, bits, count, max_persource); + __func__, xas, bits, count, max_persource); if (first_unused == max_children) { /* no free slot found */ debug3("%s: no free slot", __func__); diff --git a/ssh-add.c b/ssh-add.c index 7edb9f9a7be9..92192fcfa23c 100644 --- a/ssh-add.c +++ b/ssh-add.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-add.c,v 1.159 2021/01/11 02:12:58 dtucker Exp $ */ +/* $OpenBSD: ssh-add.c,v 1.160 2021/04/03 06:18:41 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -336,10 +336,10 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag, fprintf(stderr, "Skipping update: "); if (left == minleft) { fprintf(stderr, - "required signatures left (%d).\n", left); + "required signatures left (%d).\n", left); } else { fprintf(stderr, - "more signatures left (%d) than" + "more signatures left (%d) than" " required (%d).\n", left, minleft); } ssh_free_identitylist(idlist); diff --git a/ssh-agent.c b/ssh-agent.c index 58fe6ddf7526..48a47d45a91b 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.277 2021/02/12 03:14:18 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.278 2021/04/03 06:18:41 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -259,8 +259,8 @@ process_request_identities(SocketEntry *e) (r = sshbuf_put_u32(msg, idtab->nentries)) != 0) fatal_fr(r, "compose"); TAILQ_FOREACH(id, &idtab->idlist, next) { - if ((r = sshkey_puts_opts(id->key, msg, SSHKEY_SERIALIZE_INFO)) - != 0 || + if ((r = sshkey_puts_opts(id->key, msg, + SSHKEY_SERIALIZE_INFO)) != 0 || (r = sshbuf_put_cstring(msg, id->comment)) != 0) { error_fr(r, "compose key/comment"); continue; @@ -1285,7 +1285,7 @@ prepare_poll(struct pollfd **pfdp, size_t *npfdp, int *timeoutp, u_int maxfds) if ((r = sshbuf_check_reserve(sockets[i].input, AGENT_RBUF_LEN)) == 0 && (r = sshbuf_check_reserve(sockets[i].output, - AGENT_MAX_LEN)) == 0) + AGENT_MAX_LEN)) == 0) pfd[j].events = POLLIN; else if (r != SSH_ERR_NO_BUFFER_SPACE) fatal_fr(r, "reserve"); diff --git a/ssh-keygen.c b/ssh-keygen.c index a442dc8e8841..027c6db6bd4a 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.428 2021/03/12 03:43:40 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.429 2021/04/03 06:18:41 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1994 Tatu Ylonen , Espoo, Finland @@ -2009,7 +2009,7 @@ add_cert_option(char *opt) fatal("Invalid source-address list"); certflags_src_addr = xstrdup(val); } else if (strncasecmp(opt, "extension:", 10) == 0 || - (iscrit = (strncasecmp(opt, "critical:", 9) == 0))) { + (iscrit = (strncasecmp(opt, "critical:", 9) == 0))) { val = xstrdup(strchr(opt, ':') + 1); if ((cp = strchr(val, '=')) != NULL) *cp++ = '\0'; @@ -2729,12 +2729,12 @@ sig_verify(const char *signature, const char *sig_namespace, fatal_f("sshkey_fingerprint failed"); if (principal == NULL) { printf("Good \"%s\" signature with %s key %s\n", - sig_namespace, sshkey_type(sign_key), fp); + sig_namespace, sshkey_type(sign_key), fp); } else { printf("Good \"%s\" signature for %s with %s key %s\n", - sig_namespace, principal, - sshkey_type(sign_key), fp); + sig_namespace, principal, + sshkey_type(sign_key), fp); } } else { printf("Could not verify signature.\n"); @@ -3371,12 +3371,12 @@ main(int argc, char **argv) if (strncmp(sign_op, "find-principals", 15) == 0) { if (ca_key_path == NULL) { error("Too few arguments for find-principals:" - "missing signature file"); + "missing signature file"); exit(1); } if (!have_identity) { error("Too few arguments for find-principals:" - "missing allowed keys file"); + "missing allowed keys file"); exit(1); } return sig_find_principals(ca_key_path, identity_file); @@ -3397,7 +3397,7 @@ main(int argc, char **argv) } else if (strncmp(sign_op, "check-novalidate", 16) == 0) { if (ca_key_path == NULL) { error("Too few arguments for check-novalidate: " - "missing signature file"); + "missing signature file"); exit(1); } return sig_verify(ca_key_path, cert_principals, diff --git a/ssh-sk-client.c b/ssh-sk-client.c index 3102a2c99934..e932590094a2 100644 --- a/ssh-sk-client.c +++ b/ssh-sk-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-sk-client.c,v 1.8 2020/10/18 11:32:02 djm Exp $ */ +/* $OpenBSD: ssh-sk-client.c,v 1.9 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2019 Google LLC * @@ -157,9 +157,9 @@ client_converse(struct sshbuf *msg, struct sshbuf **respp, u_int type) /* Request preamble: type, log_on_stderr, log_level */ ll = log_level_get(); if ((r = sshbuf_put_u32(req, type)) != 0 || - (r = sshbuf_put_u8(req, log_is_on_stderr() != 0)) != 0 || - (r = sshbuf_put_u32(req, ll < 0 ? 0 : ll)) != 0 || - (r = sshbuf_putb(req, msg)) != 0) { + (r = sshbuf_put_u8(req, log_is_on_stderr() != 0)) != 0 || + (r = sshbuf_put_u32(req, ll < 0 ? 0 : ll)) != 0 || + (r = sshbuf_putb(req, msg)) != 0) { error_fr(r, "compose"); goto out; } diff --git a/ssh_api.c b/ssh_api.c index bceff0f0c5ae..d3c6617616bd 100644 --- a/ssh_api.c +++ b/ssh_api.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh_api.c,v 1.26 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: ssh_api.c,v 1.27 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2012 Markus Friedl. All rights reserved. * @@ -81,7 +81,7 @@ mm_choose_dh(int min, int nbits, int max) int ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params) { - char *myproposal[PROPOSAL_MAX] = { KEX_CLIENT }; + char *myproposal[PROPOSAL_MAX] = { KEX_CLIENT }; struct ssh *ssh; char **proposal; static int called; @@ -361,7 +361,7 @@ _ssh_read_banner(struct ssh *ssh, struct sshbuf *banner) if (ssh->kex->server || ++n > SSH_MAX_PRE_BANNER_LINES) { bad: if ((r = sshbuf_put(ssh_packet_get_output(ssh), - mismatch, strlen(mismatch))) != 0) + mismatch, strlen(mismatch))) != 0) return r; return SSH_ERR_NO_PROTOCOL_VERSION; } diff --git a/sshconnect.c b/sshconnect.c index 6eb5fbae0d8d..47f0b1c93abf 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect.c,v 1.351 2021/03/03 21:40:16 sthen Exp $ */ +/* $OpenBSD: sshconnect.c,v 1.352 2021/04/03 06:18:41 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -91,7 +91,7 @@ expand_proxy_command(const char *proxy_command, const char *user, { char *tmp, *ret, strport[NI_MAXSERV]; const char *keyalias = options.host_key_alias ? - options.host_key_alias : host_arg; + options.host_key_alias : host_arg; snprintf(strport, sizeof strport, "%d", port); xasprintf(&tmp, "exec %s", proxy_command); @@ -243,8 +243,10 @@ ssh_proxy_connect(struct ssh *ssh, const char *host, const char *host_arg, argv[2] = command_string; argv[3] = NULL; - /* Execute the proxy command. Note that we gave up any - extra privileges above. */ + /* + * Execute the proxy command. Note that we gave up any + * extra privileges above. + */ ssh_signal(SIGPIPE, SIG_DFL); execv(argv[0], argv); perror(argv[0]); @@ -394,14 +396,14 @@ ssh_create_socket(struct addrinfo *ai) #ifdef HAVE_IFADDRS_H if ((r = getifaddrs(&ifaddrs)) != 0) { error("getifaddrs: %s: %s", options.bind_interface, - strerror(errno)); + strerror(errno)); goto fail; } bindaddrlen = sizeof(bindaddr); if (check_ifaddrs(options.bind_interface, ai->ai_family, ifaddrs, &bindaddr, &bindaddrlen) != 0) { logit("getifaddrs: %s: no suitable addresses", - options.bind_interface); + options.bind_interface); goto fail; } #else @@ -865,7 +867,7 @@ load_hostkeys_command(struct hostkeys *hostkeys, const char *command_template, /* Turn the command into an argument vector */ if (argv_split(command_template, &ac, &av) != 0) { error("%s \"%s\" contains invalid quotes", tag, - command_template); + command_template); goto out; } if (ac == 0) { diff --git a/sshconnect2.c b/sshconnect2.c index 059c9480db6a..a53ab95dbb2f 100644 --- a/sshconnect2.c +++ b/sshconnect2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshconnect2.c,v 1.346 2021/01/27 10:05:28 djm Exp $ */ +/* $OpenBSD: sshconnect2.c,v 1.347 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2008 Damien Miller. All rights reserved. @@ -671,7 +671,7 @@ format_identity(Identity *id) const char *note = ""; if (id->key != NULL) { - fp = sshkey_fingerprint(id->key, options.fingerprint_hash, + fp = sshkey_fingerprint(id->key, options.fingerprint_hash, SSH_FP_DEFAULT); } if (id->key) { @@ -1242,7 +1242,7 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp, return SSH_ERR_KEY_NOT_FOUND; if (id->key != NULL && !sshkey_equal_public(prv, id->key)) { error_f("private key %s contents do not match public", - id->filename); + id->filename); r = SSH_ERR_KEY_NOT_FOUND; goto out; } diff --git a/sshd.c b/sshd.c index 32dd4dd4db8a..5aa04d0507c0 100644 --- a/sshd.c +++ b/sshd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshd.c,v 1.571 2021/03/12 04:08:19 dtucker Exp $ */ +/* $OpenBSD: sshd.c,v 1.572 2021/04/03 06:18:41 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1702,7 +1702,7 @@ main(int ac, char **av) */ if (test_flag < 2 && connection_info != NULL) fatal("Config test connection parameter (-C) provided without " - "test mode (-T)"); + "test mode (-T)"); /* Fetch our configuration */ if ((cfg = sshbuf_new()) == NULL) @@ -2016,8 +2016,10 @@ main(int ac, char **av) /* Reinitialize the log (because of the fork above). */ log_init(__progname, options.log_level, options.log_facility, log_stderr); - /* Chdir to the root directory so that the current disk can be - unmounted if desired. */ + /* + * Chdir to the root directory so that the current disk can be + * unmounted if desired. + */ if (chdir("/") == -1) error("chdir(\"/\"): %s", strerror(errno)); diff --git a/sshkey-xmss.c b/sshkey-xmss.c index 018b7da1a6ca..f5235ef2fbd8 100644 --- a/sshkey-xmss.c +++ b/sshkey-xmss.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey-xmss.c,v 1.10 2021/03/06 20:36:31 millert Exp $ */ +/* $OpenBSD: sshkey-xmss.c,v 1.11 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2017 Markus Friedl. All rights reserved. * @@ -590,7 +590,7 @@ sshkey_xmss_update_state(const struct sshkey *k, int printerror) goto done; } else if (idx != state->idx + 1) { PRINT("more than one signature happened: idx %u state %u", - idx, state->idx); + idx, state->idx); goto done; } state->idx = idx; diff --git a/sshkey-xmss.h b/sshkey-xmss.h index bf52d293c3a4..32a12be620b1 100644 --- a/sshkey-xmss.h +++ b/sshkey-xmss.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey-xmss.h,v 1.2 2020/10/19 22:49:23 dtucker Exp $ */ +/* $OpenBSD: sshkey-xmss.h,v 1.3 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2017 Markus Friedl. All rights reserved. * @@ -25,10 +25,10 @@ #ifndef SSHKEY_XMSS_H #define SSHKEY_XMSS_H -#define XMSS_SHA2_256_W16_H10_NAME "XMSS_SHA2-256_W16_H10" -#define XMSS_SHA2_256_W16_H16_NAME "XMSS_SHA2-256_W16_H16" -#define XMSS_SHA2_256_W16_H20_NAME "XMSS_SHA2-256_W16_H20" -#define XMSS_DEFAULT_NAME XMSS_SHA2_256_W16_H10_NAME +#define XMSS_SHA2_256_W16_H10_NAME "XMSS_SHA2-256_W16_H10" +#define XMSS_SHA2_256_W16_H16_NAME "XMSS_SHA2-256_W16_H16" +#define XMSS_SHA2_256_W16_H20_NAME "XMSS_SHA2-256_W16_H20" +#define XMSS_DEFAULT_NAME XMSS_SHA2_256_W16_H10_NAME size_t sshkey_xmss_pklen(const struct sshkey *); size_t sshkey_xmss_sklen(const struct sshkey *); @@ -37,7 +37,7 @@ void sshkey_xmss_free_state(struct sshkey *); int sshkey_xmss_generate_private_key(struct sshkey *, u_int); int sshkey_xmss_serialize_state(const struct sshkey *, struct sshbuf *); int sshkey_xmss_serialize_state_opt(const struct sshkey *, struct sshbuf *, - enum sshkey_serialize_rep); + enum sshkey_serialize_rep); int sshkey_xmss_serialize_pk_info(const struct sshkey *, struct sshbuf *, enum sshkey_serialize_rep); int sshkey_xmss_deserialize_state(struct sshkey *, struct sshbuf *); diff --git a/sshkey.c b/sshkey.c index b25c59a208ec..10ef9369dc27 100644 --- a/sshkey.c +++ b/sshkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.c,v 1.115 2021/02/02 22:36:46 djm Exp $ */ +/* $OpenBSD: sshkey.c,v 1.116 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * Copyright (c) 2008 Alexander von Gernler. All rights reserved. @@ -150,7 +150,7 @@ static const struct keytype keytypes[] = { KEY_ECDSA_CERT, NID_secp384r1, 1, 0 }, # ifdef OPENSSL_HAS_NISTP521 { "ecdsa-sha2-nistp521-cert-v01@openssh.com", "ECDSA-CERT", NULL, - KEY_ECDSA_CERT, NID_secp521r1, 1, 0 }, + KEY_ECDSA_CERT, NID_secp521r1, 1, 0 }, # endif /* OPENSSL_HAS_NISTP521 */ { "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com", "ECDSA-SK-CERT", NULL, KEY_ECDSA_SK_CERT, NID_X9_62_prime256v1, 1, 0 }, @@ -2035,7 +2035,7 @@ sshkey_shield_private(struct sshkey *k) if (sshkey_is_shielded(k) && (r = sshkey_unshield_private(k)) != 0) goto out; if ((r = sshkey_private_serialize_opt(k, prvbuf, - SSHKEY_SERIALIZE_SHIELD)) != 0) + SSHKEY_SERIALIZE_SHIELD)) != 0) goto out; /* pad to cipher blocksize */ i = 0; @@ -3681,7 +3681,7 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp) if ((expect_sk_application != NULL && (k->sk_application == NULL || strcmp(expect_sk_application, k->sk_application) != 0)) || (expect_ed25519_pk != NULL && (k->ed25519_pk == NULL || - memcmp(expect_ed25519_pk, k->ed25519_pk, ED25519_PK_SZ) != 0))) { + memcmp(expect_ed25519_pk, k->ed25519_pk, ED25519_PK_SZ) != 0))) { r = SSH_ERR_KEY_CERT_MISMATCH; goto out; } @@ -3959,7 +3959,7 @@ sshkey_private_to_blob2(struct sshkey *prv, struct sshbuf *blob, /* append private key and comment*/ if ((r = sshkey_private_serialize_opt(prv, encrypted, - SSHKEY_SERIALIZE_FULL)) != 0 || + SSHKEY_SERIALIZE_FULL)) != 0 || (r = sshbuf_put_cstring(encrypted, comment)) != 0) goto out; @@ -4598,12 +4598,12 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type, clear_libcrypto_errors(); if ((pk = PEM_read_bio_PrivateKey(bio, NULL, pem_passphrase_cb, (char *)passphrase)) == NULL) { - /* - * libcrypto may return various ASN.1 errors when attempting - * to parse a key with an incorrect passphrase. - * Treat all format errors as "incorrect passphrase" if a - * passphrase was supplied. - */ + /* + * libcrypto may return various ASN.1 errors when attempting + * to parse a key with an incorrect passphrase. + * Treat all format errors as "incorrect passphrase" if a + * passphrase was supplied. + */ if (passphrase != NULL && *passphrase != '\0') r = SSH_ERR_KEY_WRONG_PASSPHRASE; else diff --git a/utf8.h b/utf8.h index 9d6d9a32cd8a..09941d47180a 100644 --- a/utf8.h +++ b/utf8.h @@ -1,4 +1,4 @@ -/* $OpenBSD: utf8.h,v 1.3 2020/05/01 06:28:52 djm Exp $ */ +/* $OpenBSD: utf8.h,v 1.4 2021/04/03 06:18:41 djm Exp $ */ /* * Copyright (c) 2016 Ingo Schwarze * @@ -17,12 +17,12 @@ int vasnmprintf(char **, size_t, int *, const char *, va_list); int mprintf(const char *, ...) - __attribute__((format(printf, 1, 2))); + __attribute__((format(printf, 1, 2))); int fmprintf(FILE *, const char *, ...) - __attribute__((format(printf, 2, 3))); + __attribute__((format(printf, 2, 3))); int vfmprintf(FILE *, const char *, va_list); int snmprintf(char *, size_t, int *, const char *, ...) - __attribute__((format(printf, 4, 5))); + __attribute__((format(printf, 4, 5))); int asmprintf(char **, size_t, int *, const char *, ...) - __attribute__((format(printf, 4, 5))); + __attribute__((format(printf, 4, 5))); void msetlocale(void); diff --git a/xmalloc.h b/xmalloc.h index abaf7ada2c6c..a6b8d23bde8e 100644 --- a/xmalloc.h +++ b/xmalloc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: xmalloc.h,v 1.19 2019/11/12 22:32:48 djm Exp $ */ +/* $OpenBSD: xmalloc.h,v 1.20 2021/04/03 06:18:41 djm Exp $ */ /* * Author: Tatu Ylonen @@ -22,7 +22,6 @@ void *xreallocarray(void *, size_t, size_t); void *xrecallocarray(void *, size_t, size_t, size_t); char *xstrdup(const char *); int xasprintf(char **, const char *, ...) - __attribute__((__format__ (printf, 2, 3))) - __attribute__((__nonnull__ (2))); + __attribute__((__format__ (printf, 2, 3))) __attribute__((__nonnull__ (2))); int xvasprintf(char **, const char *, va_list) - __attribute__((__nonnull__ (2))); + __attribute__((__nonnull__ (2))); From 57ed647ee07bb883a2f2264231bcd1df6a5b9392 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 3 Apr 2021 17:47:37 +1100 Subject: [PATCH 0313/1788] polish whitespace for portable files --- audit-bsm.c | 39 +++++++++--------- auth-krb5.c | 13 +++--- auth-pam.c | 4 +- channels.c | 2 +- cipher.c | 2 +- clientloop.c | 2 +- contrib/gnome-ssh-askpass1.c | 7 ++-- contrib/gnome-ssh-askpass2.c | 10 ++--- loginrec.h | 2 +- logintest.c | 60 ++++++++++++++-------------- openbsd-compat/base64.c | 2 +- openbsd-compat/bsd-poll.h | 2 +- openbsd-compat/bsd-snprintf.c | 16 ++++---- openbsd-compat/bsd-waitpid.h | 2 +- openbsd-compat/getopt_long.c | 2 +- openbsd-compat/libressl-api-compat.c | 2 +- openbsd-compat/port-net.c | 2 +- openbsd-compat/port-uw.c | 2 +- openbsd-compat/sha2.c | 2 +- openbsd-compat/strtonum.c | 6 +-- sandbox-seccomp-filter.c | 6 +-- sftp.c | 2 +- ssh.c | 2 +- sshkey.c | 4 +- uidswap.c | 2 +- 25 files changed, 98 insertions(+), 97 deletions(-) diff --git a/audit-bsm.c b/audit-bsm.c index 0ba16c72c820..ccfcf6f7fc68 100644 --- a/audit-bsm.c +++ b/audit-bsm.c @@ -129,7 +129,7 @@ static AuditInfoTermID ssh_bsm_tid; * getaudit_addr() is only present on IPv6 capable machines. */ #if defined(HAVE_AUG_GET_MACHINE) || !defined(HAVE_GETAUDIT_ADDR) -extern int aug_get_machine(char *, u_int32_t *, u_int32_t *); +extern int aug_get_machine(char *, u_int32_t *, u_int32_t *); #else static int aug_get_machine(char *host, u_int32_t *addr, u_int32_t *type) @@ -183,41 +183,41 @@ getacna(char *auditstring, int len) scf_value_t *value = NULL; int ret = 0; + /* + * The man page for getacna on Solaris 10 states we should return -2 + * in case of error and set errno to indicate the error. We don't + * bother with errno here, though, since the only use of this function + * below doesn't check for errors anyway. + */ handle = scf_handle_create(SCF_VERSION); if (handle == NULL) - return -2; /* The man page for getacna on Solaris 10 states - we should return -2 in case of error and set - errno to indicate the error. We don't bother - with errno here, though, since the only use - of this function below doesn't check for errors - anyway. - */ + return -2; ret = scf_handle_bind(handle); if (ret == -1) - return -2; + return -2; property = scf_property_create(handle); if (property == NULL) - return -2; + return -2; ret = scf_handle_decode_fmri(handle, - "svc:/system/auditd:default/:properties/preselection/naflags", - NULL, NULL, NULL, NULL, property, 0); + "svc:/system/auditd:default/:properties/preselection/naflags", + NULL, NULL, NULL, NULL, property, 0); if (ret == -1) - return -2; + return -2; value = scf_value_create(handle); if (value == NULL) - return -2; + return -2; ret = scf_property_get_value(property, value); if (ret == -1) - return -2; + return -2; ret = scf_value_get_astring(value, auditstring, len); if (ret == -1) - return -2; + return -2; scf_value_destroy(value); scf_property_destroy(property); @@ -280,9 +280,10 @@ bsm_audit_record(int typ, char *string, au_event_t event_no) (void) au_write(ad, AUToReturnFunc(typ, rc)); #ifdef BROKEN_BSM_API - /* The last argument is the event modifier flags. For - some seemingly undocumented reason it was added in - Solaris 11. */ + /* + * The last argument is the event modifier flags. For some seemingly + * undocumented reason it was added in Solaris 11. + */ rc = au_close(ad, AU_TO_WRITE, event_no, 0); #else rc = au_close(ad, AU_TO_WRITE, event_no); diff --git a/auth-krb5.c b/auth-krb5.c index bc17b6d445f8..c99e4e430e73 100644 --- a/auth-krb5.c +++ b/auth-krb5.c @@ -163,17 +163,18 @@ auth_krb5_password(Authctxt *authctxt, const char *password) goto out; } - problem = ssh_krb5_cc_gen(authctxt->krb5_ctx, &authctxt->krb5_fwd_ccache); + problem = ssh_krb5_cc_gen(authctxt->krb5_ctx, + &authctxt->krb5_fwd_ccache); if (problem) goto out; - problem = krb5_cc_initialize(authctxt->krb5_ctx, authctxt->krb5_fwd_ccache, - authctxt->krb5_user); + problem = krb5_cc_initialize(authctxt->krb5_ctx, + authctxt->krb5_fwd_ccache, authctxt->krb5_user); if (problem) goto out; - problem= krb5_cc_store_cred(authctxt->krb5_ctx, authctxt->krb5_fwd_ccache, - &creds); + problem = krb5_cc_store_cred(authctxt->krb5_ctx, + authctxt->krb5_fwd_ccache, &creds); if (problem) goto out; #endif @@ -202,7 +203,7 @@ auth_krb5_password(Authctxt *authctxt, const char *password) if (authctxt->krb5_ctx != NULL && problem!=-1) { errmsg = krb5_get_error_message(authctxt->krb5_ctx, problem); - debug("Kerberos password authentication failed: %s", + debug("Kerberos password authentication failed: %s", errmsg); krb5_free_error_message(authctxt->krb5_ctx, errmsg); } else diff --git a/auth-pam.c b/auth-pam.c index d429ef13aaea..0b4a28abc79e 100644 --- a/auth-pam.c +++ b/auth-pam.c @@ -727,9 +727,9 @@ sshpam_init(struct ssh *ssh, Authctxt *authctxt) */ sshpam_rhost = xstrdup(auth_get_canonical_hostname(ssh, options.use_dns)); - sshpam_laddr = get_local_ipaddr( + sshpam_laddr = get_local_ipaddr( ssh_packet_get_connection_in(ssh)); - xasprintf(&sshpam_conninfo, "SSH_CONNECTION=%.50s %d %.50s %d", + xasprintf(&sshpam_conninfo, "SSH_CONNECTION=%.50s %d %.50s %d", ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), sshpam_laddr, ssh_local_port(ssh)); } diff --git a/channels.c b/channels.c index 2f402253954c..32d1f617860e 100644 --- a/channels.c +++ b/channels.c @@ -1921,7 +1921,7 @@ channel_handle_rfd(struct ssh *ssh, Channel *c, ((errno == EAGAIN || errno == EWOULDBLOCK) && !force))) return 1; #ifndef PTY_ZEROREAD - if (len <= 0) { + if (len <= 0) { #else if ((!c->isatty && len <= 0) || (c->isatty && (len < 0 || (len == 0 && errno != 0)))) { diff --git a/cipher.c b/cipher.c index 38d5bee7fbe1..5b3a86d69219 100644 --- a/cipher.c +++ b/cipher.c @@ -494,7 +494,7 @@ cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, size_t len) #endif if (cipher_authlen(c)) { if (!EVP_CIPHER_CTX_ctrl(cc->evp, EVP_CTRL_GCM_IV_GEN, - len, iv)) + len, iv)) return SSH_ERR_LIBCRYPTO_ERROR; } else if (!EVP_CIPHER_CTX_get_iv(cc->evp, iv, len)) return SSH_ERR_LIBCRYPTO_ERROR; diff --git a/clientloop.c b/clientloop.c index 941c150f94ce..cb3ff8645274 100644 --- a/clientloop.c +++ b/clientloop.c @@ -571,7 +571,7 @@ client_wait_until_can_do_something(struct ssh *ssh, fatal_fr(r, "sshbuf_putf"); quit_pending = 1; } else if (options.server_alive_interval > 0 && !FD_ISSET(connection_in, - *readsetp) && monotime() >= server_alive_time) + *readsetp) && monotime() >= server_alive_time) /* * ServerAlive check is needed. We can't rely on the select * timing out since traffic on the client side such as port diff --git a/contrib/gnome-ssh-askpass1.c b/contrib/gnome-ssh-askpass1.c index 4d51032d1d36..4c92c177b5d2 100644 --- a/contrib/gnome-ssh-askpass1.c +++ b/contrib/gnome-ssh-askpass1.c @@ -137,9 +137,10 @@ passphrase_dialog(char *message) gnome_dialog_close(GNOME_DIALOG(dialog)); return (result == 0 ? 0 : -1); - /* At least one grab failed - ungrab what we got, and report - the failure to the user. Note that XGrabServer() cannot - fail. */ + /* + * At least one grab failed - ungrab what we got, and report the + * failure to the user. Note that XGrabServer() cannot fail. + */ nograbkb: gdk_pointer_ungrab(GDK_CURRENT_TIME); nograb: diff --git a/contrib/gnome-ssh-askpass2.c b/contrib/gnome-ssh-askpass2.c index f7912727c3b3..a62f98152950 100644 --- a/contrib/gnome-ssh-askpass2.c +++ b/contrib/gnome-ssh-askpass2.c @@ -68,11 +68,9 @@ report_failed_grab (GtkWidget *parent_window, const char *what) GtkWidget *err; err = gtk_message_dialog_new(GTK_WINDOW(parent_window), 0, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - "Could not grab %s. " - "A malicious client may be eavesdropping " - "on your session.", what); + GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + "Could not grab %s. A malicious client may be eavesdropping " + "on your session.", what); gtk_window_set_position(GTK_WINDOW(err), GTK_WIN_POS_CENTER); gtk_dialog_run(GTK_DIALOG(err)); @@ -225,7 +223,7 @@ passphrase_dialog(char *message, int prompt_type) */ gtk_widget_realize(entry); g_signal_connect(G_OBJECT(entry), "key_press_event", - G_CALLBACK(check_none), dialog); + G_CALLBACK(check_none), dialog); } } diff --git a/loginrec.h b/loginrec.h index 62cc0e78c945..02bceb604c7f 100644 --- a/loginrec.h +++ b/loginrec.h @@ -94,7 +94,7 @@ struct logininfo *login_alloc_entry(pid_t pid, const char *username, void login_free_entry(struct logininfo *li); /* fill out a pre-allocated structure with useful information */ int login_init_entry(struct logininfo *li, pid_t pid, const char *username, - const char *hostname, const char *line); + const char *hostname, const char *line); /* place the current time in a logininfo struct */ void login_set_current_time(struct logininfo *li); diff --git a/logintest.c b/logintest.c index 4897ae0f9e11..6ee1cdc23645 100644 --- a/logintest.c +++ b/logintest.c @@ -62,21 +62,21 @@ dump_logininfo(struct logininfo *li, char *descname) { /* yes I know how nasty this is */ printf("struct logininfo %s = {\n\t" - "progname\t'%s'\n\ttype\t\t%d\n\t" - "pid\t\t%d\n\tuid\t\t%d\n\t" - "line\t\t'%s'\n\tusername\t'%s'\n\t" - "hostname\t'%s'\n\texit\t\t%d\n\ttermination\t%d\n\t" - "tv_sec\t%d\n\ttv_usec\t%d\n\t" - "struct login_netinfo hostaddr {\n\t\t" - "struct sockaddr sa {\n" - "\t\t\tfamily\t%d\n\t\t}\n" - "\t}\n" - "}\n", - descname, li->progname, li->type, - li->pid, li->uid, li->line, - li->username, li->hostname, li->exit, - li->termination, li->tv_sec, li->tv_usec, - li->hostaddr.sa.sa_family); + "progname\t'%s'\n\ttype\t\t%d\n\t" + "pid\t\t%d\n\tuid\t\t%d\n\t" + "line\t\t'%s'\n\tusername\t'%s'\n\t" + "hostname\t'%s'\n\texit\t\t%d\n\ttermination\t%d\n\t" + "tv_sec\t%d\n\ttv_usec\t%d\n\t" + "struct login_netinfo hostaddr {\n\t\t" + "struct sockaddr sa {\n" + "\t\t\tfamily\t%d\n\t\t}\n" + "\t}\n" + "}\n", + descname, li->progname, li->type, + li->pid, li->uid, li->line, + li->username, li->hostname, li->exit, + li->termination, li->tv_sec, li->tv_usec, + li->hostaddr.sa.sa_family); } @@ -118,7 +118,7 @@ testAPI() /* NOTE: this is messy, but typically a program wouldn't have to set * any of this, a sockaddr_in* would be already prepared */ memcpy((void *)&(sa_in4.sin_addr), (void *)&(he->h_addr_list[0][0]), - sizeof(struct in_addr)); + sizeof(struct in_addr)); login_set_addr(li1, (struct sockaddr *) &sa_in4, sizeof(sa_in4)); strlcpy(li1->hostname, "localhost", sizeof(li1->hostname)); } @@ -145,8 +145,8 @@ testAPI() t1 = login_get_lastlog_time(getuid()); strlcpy(s_t1, ctime(&t1), sizeof(s_t1)); printf("Before logging in:\n\tcurrent time is %d - %s\t" - "lastlog time is %d - %s\n", - (int)t0, s_t0, (int)t1, s_t1); + "lastlog time is %d - %s\n", + (int)t0, s_t0, (int)t1, s_t1); #endif printf("Performing a login on line %s ", stripline); @@ -172,10 +172,10 @@ testAPI() printf("at %d - %s", (int)logouttime, s_logouttime); #endif printf("\nThe root login shown above should be gone.\n" - "If the root login hasn't gone, but another user on the same\n" - "pty has, this is OK - we're hacking it here, and there\n" - "shouldn't be two users on one pty in reality...\n" - "-- ('who' output follows)\n"); + "If the root login hasn't gone, but another user on the same\n" + "pty has, this is OK - we're hacking it here, and there\n" + "shouldn't be two users on one pty in reality...\n" + "-- ('who' output follows)\n"); login_logout(li1); system(cmdstring); @@ -187,24 +187,24 @@ testAPI() printf("After logging in, lastlog time is %d - %s\n", (int)t2, s_t2); if (t1 == t2) printf("The lastlog times before and after logging in are the " - "same.\nThis indicates that lastlog is ** NOT WORKING " - "CORRECTLY **\n"); + "same.\nThis indicates that lastlog is ** NOT WORKING " + "CORRECTLY **\n"); else if (t0 != t2) /* We can be off by a second or so, even when recording works fine. * I'm not 100% sure why, but it's true. */ printf("** The login time and the lastlog time differ.\n" - "** This indicates that lastlog is either recording the " - "wrong time,\n** or retrieving the wrong entry.\n" - "If it's off by less than %d second(s) " - "run the test again.\n", PAUSE_BEFORE_LOGOUT); + "** This indicates that lastlog is either recording the " + "wrong time,\n** or retrieving the wrong entry.\n" + "If it's off by less than %d second(s) " + "run the test again.\n", PAUSE_BEFORE_LOGOUT); else printf("lastlog agrees with the login time. This is a good thing.\n"); #endif printf("--\nThe output of 'last' shown next should have " - "an entry for root \n on %s for the time shown above:\n--\n", - stripline); + "an entry for root \n on %s for the time shown above:\n--\n", + stripline); snprintf(cmdstring, sizeof(cmdstring), "last | grep '%s ' | head -3", stripline); system(cmdstring); diff --git a/openbsd-compat/base64.c b/openbsd-compat/base64.c index 9e7466716425..b7dce095e4c3 100644 --- a/openbsd-compat/base64.c +++ b/openbsd-compat/base64.c @@ -211,7 +211,7 @@ b64_pton(char const *src, u_char *target, size_t targsize) break; pos = strchr(Base64, ch); - if (pos == 0) /* A non-base64 character. */ + if (pos == 0) /* A non-base64 character. */ return (-1); switch (state) { diff --git a/openbsd-compat/bsd-poll.h b/openbsd-compat/bsd-poll.h index 17945f5b46f5..8420ca1db378 100644 --- a/openbsd-compat/bsd-poll.h +++ b/openbsd-compat/bsd-poll.h @@ -32,7 +32,7 @@ #define _COMPAT_POLL_H_ typedef struct pollfd { - int fd; + int fd; short events; short revents; } pollfd_t; diff --git a/openbsd-compat/bsd-snprintf.c b/openbsd-compat/bsd-snprintf.c index f041121fd90b..b9eaee14f3c0 100644 --- a/openbsd-compat/bsd-snprintf.c +++ b/openbsd-compat/bsd-snprintf.c @@ -135,13 +135,13 @@ #define DP_S_DONE 7 /* format flags - Bits */ -#define DP_F_MINUS (1 << 0) -#define DP_F_PLUS (1 << 1) -#define DP_F_SPACE (1 << 2) -#define DP_F_NUM (1 << 3) -#define DP_F_ZERO (1 << 4) -#define DP_F_UP (1 << 5) -#define DP_F_UNSIGNED (1 << 6) +#define DP_F_MINUS (1 << 0) +#define DP_F_PLUS (1 << 1) +#define DP_F_SPACE (1 << 2) +#define DP_F_NUM (1 << 3) +#define DP_F_ZERO (1 << 4) +#define DP_F_UP (1 << 5) +#define DP_F_UNSIGNED (1 << 6) /* Conversion Flags */ #define DP_C_SHORT 1 @@ -592,7 +592,7 @@ fmtint(char *buffer, size_t *currlen, size_t maxlen, #ifdef DEBUG_SNPRINTF printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", - zpadlen, spadlen, min, max, place); + zpadlen, spadlen, min, max, place); #endif /* Spaces */ diff --git a/openbsd-compat/bsd-waitpid.h b/openbsd-compat/bsd-waitpid.h index b551268ab063..bd61b6909240 100644 --- a/openbsd-compat/bsd-waitpid.h +++ b/openbsd-compat/bsd-waitpid.h @@ -40,7 +40,7 @@ #define WEXITSTATUS(w) (int)(WIFEXITED(w) ? ((_W_INT(w) >> 8) & 0377) : -1) #define WTERMSIG(w) (int)(WIFSIGNALED(w) ? (_W_INT(w) & 0177) : -1) #define WCOREFLAG 0x80 -#define WCOREDUMP(w) ((_W_INT(w)) & WCOREFLAG) +#define WCOREDUMP(w) ((_W_INT(w)) & WCOREFLAG) /* Prototype */ pid_t waitpid(int, int *, int); diff --git a/openbsd-compat/getopt_long.c b/openbsd-compat/getopt_long.c index e28947430578..1a5001f7d98a 100644 --- a/openbsd-compat/getopt_long.c +++ b/openbsd-compat/getopt_long.c @@ -87,7 +87,7 @@ char *optarg; /* argument associated with option */ /* return values */ #define BADCH (int)'?' #define BADARG ((*options == ':') ? (int)':' : (int)'?') -#define INORDER (int)1 +#define INORDER (int)1 #define EMSG "" diff --git a/openbsd-compat/libressl-api-compat.c b/openbsd-compat/libressl-api-compat.c index ae00ff593b7e..801a2e8dd3d9 100644 --- a/openbsd-compat/libressl-api-compat.c +++ b/openbsd-compat/libressl-api-compat.c @@ -284,7 +284,7 @@ RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp) if ((r->dmp1 == NULL && dmp1 == NULL) || (r->dmq1 == NULL && dmq1 == NULL) || (r->iqmp == NULL && iqmp == NULL)) - return 0; + return 0; if (dmp1 != NULL) { BN_free(r->dmp1); diff --git a/openbsd-compat/port-net.c b/openbsd-compat/port-net.c index da6d446787c9..198e73f0de20 100644 --- a/openbsd-compat/port-net.c +++ b/openbsd-compat/port-net.c @@ -68,7 +68,7 @@ sys_set_rdomain(int fd, const char *name) if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, name, strlen(name)) == -1) { error("%s: setsockopt(%d, SO_BINDTODEVICE, %s): %s", - __func__, fd, name, strerror(errno)); + __func__, fd, name, strerror(errno)); return -1; } return 0; diff --git a/openbsd-compat/port-uw.c b/openbsd-compat/port-uw.c index 132213131e8f..074f80c8d3d5 100644 --- a/openbsd-compat/port-uw.c +++ b/openbsd-compat/port-uw.c @@ -143,7 +143,7 @@ get_iaf_password(struct passwd *pw) if (pw_password == NULL) fatal("ia_get_logpwd: Unable to get the shadow passwd"); ia_closeinfo(uinfo); - return pw_password; + return pw_password; } else fatal("ia_openinfo: Unable to open the shadow passwd file"); diff --git a/openbsd-compat/sha2.c b/openbsd-compat/sha2.c index ce936e262c89..4f2ad8f2352a 100644 --- a/openbsd-compat/sha2.c +++ b/openbsd-compat/sha2.c @@ -159,7 +159,7 @@ * same "backwards" definition. */ /* Shift-right (used in SHA-224, SHA-256, SHA-384, and SHA-512): */ -#define R(b,x) ((x) >> (b)) +#define R(b,x) ((x) >> (b)) /* 32-bit Rotate-right (used in SHA-224 and SHA-256): */ #define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b)))) /* 64-bit Rotate-right (used in SHA-384 and SHA-512): */ diff --git a/openbsd-compat/strtonum.c b/openbsd-compat/strtonum.c index 87f2f24b2583..130d89684e90 100644 --- a/openbsd-compat/strtonum.c +++ b/openbsd-compat/strtonum.c @@ -26,9 +26,9 @@ #include #include -#define INVALID 1 -#define TOOSMALL 2 -#define TOOLARGE 3 +#define INVALID 1 +#define TOOSMALL 2 +#define TOOLARGE 3 long long strtonum(const char *numstr, long long minval, long long maxval, diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c index 7981c84ad10c..798b24bd878f 100644 --- a/sandbox-seccomp-filter.c +++ b/sandbox-seccomp-filter.c @@ -384,7 +384,7 @@ ssh_sandbox_child_debugging(void) fatal("%s: sigaction(SIGSYS): %s", __func__, strerror(errno)); if (sigprocmask(SIG_UNBLOCK, &mask, NULL) == -1) fatal("%s: sigprocmask(SIGSYS): %s", - __func__, strerror(errno)); + __func__, strerror(errno)); } #endif /* SANDBOX_SECCOMP_FILTER_DEBUG */ @@ -413,13 +413,13 @@ ssh_sandbox_child(struct ssh_sandbox *box) debug3("%s: setting PR_SET_NO_NEW_PRIVS", __func__); if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) { debug("%s: prctl(PR_SET_NO_NEW_PRIVS): %s", - __func__, strerror(errno)); + __func__, strerror(errno)); nnp_failed = 1; } debug3("%s: attaching seccomp filter program", __func__); if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &preauth_program) == -1) debug("%s: prctl(PR_SET_SECCOMP): %s", - __func__, strerror(errno)); + __func__, strerror(errno)); else if (nnp_failed) fatal("%s: SECCOMP_MODE_FILTER activated but " "PR_SET_NO_NEW_PRIVS failed", __func__); diff --git a/sftp.c b/sftp.c index 37b0ec39988a..654f93a15e1a 100644 --- a/sftp.c +++ b/sftp.c @@ -2213,7 +2213,7 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2) if ((line = el_gets(el, &count)) == NULL || count <= 0) { printf("\n"); - break; + break; } history(hl, &hev, H_ENTER, line); if (strlcpy(cmd, line, sizeof(cmd)) >= sizeof(cmd)) { diff --git a/ssh.c b/ssh.c index a8c0a4b0fd52..35b6b517616e 100644 --- a/ssh.c +++ b/ssh.c @@ -1553,7 +1553,7 @@ main(int ac, char **av) if (ssh_connect(ssh, host, host_arg, addrs, &hostaddr, options.port, options.connection_attempts, &timeout_ms, options.tcp_keep_alive) != 0) - exit(255); + exit(255); if (addrs != NULL) freeaddrinfo(addrs); diff --git a/sshkey.c b/sshkey.c index 10ef9369dc27..e92709dc1d2e 100644 --- a/sshkey.c +++ b/sshkey.c @@ -4385,14 +4385,14 @@ sshkey_private_to_blob_pem_pkcs8(struct sshkey *key, struct sshbuf *buf, return SSH_ERR_PASSPHRASE_TOO_SHORT; if ((blob = sshbuf_new()) == NULL) return SSH_ERR_ALLOC_FAIL; - if ((bio = BIO_new(BIO_s_mem())) == NULL) { + if ((bio = BIO_new(BIO_s_mem())) == NULL) { r = SSH_ERR_ALLOC_FAIL; goto out; } if (format == SSHKEY_PRIVATE_PKCS8 && (pkey = EVP_PKEY_new()) == NULL) { r = SSH_ERR_ALLOC_FAIL; goto out; - } + } if ((r = sshkey_unshield_private(key)) != 0) goto out; diff --git a/uidswap.c b/uidswap.c index 40e1215039e3..6ed3024d0180 100644 --- a/uidswap.c +++ b/uidswap.c @@ -42,7 +42,7 @@ is not part of the posix specification. */ #define SAVED_IDS_WORK_WITH_SETEUID /* Saved effective uid. */ -static uid_t saved_euid = 0; +static uid_t saved_euid = 0; static gid_t saved_egid = 0; #endif From 53ea05e09b04fd7b6dea66b42b34d65fe61b9636 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Apr 2021 06:55:52 +0000 Subject: [PATCH 0314/1788] upstream: sync CASignatureAlgorithms lists with reality. GHPR#174 from Matt Hazinski OpenBSD-Commit-ID: f05e4ca54d7e67b90fe58fe1bdb1d2a37e0e2696 --- ssh_config.5 | 9 +++++---- sshd_config.5 | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index c5f12af89e61..e37d2de79890 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.350 2021/03/12 05:18:01 jsg Exp $ -.Dd $Mdocdate: March 12 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.351 2021/04/03 06:55:52 djm Exp $ +.Dd $Mdocdate: April 3 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -372,8 +372,9 @@ Specifies which algorithms are allowed for signing of certificates by certificate authorities (CAs). The default is: .Bd -literal -offset indent -ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384, -ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa +ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, +sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,i +rsa-sha2-512,rsa-sha2-256 .Ed .Pp .Xr ssh 1 diff --git a/sshd_config.5 b/sshd_config.5 index c3a67e1868b8..72eb312542fb 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.329 2021/03/12 04:08:19 dtucker Exp $ -.Dd $Mdocdate: March 12 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.330 2021/04/03 06:55:52 djm Exp $ +.Dd $Mdocdate: April 3 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -377,8 +377,9 @@ Specifies which algorithms are allowed for signing of certificates by certificate authorities (CAs). The default is: .Bd -literal -offset indent -ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384, -ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa +ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, +sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,i +rsa-sha2-512,rsa-sha2-256 .Ed .Pp Certificates signed using other algorithms will not be accepted for From dc1b45841fb97e3d7f655ddbcfef3839735cae5f Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Sat, 3 Apr 2021 06:58:30 +0000 Subject: [PATCH 0315/1788] upstream: typos in comments; GHPR#180 from Vill =?UTF-8?q?e=20Skytt=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenBSD-Commit-ID: 93c732381ae0e2b680c79e67c40c1814b7ceed2c --- hostfile.c | 4 ++-- sftp.c | 4 ++-- umac.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hostfile.c b/hostfile.c index f5d3dde9b325..5f0e3515d656 100644 --- a/hostfile.c +++ b/hostfile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hostfile.c,v 1.89 2021/01/26 00:51:30 djm Exp $ */ +/* $OpenBSD: hostfile.c,v 1.90 2021/04/03 06:58:30 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -391,7 +391,7 @@ check_hostkeys_by_key_or_type(struct hostkeys *hostkeys, *found = hostkeys->entries + i; break; } - /* A non-maching key exists */ + /* A non-matching key exists */ end_return = HOST_CHANGED; if (found != NULL) *found = hostkeys->entries + i; diff --git a/sftp.c b/sftp.c index 654f93a15e1a..3f46c55316aa 100644 --- a/sftp.c +++ b/sftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.208 2021/04/03 06:18:41 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.209 2021/04/03 06:58:30 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -79,7 +79,7 @@ int batchmode = 0; /* PID of ssh transport process */ static volatile pid_t sshpid = -1; -/* Suppress diagnositic messages */ +/* Suppress diagnostic messages */ int quiet = 0; /* This is set to 0 if the progressmeter is not desired. */ diff --git a/umac.c b/umac.c index 3d4e285bb17a..e5ec19f082cb 100644 --- a/umac.c +++ b/umac.c @@ -1,4 +1,4 @@ -/* $OpenBSD: umac.c,v 1.20 2020/03/13 03:17:07 djm Exp $ */ +/* $OpenBSD: umac.c,v 1.21 2021/04/03 06:58:30 djm Exp $ */ /* ----------------------------------------------------------------------- * * umac.c -- C Implementation UMAC Message Authentication @@ -290,7 +290,7 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8]) * versions, one expects the entire message being hashed to be passed * in a single buffer and returns the hash result immediately. The second * allows the message to be passed in a sequence of buffers. In the - * muliple-buffer interface, the client calls the routine nh_update() as + * multiple-buffer interface, the client calls the routine nh_update() as * many times as necessary. When there is no more data to be fed to the * hash, the client calls nh_final() which calculates the hash output. * Before beginning another hash calculation the nh_reset() routine From f3ca8af87a4c32ada660da12ae95cf03d190c083 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 3 Apr 2021 18:21:08 +1100 Subject: [PATCH 0316/1788] enable authopt and misc unit tests Neither were wired into the build, both required some build adaptations for -portable --- Makefile.in | 74 +++++++++++++++++++------- regress/Makefile | 7 ++- regress/unittests/authopt/tests.c | 4 +- regress/unittests/misc/test_argv.c | 4 +- regress/unittests/misc/test_convtime.c | 4 +- regress/unittests/misc/test_expand.c | 4 +- regress/unittests/misc/test_parse.c | 4 +- regress/unittests/misc/tests.c | 4 +- 8 files changed, 79 insertions(+), 26 deletions(-) diff --git a/Makefile.in b/Makefile.in index 15db373d22a2..dddb2e4210b3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -272,12 +272,8 @@ clean: regressclean rm -f regress/mkdtemp$(EXEEXT) rm -f regress/unittests/test_helper/*.a rm -f regress/unittests/test_helper/*.o - rm -f regress/unittests/sshbuf/*.o - rm -f regress/unittests/sshbuf/test_sshbuf$(EXEEXT) - rm -f regress/unittests/sshkey/*.o - rm -f regress/unittests/sshkey/test_sshkey$(EXEEXT) - rm -f regress/unittests/sshsig/*.o - rm -f regress/unittests/sshsig/test_sshsig$(EXEEXT) + rm -f regress/unittests/authopt/*.o + rm -f regress/unittests/authopt/test_authopt$(EXEEXT) rm -f regress/unittests/bitmap/*.o rm -f regress/unittests/bitmap/test_bitmap$(EXEEXT) rm -f regress/unittests/conversion/*.o @@ -288,6 +284,14 @@ clean: regressclean rm -f regress/unittests/kex/test_kex$(EXEEXT) rm -f regress/unittests/match/*.o rm -f regress/unittests/match/test_match$(EXEEXT) + rm -f regress/unittests/misc/*.o + rm -f regress/unittests/misc/test_misc$(EXEEXT) + rm -f regress/unittests/sshbuf/*.o + rm -f regress/unittests/sshbuf/test_sshbuf$(EXEEXT) + rm -f regress/unittests/sshkey/*.o + rm -f regress/unittests/sshkey/test_sshkey$(EXEEXT) + rm -f regress/unittests/sshsig/*.o + rm -f regress/unittests/sshsig/test_sshsig$(EXEEXT) rm -f regress/unittests/utf8/*.o rm -f regress/unittests/utf8/test_utf8$(EXEEXT) rm -f regress/misc/sk-dummy/*.o @@ -305,12 +309,8 @@ distclean: regressclean rm -f regress/mkdtemp rm -f regress/unittests/test_helper/*.a rm -f regress/unittests/test_helper/*.o - rm -f regress/unittests/sshbuf/*.o - rm -f regress/unittests/sshbuf/test_sshbuf - rm -f regress/unittests/sshkey/*.o - rm -f regress/unittests/sshkey/test_sshkey - rm -f regress/unittests/sshsig/*.o - rm -f regress/unittests/sshsig/test_sshsig + rm -f regress/unittests/authopt/*.o + rm -f regress/unittests/authopt/test_authopt rm -f regress/unittests/bitmap/*.o rm -f regress/unittests/bitmap/test_bitmap rm -f regress/unittests/conversion/*.o @@ -321,6 +321,14 @@ distclean: regressclean rm -f regress/unittests/kex/test_kex rm -f regress/unittests/match/*.o rm -f regress/unittests/match/test_match + rm -f regress/unittests/misc/*.o + rm -f regress/unittests/misc/test_misc + rm -f regress/unittests/sshbuf/*.o + rm -f regress/unittests/sshbuf/test_sshbuf + rm -f regress/unittests/sshkey/*.o + rm -f regress/unittests/sshkey/test_sshkey + rm -f regress/unittests/sshsig/*.o + rm -f regress/unittests/sshsig/test_sshsig rm -f regress/unittests/utf8/*.o rm -f regress/unittests/utf8/test_utf8 (cd openbsd-compat && $(MAKE) distclean) @@ -485,14 +493,16 @@ uninstall: regress-prep: $(MKDIR_P) `pwd`/regress/unittests/test_helper - $(MKDIR_P) `pwd`/regress/unittests/sshbuf - $(MKDIR_P) `pwd`/regress/unittests/sshkey - $(MKDIR_P) `pwd`/regress/unittests/sshsig + $(MKDIR_P) `pwd`/regress/unittests/authopt $(MKDIR_P) `pwd`/regress/unittests/bitmap $(MKDIR_P) `pwd`/regress/unittests/conversion $(MKDIR_P) `pwd`/regress/unittests/hostkeys $(MKDIR_P) `pwd`/regress/unittests/kex $(MKDIR_P) `pwd`/regress/unittests/match + $(MKDIR_P) `pwd`/regress/unittests/misc + $(MKDIR_P) `pwd`/regress/unittests/sshbuf + $(MKDIR_P) `pwd`/regress/unittests/sshkey + $(MKDIR_P) `pwd`/regress/unittests/sshsig $(MKDIR_P) `pwd`/regress/unittests/utf8 $(MKDIR_P) `pwd`/regress/misc/sk-dummy [ -f `pwd`/regress/Makefile ] || \ @@ -578,6 +588,18 @@ regress/unittests/bitmap/test_bitmap$(EXEEXT): ${UNITTESTS_TEST_BITMAP_OBJS} \ regress/unittests/test_helper/libtest_helper.a \ -lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS) +UNITTESTS_TEST_AUTHOPT_OBJS=\ + regress/unittests/authopt/tests.o \ + auth-options.o \ + $(SKOBJS) + +regress/unittests/authopt/test_authopt$(EXEEXT): \ + ${UNITTESTS_TEST_AUTHOPT_OBJS} \ + regress/unittests/test_helper/libtest_helper.a libssh.a + $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_AUTHOPT_OBJS) \ + regress/unittests/test_helper/libtest_helper.a \ + -lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS) + UNITTESTS_TEST_CONVERSION_OBJS=\ regress/unittests/conversion/tests.o @@ -621,6 +643,20 @@ regress/unittests/match/test_match$(EXEEXT): \ regress/unittests/test_helper/libtest_helper.a \ -lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS) +UNITTESTS_TEST_MISC_OBJS=\ + regress/unittests/misc/tests.o \ + regress/unittests/misc/test_parse.o \ + regress/unittests/misc/test_expand.o \ + regress/unittests/misc/test_convtime.o \ + regress/unittests/misc/test_argv.o + +regress/unittests/misc/test_misc$(EXEEXT): \ + ${UNITTESTS_TEST_MISC_OBJS} \ + regress/unittests/test_helper/libtest_helper.a libssh.a + $(LD) -o $@ $(LDFLAGS) $(UNITTESTS_TEST_MISC_OBJS) \ + regress/unittests/test_helper/libtest_helper.a \ + -lssh -lopenbsd-compat -lssh -lopenbsd-compat $(LIBS) + UNITTESTS_TEST_UTF8_OBJS=\ regress/unittests/utf8/tests.o @@ -655,14 +691,16 @@ regress-binaries: regress-prep $(LIBCOMPAT) \ $(SK_DUMMY_LIBRARY) regress-unit-binaries: regress-prep $(REGRESSLIBS) \ - regress/unittests/sshbuf/test_sshbuf$(EXEEXT) \ - regress/unittests/sshkey/test_sshkey$(EXEEXT) \ - regress/unittests/sshsig/test_sshsig$(EXEEXT) \ + regress/unittests/authopt/test_authopt$(EXEEXT) \ regress/unittests/bitmap/test_bitmap$(EXEEXT) \ regress/unittests/conversion/test_conversion$(EXEEXT) \ regress/unittests/hostkeys/test_hostkeys$(EXEEXT) \ regress/unittests/kex/test_kex$(EXEEXT) \ regress/unittests/match/test_match$(EXEEXT) \ + regress/unittests/misc/test_misc$(EXEEXT) \ + regress/unittests/sshbuf/test_sshbuf$(EXEEXT) \ + regress/unittests/sshkey/test_sshkey$(EXEEXT) \ + regress/unittests/sshsig/test_sshsig$(EXEEXT) \ regress/unittests/utf8/test_utf8$(EXEEXT) \ tests: file-tests t-exec interop-tests unit diff --git a/regress/Makefile b/regress/Makefile index 43da7c7db940..ced21a11d698 100644 --- a/regress/Makefile +++ b/regress/Makefile @@ -249,17 +249,20 @@ unit: V="" ; \ test "x${USE_VALGRIND}" = "x" || \ V=${.CURDIR}/valgrind-unit.sh ; \ - $$V ${.OBJDIR}/unittests/sshbuf/test_sshbuf ; \ - $$V ${.OBJDIR}/unittests/sshkey/test_sshkey \ + $$V ${.OBJDIR}/unittests/sshbuf/test_sshbuf ; \ + $$V ${.OBJDIR}/unittests/sshkey/test_sshkey \ -d ${.CURDIR}/unittests/sshkey/testdata ; \ $$V ${.OBJDIR}/unittests/sshsig/test_sshsig \ -d ${.CURDIR}/unittests/sshsig/testdata ; \ + $$V ${.OBJDIR}/unittests/authopt/test_authopt \ + -d ${.CURDIR}/unittests/authopt/testdata ; \ $$V ${.OBJDIR}/unittests/bitmap/test_bitmap ; \ $$V ${.OBJDIR}/unittests/conversion/test_conversion ; \ $$V ${.OBJDIR}/unittests/kex/test_kex ; \ $$V ${.OBJDIR}/unittests/hostkeys/test_hostkeys \ -d ${.CURDIR}/unittests/hostkeys/testdata ; \ $$V ${.OBJDIR}/unittests/match/test_match ; \ + $$V ${.OBJDIR}/unittests/misc/test_misc ; \ if test "x${TEST_SSH_UTF8}" = "xyes" ; then \ $$V ${.OBJDIR}/unittests/utf8/test_utf8 ; \ fi \ diff --git a/regress/unittests/authopt/tests.c b/regress/unittests/authopt/tests.c index 0e8aacb91699..8c51b3802aa6 100644 --- a/regress/unittests/authopt/tests.c +++ b/regress/unittests/authopt/tests.c @@ -6,6 +6,8 @@ * Placed in the public domain */ +#include "includes.h" + #include #include #include @@ -13,7 +15,7 @@ #include #include -#include "test_helper.h" +#include "../test_helper/test_helper.h" #include "sshkey.h" #include "authfile.h" diff --git a/regress/unittests/misc/test_argv.c b/regress/unittests/misc/test_argv.c index 0ce86694d38e..7a28f64e5e57 100644 --- a/regress/unittests/misc/test_argv.c +++ b/regress/unittests/misc/test_argv.c @@ -5,6 +5,8 @@ * Placed in the public domain. */ +#include "includes.h" + #include #include #include @@ -12,7 +14,7 @@ #include #include -#include "test_helper.h" +#include "../test_helper/test_helper.h" #include "log.h" #include "misc.h" diff --git a/regress/unittests/misc/test_convtime.c b/regress/unittests/misc/test_convtime.c index 8da05a26181f..5be3ee43ad6e 100644 --- a/regress/unittests/misc/test_convtime.c +++ b/regress/unittests/misc/test_convtime.c @@ -5,6 +5,8 @@ * Placed in the public domain. */ +#include "includes.h" + #include #include #include @@ -12,7 +14,7 @@ #include #include -#include "test_helper.h" +#include "../test_helper/test_helper.h" #include "log.h" #include "misc.h" diff --git a/regress/unittests/misc/test_expand.c b/regress/unittests/misc/test_expand.c index 2a5e1bf1a5da..3cfe0e7123e0 100644 --- a/regress/unittests/misc/test_expand.c +++ b/regress/unittests/misc/test_expand.c @@ -5,6 +5,8 @@ * Placed in the public domain. */ +#include "includes.h" + #include #include #include @@ -12,7 +14,7 @@ #include #include -#include "test_helper.h" +#include "../test_helper/test_helper.h" #include "log.h" #include "misc.h" diff --git a/regress/unittests/misc/test_parse.c b/regress/unittests/misc/test_parse.c index 6fa4558e22d8..dd99068d0700 100644 --- a/regress/unittests/misc/test_parse.c +++ b/regress/unittests/misc/test_parse.c @@ -5,6 +5,8 @@ * Placed in the public domain. */ +#include "includes.h" + #include #include #include @@ -12,7 +14,7 @@ #include #include -#include "test_helper.h" +#include "../test_helper/test_helper.h" #include "log.h" #include "misc.h" diff --git a/regress/unittests/misc/tests.c b/regress/unittests/misc/tests.c index fe9544a93fa0..75013f481cb5 100644 --- a/regress/unittests/misc/tests.c +++ b/regress/unittests/misc/tests.c @@ -5,6 +5,8 @@ * Placed in the public domain. */ +#include "includes.h" + #include #include #include @@ -12,7 +14,7 @@ #include #include -#include "test_helper.h" +#include "../test_helper/test_helper.h" #include "log.h" #include "misc.h" From b3ca08cb174266884d44ec710a84cd64c12414ea Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 5 Apr 2021 23:46:42 +1000 Subject: [PATCH 0317/1788] Install libcbor with libfido2. --- .github/setup_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index e53a351c5bdf..6240ef06ef53 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -39,7 +39,7 @@ for TARGET in $TARGETS; do ;; sk) INSTALL_FIDO_PPA="yes" - PACKAGES="$PACKAGES libfido2-dev libu2f-host-dev" + PACKAGES="$PACKAGES libfido2-dev libu2f-host-dev libcbor-dev" ;; selinux) PACKAGES="$PACKAGES libselinux1-dev selinux-policy-dev" From 801f710953b24dd2f21939171c622eac77c7484d Mon Sep 17 00:00:00 2001 From: "jmc@openbsd.org" Date: Sun, 4 Apr 2021 06:11:24 +0000 Subject: [PATCH 0318/1788] upstream: missing comma; from kawashima james OpenBSD-Commit-ID: 31cec6bf26c6db4ffefc8a070715ebef274e68ea --- ssh_config.5 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index e37d2de79890..4c0604d299d4 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.351 2021/04/03 06:55:52 djm Exp $ -.Dd $Mdocdate: April 3 2021 $ +.\" $OpenBSD: ssh_config.5,v 1.352 2021/04/04 06:11:24 jmc Exp $ +.Dd $Mdocdate: April 4 2021 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -2044,7 +2044,7 @@ The keywords .Cm CertificateFile , .Cm ControlPath , .Cm IdentityAgent , -.Cm IdentityFile +.Cm IdentityFile , .Cm KnownHostsCommand , and .Cm UserKnownHostsFile From 320af2f3de6333aa123f1b088eca146a245e968a Mon Sep 17 00:00:00 2001 From: "jmc@openbsd.org" Date: Sun, 4 Apr 2021 11:36:56 +0000 Subject: [PATCH 0319/1788] upstream: remove stray inserts; from matthias schmidt OpenBSD-Commit-ID: 2c36ebdc54e14bbf1daad70c6a05479a073d5c63 --- ssh_config.5 | 4 ++-- sshd_config.5 | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ssh_config.5 b/ssh_config.5 index 4c0604d299d4..37a55e234b27 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,7 +33,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.352 2021/04/04 06:11:24 jmc Exp $ +.\" $OpenBSD: ssh_config.5,v 1.353 2021/04/04 11:36:56 jmc Exp $ .Dd $Mdocdate: April 4 2021 $ .Dt SSH_CONFIG 5 .Os @@ -373,7 +373,7 @@ by certificate authorities (CAs). The default is: .Bd -literal -offset indent ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, -sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,i +sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512,rsa-sha2-256 .Ed .Pp diff --git a/sshd_config.5 b/sshd_config.5 index 72eb312542fb..3b339aafbc14 100644 --- a/sshd_config.5 +++ b/sshd_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: sshd_config.5,v 1.330 2021/04/03 06:55:52 djm Exp $ -.Dd $Mdocdate: April 3 2021 $ +.\" $OpenBSD: sshd_config.5,v 1.331 2021/04/04 11:36:56 jmc Exp $ +.Dd $Mdocdate: April 4 2021 $ .Dt SSHD_CONFIG 5 .Os .Sh NAME @@ -378,7 +378,7 @@ by certificate authorities (CAs). The default is: .Bd -literal -offset indent ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, -sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,i +sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com, rsa-sha2-512,rsa-sha2-256 .Ed .Pp From 679bdc4a5c9244f427a7aee9c14b0a0ed086da1f Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Tue, 6 Apr 2021 09:07:33 +0000 Subject: [PATCH 0320/1788] upstream: Don't check return value of unsetenv(). It's part of the environment setup and not part of the actual test, and some platforms -portable runs on declare it as returning void, which prevents the test from compiling. OpenBSD-Regress-ID: 24f08543ee3cdebc404f2951f3e388cc82b844a1 --- regress/unittests/misc/test_expand.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regress/unittests/misc/test_expand.c b/regress/unittests/misc/test_expand.c index 3cfe0e7123e0..c336fb0b2d09 100644 --- a/regress/unittests/misc/test_expand.c +++ b/regress/unittests/misc/test_expand.c @@ -1,4 +1,4 @@ -/* $OpenBSD: test_expand.c,v 1.1 2021/03/19 03:25:01 djm Exp $ */ +/* $OpenBSD: test_expand.c,v 1.2 2021/04/06 09:07:33 dtucker Exp $ */ /* * Regress test for misc string expansion functions. * @@ -30,7 +30,7 @@ test_expand(void) TEST_START("dollar_expand"); ASSERT_INT_EQ(setenv("FOO", "bar", 1), 0); ASSERT_INT_EQ(setenv("BAR", "baz", 1), 0); - ASSERT_INT_EQ(unsetenv("BAZ"), 0); + (void)unsetenv("BAZ"); #define ASSERT_DOLLAR_EQ(x, y) do { \ char *str = dollar_expand(NULL, (x)); \ ASSERT_STRING_EQ(str, (y)); \ From f283a6c2e0a9bd9369e18462acd00be56fbe5b0d Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Wed, 7 Apr 2021 08:20:35 +1000 Subject: [PATCH 0321/1788] wrap getrlimit call in HAVE_GETRLIMIT; bz3291 --- sftp-server.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sftp-server.c b/sftp-server.c index cce52dbc2f11..1f9997bdebd5 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1495,8 +1495,10 @@ process_extended_limits(u_int32_t id) debug("request %u: limits", id); +#ifdef HAVE_GETRLIMIT if (getrlimit(RLIMIT_NOFILE, &rlim) != -1 && rlim.rlim_cur > 5) nfiles = rlim.rlim_cur - 5; /* stdio(3) + syslog + spare */ +#endif if ((msg = sshbuf_new()) == NULL) fatal_f("sshbuf_new failed"); From e7d0a285dbdd65d8df16123ad90f15e91862f959 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Wed, 7 Apr 2021 08:50:38 +1000 Subject: [PATCH 0322/1788] wrap struct rlimit in HAVE_GETRLIMIT too --- sftp-server.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sftp-server.c b/sftp-server.c index 1f9997bdebd5..838f0488cde7 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1491,7 +1491,9 @@ process_extended_limits(u_int32_t id) struct sshbuf *msg; int r; uint64_t nfiles = 0; +#ifdef HAVE_GETRLIMIT struct rlimit rlim; +#endif debug("request %u: limits", id); From 961af266b861e30fce1e26170ee0dbb5bf591f29 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 6 Apr 2021 23:24:30 +0000 Subject: [PATCH 0323/1788] upstream: include "ssherr.h" not ; from Balu Gajjala via bz#3292 OpenBSD-Commit-ID: e9535cd9966eb2e69e73d1ede1f44905c30310bd --- log.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/log.h b/log.h index 347ce0392be5..0e9e303c7de7 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.31 2021/04/03 05:54:14 djm Exp $ */ +/* $OpenBSD: log.h,v 1.32 2021/04/06 23:24:30 djm Exp $ */ /* * Author: Tatu Ylonen @@ -16,7 +16,7 @@ #define SSH_LOG_H #include /* va_list */ -#include /* ssh_err() */ +#include "ssherr.h" /* ssh_err() */ /* Supported syslog facilities and levels. */ typedef enum { From 3674e33fa70dfa1fe69b345bf576113af7b7be11 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 7 Apr 2021 10:05:10 +1000 Subject: [PATCH 0324/1788] Further split Valgrind tests. Even split in two, the Valgrind tests take by far the longest to run, so split them four ways to further increase parallelism. --- .github/configs | 35 ++++++++++++++++++++++++----------- .github/workflows/c-cpp.yml | 2 ++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/.github/configs b/.github/configs index 1c06e00d110c..87c7a6dc213a 100755 --- a/.github/configs +++ b/.github/configs @@ -56,22 +56,35 @@ case "$config" in LIBCRYPTOFLAGS="--without-openssl" TEST_TARGET=t-exec ;; - valgrind-1) + valgrind-[1-4]) # rlimit sandbox and FORTIFY_SOURCE confuse Valgrind. CONFIGFLAGS="--without-sandbox --without-hardening" CONFIGFLAGS="$CONFIGFLAGS --with-cppflags=-D_FORTIFY_SOURCE=0" + TEST_TARGET="t-exec USE_VALGRIND=1" + TEST_SSH_ELAPSED_TIMES=1 + export TEST_SSH_ELAPSED_TIMES # Valgrind slows things down enough that the agent timeout test # won't reliably pass, and the unit tests run longer than allowed - # by github. - TEST_TARGET="t-exec USE_VALGRIND=1" - SKIP_LTESTS="agent-timeout rekey try-ciphers cert-userkey integrity" - ;; - valgrind-2) - CONFIGFLAGS="--without-sandbox --without-hardening" - CONFIGFLAGS="$CONFIGFLAGS --with-cppflags=-D_FORTIFY_SOURCE=0" - # The rekey test takes >30 min so run separately. - TEST_TARGET="t-exec USE_VALGRIND=1" - LTESTS="rekey try-ciphers cert-userkey integrity" + # by github so split into three separate tests. + tests2="rekey integrity" + tests3="krl forward-control sshsig" + tests4="cert-userkey cert-hostkey kextype sftp-perm keygen-comment" + case "$config" in + valgrind-1) + # All tests except agent-timeout (which is flaky under valgrind) + #) and slow ones that run separately to increase parallelism. + SKIP_LTESTS="agent-timeout ${tests2} ${tests3} ${tests4}" + ;; + valgrind-2) + LTESTS="${tests2}" + ;; + valgrind-3) + LTESTS="${tests3}" + ;; + valgrind-4) + LTESTS="${tests4}" + ;; + esac ;; *) echo "Unknown configuration $config" diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 0e427f9003b0..a712af7c2189 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -20,6 +20,8 @@ jobs: include: - { os: ubuntu-20.04, configs: valgrind-1 } - { os: ubuntu-20.04, configs: valgrind-2 } + - { os: ubuntu-20.04, configs: valgrind-3 } + - { os: ubuntu-20.04, configs: valgrind-4 } - { os: ubuntu-20.04, configs: pam } - { os: ubuntu-20.04, configs: kitchensink } - { os: ubuntu-20.04, configs: hardenedmalloc } From ef4f46ab4387bb863b471bad124d46e8d911a79a Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 7 Apr 2021 09:59:15 +1000 Subject: [PATCH 0325/1788] Move the TEST_SSH_PORT section down a bit. This groups the portable-specific changes together and makes it a little more likely that patches will apply cleanly. --- regress/test-exec.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/regress/test-exec.sh b/regress/test-exec.sh index 4d04e04b1978..f6d7f38a4210 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -17,12 +17,6 @@ CYGWIN*) ;; esac -if [ ! -z "$TEST_SSH_PORT" ]; then - PORT="$TEST_SSH_PORT" -else - PORT=4242 -fi - # If configure tells us to use a different egrep, create a wrapper function # to call it. This means we don't need to change all the tests that depend # on a good implementation. @@ -47,6 +41,12 @@ if test -z "$LOGNAME"; then export LOGNAME fi +if [ ! -z "$TEST_SSH_PORT" ]; then + PORT="$TEST_SSH_PORT" +else + PORT=4242 +fi + OBJ=$1 if [ "x$OBJ" = "x" ]; then echo '$OBJ not defined' From 13e5fa2acffd26e754c6ee1d070d0afd035d4cb7 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Tue, 6 Apr 2021 23:57:56 +0000 Subject: [PATCH 0326/1788] upstream: Add TEST_SSH_ELAPSED_TIMES environment variable to print the elapsed time in seconds of each test. This depends on "date +%s" which is not specified by POSIX but is commonly implemented. OpenBSD-Regress-ID: ec3c8c19ff49b2192116a0a646ee7c9b944e8a9c --- regress/test-exec.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/regress/test-exec.sh b/regress/test-exec.sh index f6d7f38a4210..da1963aa0764 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -1,4 +1,4 @@ -# $OpenBSD: test-exec.sh,v 1.78 2021/03/13 01:52:16 dtucker Exp $ +# $OpenBSD: test-exec.sh,v 1.79 2021/04/06 23:57:56 dtucker Exp $ # Placed in the Public Domain. #SUDO=sudo @@ -41,6 +41,10 @@ if test -z "$LOGNAME"; then export LOGNAME fi +if [ ! -x "$TEST_SSH_ELAPSED_TIMES" ]; then + STARTTIME=`date '+%s'` +fi + if [ ! -z "$TEST_SSH_PORT" ]; then PORT="$TEST_SSH_PORT" else @@ -385,6 +389,11 @@ cleanup () rm -rf "$SSH_REGRESS_TMP" fi stop_sshd + if [ ! -z "$TEST_SSH_ELAPSED_TIMES" ]; then + now=`date '+%s'` + elapsed=$(($now - $STARTTIME)) + echo elapsed $elapsed `basename $SCRIPT .sh` + fi } start_debug_log () From fea8f4b1aa85026ad5aee5ad8e1599a8d5141fe0 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 7 Apr 2021 10:18:32 +1000 Subject: [PATCH 0327/1788] Move make_tmpdir() into portable-specific area. Reduces diff vs OpenBSD and makes it more likely diffs will apply cleanly. --- regress/test-exec.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/regress/test-exec.sh b/regress/test-exec.sh index da1963aa0764..e9018b5e5f19 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -336,6 +336,12 @@ if ! have_prog hostname; then uname -n } fi + +make_tmpdir () +{ + SSH_REGRESS_TMP="$($OBJ/mkdtemp openssh-XXXXXXXX)" || \ + fatal "failed to create temporary directory" +} # End of portable specific functions stop_sshd () @@ -369,12 +375,6 @@ stop_sshd () fi } -make_tmpdir () -{ - SSH_REGRESS_TMP="$($OBJ/mkdtemp openssh-XXXXXXXX)" || \ - fatal "failed to create temporary directory" -} - # helper cleanup () { From d1bd184046bc310c405f45da3614a1dc5b3e521a Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 7 Apr 2021 10:23:51 +1000 Subject: [PATCH 0328/1788] Remove only use of warn(). The warn() function is only used in one place in portable and does not exist upstream. Upgrade the only instance it's used to fail() (the privsep/sandbox+proxyconnect, from back when that was new) and remove the now-unused function. --- regress/connect-privsep.sh | 3 +-- regress/test-exec.sh | 6 ------ 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/regress/connect-privsep.sh b/regress/connect-privsep.sh index 76137b06087e..8970340a29c4 100644 --- a/regress/connect-privsep.sh +++ b/regress/connect-privsep.sh @@ -16,8 +16,7 @@ echo 'UsePrivilegeSeparation sandbox' >> $OBJ/sshd_proxy ${SSH} -F $OBJ/ssh_proxy 999.999.999.999 true if [ $? -ne 0 ]; then - # XXX replace this with fail once sandbox has stabilised - warn "ssh privsep/sandbox+proxyconnect failed" + fail "ssh privsep/sandbox+proxyconnect failed" fi # Because sandbox is sensitive to changes in libc, especially malloc, retest diff --git a/regress/test-exec.sh b/regress/test-exec.sh index e9018b5e5f19..bc59ebddf055 100644 --- a/regress/test-exec.sh +++ b/regress/test-exec.sh @@ -429,12 +429,6 @@ verbose () fi } -warn () -{ - echo "WARNING: $@" >>$TEST_SSH_LOGFILE - echo "WARNING: $@" -} - fail () { save_debug_log "FAIL: $@" From 80032102d05e866dc2a48a5caf760cf42c2e090e Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 8 Apr 2021 13:25:57 +1000 Subject: [PATCH 0329/1788] ifdef out MIN and MAX. In -portable, defines.h ensures that these are defined, so redefining potentially causes a warning. We don't just delete it to make any future code syncs a little but easier. bz#3293. --- openbsd-compat/memmem.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openbsd-compat/memmem.c b/openbsd-compat/memmem.c index ac1243eb0d17..ad330d1a8879 100644 --- a/openbsd-compat/memmem.c +++ b/openbsd-compat/memmem.c @@ -61,8 +61,11 @@ fourbyte_memmem(const unsigned char *h, size_t k, const unsigned char *n) return hw == nw ? (char *)h-4 : 0; } +#if 0 +/* In -portable, defines.h ensures that these are already defined. */ #define MAX(a,b) ((a)>(b)?(a):(b)) #define MIN(a,b) ((a)<(b)?(a):(b)) +#endif #define BITOP(a,b,op) \ ((a)[(size_t)(b)/(8*sizeof *(a))] op (size_t)1<<((size_t)(b)%(8*sizeof *(a)))) From 19e534462710e98737478fd9c44768b50c27c4c6 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 8 Apr 2021 13:31:08 +1000 Subject: [PATCH 0330/1788] Run unit tests under valgrind. Run a separate build for the unit tests under Valgrind. They take long enough that running in parallel with the other Valgrind tests helps. --- .github/configs | 3 +++ .github/workflows/c-cpp.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/.github/configs b/.github/configs index 87c7a6dc213a..62dbe8795110 100755 --- a/.github/configs +++ b/.github/configs @@ -84,6 +84,9 @@ case "$config" in valgrind-4) LTESTS="${tests4}" ;; + valgrind-unit) + TEST_TARGET="unit USE_VALGRIND=1" + ;; esac ;; *) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index a712af7c2189..c4ae28434305 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -22,6 +22,7 @@ jobs: - { os: ubuntu-20.04, configs: valgrind-2 } - { os: ubuntu-20.04, configs: valgrind-3 } - { os: ubuntu-20.04, configs: valgrind-4 } + - { os: ubuntu-20.04, configs: valgrind-unit } - { os: ubuntu-20.04, configs: pam } - { os: ubuntu-20.04, configs: kitchensink } - { os: ubuntu-20.04, configs: hardenedmalloc } From f42b550c281d28bd19e9dd6ce65069164f3482b0 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 8 Apr 2021 14:20:12 +1000 Subject: [PATCH 0331/1788] Add pattern for valgrind-unit. --- .github/configs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/configs b/.github/configs index 62dbe8795110..c47f1a523b16 100755 --- a/.github/configs +++ b/.github/configs @@ -56,7 +56,7 @@ case "$config" in LIBCRYPTOFLAGS="--without-openssl" TEST_TARGET=t-exec ;; - valgrind-[1-4]) + valgrind-[1-4]|valgrind-unit) # rlimit sandbox and FORTIFY_SOURCE confuse Valgrind. CONFIGFLAGS="--without-sandbox --without-hardening" CONFIGFLAGS="$CONFIGFLAGS --with-cppflags=-D_FORTIFY_SOURCE=0" From 1f189181f3ea09a9b08aa866f78843fec800874f Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 8 Apr 2021 15:17:19 +1000 Subject: [PATCH 0332/1788] Pass OBJ to unit test make invocation. At least the Valgrind unit tests uses $OBJ. --- Makefile.in | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.in b/Makefile.in index dddb2e4210b3..b749206dd4e7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -712,6 +712,7 @@ unit: regress-unit-binaries $(MAKE) \ .OBJDIR="$${BUILDDIR}/regress" \ .CURDIR="`pwd`" \ + OBJ="$${BUILDDIR}/regress" \ $@ && echo $@ tests passed interop-tests t-exec file-tests: regress-prep regress-binaries $(TARGETS) From bfa5405da05d906ffd58216eb77c4375b62d64c2 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 8 Apr 2021 15:18:15 +1000 Subject: [PATCH 0333/1788] Ensure valgrind-out exists. Normally the regress tests would create it, but running the unit tests on their own would fail because the directory did not exist. --- regress/valgrind-unit.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/regress/valgrind-unit.sh b/regress/valgrind-unit.sh index 4143ead4b62e..193289e6b78e 100755 --- a/regress/valgrind-unit.sh +++ b/regress/valgrind-unit.sh @@ -19,4 +19,6 @@ if [ "x$VALGRIND_PATH" != "x" ]; then VG_PATH="$VALGRIND_PATH" fi +mkdir -p "$OBJ/valgrind-out" + exec $VG_PATH $VG_OPTS $UNIT_BINARY $UNIT_ARGS From ea996ce2d023aa3c6d31125e2c3ebda1cb42db8c Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 10 Apr 2021 18:22:57 +1000 Subject: [PATCH 0334/1788] dedicated gnome-ssk-askpass3 source Compatibility with Wayland requires that we use the gdk_seat_grab() API for grabbing mouse/keyboard, however these API don't exist in Gtk+2. This branches gnome-ssk-askpass2.c => gnome-ssk-askpass3.c and makes the changes to use the gdk_seat_grab() instead of grabbing mouse/focus separately via GDK. In the future, we can also use the branched file to avoid some API that has been soft-deprecated in GTK+3, e.g. gtk_widget_modify_fg --- contrib/Makefile | 4 +- contrib/gnome-ssh-askpass3.c | 316 +++++++++++++++++++++++++++++++++++ 2 files changed, 318 insertions(+), 2 deletions(-) create mode 100644 contrib/gnome-ssh-askpass3.c diff --git a/contrib/Makefile b/contrib/Makefile index 1cc5b63012b7..45d878bdcf22 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -13,9 +13,9 @@ gnome-ssh-askpass2: gnome-ssh-askpass2.c gnome-ssh-askpass2.c -o gnome-ssh-askpass2 \ `$(PKG_CONFIG) --libs gtk+-2.0 x11` -gnome-ssh-askpass3: gnome-ssh-askpass2.c +gnome-ssh-askpass3: gnome-ssh-askpass3.c $(CC) $(CFLAGS) `$(PKG_CONFIG) --cflags gtk+-3.0` \ - gnome-ssh-askpass2.c -o gnome-ssh-askpass3 \ + gnome-ssh-askpass3.c -o gnome-ssh-askpass3 \ `$(PKG_CONFIG) --libs gtk+-3.0 x11` clean: diff --git a/contrib/gnome-ssh-askpass3.c b/contrib/gnome-ssh-askpass3.c new file mode 100644 index 000000000000..c22903989a6b --- /dev/null +++ b/contrib/gnome-ssh-askpass3.c @@ -0,0 +1,316 @@ +/* + * Copyright (c) 2000-2002 Damien Miller. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* GTK2 support by Nalin Dahyabhai */ + +/* + * This is a simple GNOME SSH passphrase grabber. To use it, set the + * environment variable SSH_ASKPASS to point to the location of + * gnome-ssh-askpass before calling "ssh-add < /dev/null". + * + * There is only two run-time options: if you set the environment variable + * "GNOME_SSH_ASKPASS_GRAB_SERVER=true" then gnome-ssh-askpass will grab + * the X server. If you set "GNOME_SSH_ASKPASS_GRAB_POINTER=true", then the + * pointer will be grabbed too. These may have some benefit to security if + * you don't trust your X server. We grab the keyboard always. + */ + +#define GRAB_TRIES 16 +#define GRAB_WAIT 250 /* milliseconds */ + +#define PROMPT_ENTRY 0 +#define PROMPT_CONFIRM 1 +#define PROMPT_NONE 2 + +/* + * Compile with: + * + * cc -Wall `pkg-config --cflags gtk+-2.0` \ + * gnome-ssh-askpass2.c -o gnome-ssh-askpass \ + * `pkg-config --libs gtk+-2.0` + * + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +static void +report_failed_grab (GtkWidget *parent_window, const char *what) +{ + GtkWidget *err; + + err = gtk_message_dialog_new(GTK_WINDOW(parent_window), 0, + GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + "Could not grab %s. A malicious client may be eavesdropping " + "on your session.", what); + gtk_window_set_position(GTK_WINDOW(err), GTK_WIN_POS_CENTER); + + gtk_dialog_run(GTK_DIALOG(err)); + + gtk_widget_destroy(err); +} + +static void +ok_dialog(GtkWidget *entry, gpointer dialog) +{ + g_return_if_fail(GTK_IS_DIALOG(dialog)); + gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); +} + +static gboolean +check_none(GtkWidget *widget, GdkEventKey *event, gpointer dialog) +{ + switch (event->keyval) { + case GDK_KEY_Escape: + /* esc -> close dialog */ + gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE); + return TRUE; + case GDK_KEY_Tab: + /* tab -> focus close button */ + gtk_widget_grab_focus(gtk_dialog_get_widget_for_response( + dialog, GTK_RESPONSE_CLOSE)); + return TRUE; + default: + /* eat all other key events */ + return TRUE; + } +} + +static int +parse_env_hex_color(const char *env, GdkColor *c) +{ + const char *s; + unsigned long ul; + char *ep; + size_t n; + + if ((s = getenv(env)) == NULL) + return 0; + + memset(c, 0, sizeof(*c)); + + /* Permit hex rgb or rrggbb optionally prefixed by '#' or '0x' */ + if (*s == '#') + s++; + else if (strncmp(s, "0x", 2) == 0) + s += 2; + n = strlen(s); + if (n != 3 && n != 6) + goto bad; + ul = strtoul(s, &ep, 16); + if (*ep != '\0' || ul > 0xffffff) { + bad: + fprintf(stderr, "Invalid $%s - invalid hex color code\n", env); + return 0; + } + /* Valid hex sequence; expand into a GdkColor */ + if (n == 3) { + /* 4-bit RGB */ + c->red = ((ul >> 8) & 0xf) << 12; + c->green = ((ul >> 4) & 0xf) << 12; + c->blue = (ul & 0xf) << 12; + } else { + /* 8-bit RGB */ + c->red = ((ul >> 16) & 0xff) << 8; + c->green = ((ul >> 8) & 0xff) << 8; + c->blue = (ul & 0xff) << 8; + } + return 1; +} + +static int +passphrase_dialog(char *message, int prompt_type) +{ + const char *failed; + char *passphrase, *local; + int result, grab_tries, grab_server, grab_pointer; + int buttons, default_response; + GtkWidget *parent_window, *dialog, *entry; + GdkGrabStatus status; + GdkColor fg, bg; + GdkSeat *seat; + GdkDisplay *display; + GdkSeatCapabilities caps; + int fg_set = 0, bg_set = 0; + + grab_server = (getenv("GNOME_SSH_ASKPASS_GRAB_SERVER") != NULL); + grab_pointer = (getenv("GNOME_SSH_ASKPASS_GRAB_POINTER") != NULL); + grab_tries = 0; + + fg_set = parse_env_hex_color("GNOME_SSH_ASKPASS_FG_COLOR", &fg); + bg_set = parse_env_hex_color("GNOME_SSH_ASKPASS_BG_COLOR", &bg); + + /* Create an invisible parent window so that GtkDialog doesn't + * complain. */ + parent_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + + switch (prompt_type) { + case PROMPT_CONFIRM: + buttons = GTK_BUTTONS_YES_NO; + default_response = GTK_RESPONSE_YES; + break; + case PROMPT_NONE: + buttons = GTK_BUTTONS_CLOSE; + default_response = GTK_RESPONSE_CLOSE; + break; + default: + buttons = GTK_BUTTONS_OK_CANCEL; + default_response = GTK_RESPONSE_OK; + break; + } + + dialog = gtk_message_dialog_new(GTK_WINDOW(parent_window), 0, + GTK_MESSAGE_QUESTION, buttons, "%s", message); + + gtk_window_set_title(GTK_WINDOW(dialog), "OpenSSH"); + gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); + gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); + gtk_dialog_set_default_response(GTK_DIALOG(dialog), default_response); + gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); + + if (fg_set) + gtk_widget_modify_fg(dialog, GTK_STATE_NORMAL, &fg); + if (bg_set) + gtk_widget_modify_bg(dialog, GTK_STATE_NORMAL, &bg); + + if (prompt_type == PROMPT_ENTRY || prompt_type == PROMPT_NONE) { + entry = gtk_entry_new(); + if (fg_set) + gtk_widget_modify_fg(entry, GTK_STATE_NORMAL, &fg); + if (bg_set) + gtk_widget_modify_bg(entry, GTK_STATE_NORMAL, &bg); + gtk_box_pack_start( + GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + entry, FALSE, FALSE, 0); + gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); + gtk_widget_grab_focus(entry); + if (prompt_type == PROMPT_ENTRY) { + gtk_widget_show(entry); + /* Make close dialog */ + g_signal_connect(G_OBJECT(entry), "activate", + G_CALLBACK(ok_dialog), dialog); + } else { + /* + * Ensure the 'close' button is not focused by default + * but is still reachable via tab. This is a bit of a + * hack - it uses a hidden entry that responds to a + * couple of keypress events (escape and tab only). + */ + gtk_widget_realize(entry); + g_signal_connect(G_OBJECT(entry), "key_press_event", + G_CALLBACK(check_none), dialog); + } + } + /* Grab focus */ + gtk_widget_show_now(dialog); + display = gtk_widget_get_display(GTK_WIDGET(dialog)); + seat = gdk_display_get_default_seat(display); + caps = GDK_SEAT_CAPABILITY_KEYBOARD; + if (grab_pointer) + caps |= GDK_SEAT_CAPABILITY_ALL_POINTING; + if (grab_server) + caps = GDK_SEAT_CAPABILITY_ALL; + for (;;) { + status = gdk_seat_grab(seat, gtk_widget_get_window(dialog), + caps, TRUE, NULL, NULL, NULL, NULL); + if (status == GDK_GRAB_SUCCESS) + break; + usleep(GRAB_WAIT * 1000); + if (++grab_tries > GRAB_TRIES) + goto nograb; + } + + result = gtk_dialog_run(GTK_DIALOG(dialog)); + + /* Ungrab */ + gdk_seat_ungrab(seat); + gdk_display_flush(display); + + /* Report passphrase if user selected OK */ + if (prompt_type == PROMPT_ENTRY) { + passphrase = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry))); + if (result == GTK_RESPONSE_OK) { + local = g_locale_from_utf8(passphrase, + strlen(passphrase), NULL, NULL, NULL); + if (local != NULL) { + puts(local); + memset(local, '\0', strlen(local)); + g_free(local); + } else { + puts(passphrase); + } + } + /* Zero passphrase in memory */ + memset(passphrase, '\b', strlen(passphrase)); + gtk_entry_set_text(GTK_ENTRY(entry), passphrase); + memset(passphrase, '\0', strlen(passphrase)); + g_free(passphrase); + } + + gtk_widget_destroy(dialog); + if (result != GTK_RESPONSE_OK && result != GTK_RESPONSE_YES) + return -1; + return 0; + + nograb: + gtk_widget_destroy(dialog); + report_failed_grab(parent_window, failed); + + return (-1); +} + +int +main(int argc, char **argv) +{ + char *message, *prompt_mode; + int result, prompt_type = PROMPT_ENTRY; + + gtk_init(&argc, &argv); + + if (argc > 1) { + message = g_strjoinv(" ", argv + 1); + } else { + message = g_strdup("Enter your OpenSSH passphrase:"); + } + + if ((prompt_mode = getenv("SSH_ASKPASS_PROMPT")) != NULL) { + if (strcasecmp(prompt_mode, "confirm") == 0) + prompt_type = PROMPT_CONFIRM; + else if (strcasecmp(prompt_mode, "none") == 0) + prompt_type = PROMPT_NONE; + } + + setvbuf(stdout, 0, _IONBF, 0); + result = passphrase_dialog(message, prompt_type); + g_free(message); + + return (result); +} From d5d6b7d76d171a2e6861609dcd92e714ee62ad88 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sat, 10 Apr 2021 18:45:00 +1000 Subject: [PATCH 0335/1788] perform report_failed_grab() inline --- contrib/gnome-ssh-askpass3.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/contrib/gnome-ssh-askpass3.c b/contrib/gnome-ssh-askpass3.c index c22903989a6b..e1a0533ef624 100644 --- a/contrib/gnome-ssh-askpass3.c +++ b/contrib/gnome-ssh-askpass3.c @@ -62,22 +62,6 @@ #include #include -static void -report_failed_grab (GtkWidget *parent_window, const char *what) -{ - GtkWidget *err; - - err = gtk_message_dialog_new(GTK_WINDOW(parent_window), 0, - GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, - "Could not grab %s. A malicious client may be eavesdropping " - "on your session.", what); - gtk_window_set_position(GTK_WINDOW(err), GTK_WIN_POS_CENTER); - - gtk_dialog_run(GTK_DIALOG(err)); - - gtk_widget_destroy(err); -} - static void ok_dialog(GtkWidget *entry, gpointer dialog) { @@ -153,7 +137,7 @@ passphrase_dialog(char *message, int prompt_type) char *passphrase, *local; int result, grab_tries, grab_server, grab_pointer; int buttons, default_response; - GtkWidget *parent_window, *dialog, *entry; + GtkWidget *parent_window, *dialog, *entry, *err; GdkGrabStatus status; GdkColor fg, bg; GdkSeat *seat; @@ -282,9 +266,14 @@ passphrase_dialog(char *message, int prompt_type) nograb: gtk_widget_destroy(dialog); - report_failed_grab(parent_window, failed); - - return (-1); + err = gtk_message_dialog_new(GTK_WINDOW(parent_window), 0, + GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + "Could not grab input. A malicious client may be eavesdropping " + "on your session."); + gtk_window_set_position(GTK_WINDOW(err), GTK_WIN_POS_CENTER); + gtk_dialog_run(GTK_DIALOG(err)); + gtk_widget_destroy(err); + return -1; } int From 2dc328023f60212cd29504fc05d849133ae47355 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Wed, 14 Apr 2021 11:42:55 +1000 Subject: [PATCH 0336/1788] sshd don't exit on transient read errors openssh-8.5 introduced a regression that would cause sshd to exit because of transient read errors on the network socket (e.g. EINTR, EAGAIN). Reported by balu.gajjala AT gmail.com via bz3297 --- serverloop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverloop.c b/serverloop.c index 669179718555..70a20ab496fc 100644 --- a/serverloop.c +++ b/serverloop.c @@ -333,7 +333,7 @@ process_input(struct ssh *ssh, fd_set *readset, int connection_in) return -1; } else if (len == -1) { if (errno == EINTR || errno == EAGAIN || - errno != EWOULDBLOCK) + errno == EWOULDBLOCK) return 0; verbose("Read error from remote host %s port %d: %s", ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), From faf2b86a46c9281d237bcdec18c99e94a4eb820a Mon Sep 17 00:00:00 2001 From: "markus@openbsd.org" Date: Thu, 15 Apr 2021 16:24:31 +0000 Subject: [PATCH 0337/1788] upstream: do not pass file/func to monitor; noted by Ilja van Sprundel; ok djm@ OpenBSD-Commit-ID: 85ae5c063845c410283cbdce685515dcd19479fa --- log.c | 22 ++++++++++++++++------ log.h | 7 ++++--- monitor.c | 16 ++++++---------- monitor_wrap.c | 9 +++------ monitor_wrap.h | 5 ++--- 5 files changed, 31 insertions(+), 28 deletions(-) diff --git a/log.c b/log.c index 36ab284d6ff6..165b486389dc 100644 --- a/log.c +++ b/log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: log.c,v 1.57 2021/04/03 06:18:40 djm Exp $ */ +/* $OpenBSD: log.c,v 1.58 2021/04/15 16:24:31 markus Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -334,8 +334,8 @@ set_log_handler(log_handler_fn *handler, void *ctx) } static void -do_log(const char *file, const char *func, int line, LogLevel level, - int force, const char *suffix, const char *fmt, va_list args) +do_log(LogLevel level, int force, const char *suffix, const char *fmt, + va_list args) { #if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) struct syslog_data sdata = SYSLOG_DATA_INIT; @@ -400,7 +400,7 @@ do_log(const char *file, const char *func, int line, LogLevel level, /* Avoid recursion */ tmp_handler = log_handler; log_handler = NULL; - tmp_handler(file, func, line, level, fmtbuf, log_handler_ctx); + tmp_handler(level, force, fmtbuf, log_handler_ctx); log_handler = tmp_handler; } else if (log_on_stderr) { snprintf(msgbuf, sizeof msgbuf, "%.*s\r\n", @@ -475,12 +475,22 @@ sshlogv(const char *file, const char *func, int line, int showfunc, } } - if (log_handler == NULL && forced) + if (forced) snprintf(fmt2, sizeof(fmt2), "%s: %s", tag, fmt); else if (showfunc) snprintf(fmt2, sizeof(fmt2), "%s: %s", func, fmt); else strlcpy(fmt2, fmt, sizeof(fmt2)); - do_log(file, func, line, level, forced, suffix, fmt2, args); + do_log(level, forced, suffix, fmt2, args); +} + +void +sshlogdirect(LogLevel level, int forced, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + do_log(level, forced, NULL, fmt, args); + va_end(args); } diff --git a/log.h b/log.h index 0e9e303c7de7..6218b4177a6f 100644 --- a/log.h +++ b/log.h @@ -1,4 +1,4 @@ -/* $OpenBSD: log.h,v 1.32 2021/04/06 23:24:30 djm Exp $ */ +/* $OpenBSD: log.h,v 1.33 2021/04/15 16:24:31 markus Exp $ */ /* * Author: Tatu Ylonen @@ -49,8 +49,7 @@ typedef enum { SYSLOG_LEVEL_NOT_SET = -1 } LogLevel; -typedef void (log_handler_fn)(const char *, const char *, int, LogLevel, - const char *, void *); +typedef void (log_handler_fn)(LogLevel, int, const char *, void *); void log_init(const char *, LogLevel, SyslogFacility, int); LogLevel log_level_get(void); @@ -82,6 +81,8 @@ void sshlogdie(const char *, const char *, int, int, void sshfatal(const char *, const char *, int, int, LogLevel, const char *, const char *, ...) __attribute__((noreturn)) __attribute__((format(printf, 7, 8))); +void sshlogdirect(LogLevel, int, const char *, ...) + __attribute__((format(printf, 3, 4))); #define do_log2(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, NULL, __VA_ARGS__) #define debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, NULL, __VA_ARGS__) diff --git a/monitor.c b/monitor.c index a464fcc817ae..1a00d4591733 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.224 2021/03/03 22:41:49 djm Exp $ */ +/* $OpenBSD: monitor.c,v 1.225 2021/04/15 16:24:31 markus Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -417,8 +417,8 @@ static int monitor_read_log(struct monitor *pmonitor) { struct sshbuf *logmsg; - u_int len, level, line; - char *msg, *file, *func; + u_int len, level, forced; + char *msg; u_char *p; int r; @@ -449,21 +449,17 @@ monitor_read_log(struct monitor *pmonitor) fatal_fr(r, "reserve msg"); if (atomicio(read, pmonitor->m_log_recvfd, p, len) != len) fatal_f("log fd read: %s", strerror(errno)); - if ((r = sshbuf_get_cstring(logmsg, &file, NULL)) != 0 || - (r = sshbuf_get_cstring(logmsg, &func, NULL)) != 0 || - (r = sshbuf_get_u32(logmsg, &line)) != 0 || - (r = sshbuf_get_u32(logmsg, &level)) != 0 || + if ((r = sshbuf_get_u32(logmsg, &level)) != 0 || + (r = sshbuf_get_u32(logmsg, &forced)) != 0 || (r = sshbuf_get_cstring(logmsg, &msg, NULL)) != 0) fatal_fr(r, "parse"); /* Log it */ if (log_level_name(level) == NULL) fatal_f("invalid log level %u (corrupted message?)", level); - sshlog(file, func, line, 0, level, NULL, "%s [preauth]", msg); + sshlogdirect(level, forced, "%s [preauth]", msg); sshbuf_free(logmsg); - free(file); - free(func); free(msg); return 0; diff --git a/monitor_wrap.c b/monitor_wrap.c index 1226dfd0e401..748333c75e59 100644 --- a/monitor_wrap.c +++ b/monitor_wrap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_wrap.c,v 1.122 2020/11/27 00:37:10 djm Exp $ */ +/* $OpenBSD: monitor_wrap.c,v 1.123 2021/04/15 16:24:31 markus Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -82,8 +82,7 @@ extern struct sshbuf *loginmsg; extern ServerOptions options; void -mm_log_handler(const char *file, const char *func, int line, - LogLevel level, const char *msg, void *ctx) +mm_log_handler(LogLevel level, int forced, const char *msg, void *ctx) { struct sshbuf *log_msg; struct monitor *mon = (struct monitor *)ctx; @@ -97,10 +96,8 @@ mm_log_handler(const char *file, const char *func, int line, fatal_f("sshbuf_new failed"); if ((r = sshbuf_put_u32(log_msg, 0)) != 0 || /* length; filled below */ - (r = sshbuf_put_cstring(log_msg, file)) != 0 || - (r = sshbuf_put_cstring(log_msg, func)) != 0 || - (r = sshbuf_put_u32(log_msg, (u_int)line)) != 0 || (r = sshbuf_put_u32(log_msg, level)) != 0 || + (r = sshbuf_put_u32(log_msg, forced)) != 0 || (r = sshbuf_put_cstring(log_msg, msg)) != 0) fatal_fr(r, "assemble"); if ((len = sshbuf_len(log_msg)) < 4 || len > 0xffffffff) diff --git a/monitor_wrap.h b/monitor_wrap.h index 8507f1c11ef8..a163b67d2878 100644 --- a/monitor_wrap.h +++ b/monitor_wrap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_wrap.h,v 1.46 2020/10/16 13:24:45 djm Exp $ */ +/* $OpenBSD: monitor_wrap.h,v 1.47 2021/04/15 16:24:31 markus Exp $ */ /* * Copyright 2002 Niels Provos @@ -40,8 +40,7 @@ struct sshkey; struct sshauthopt; struct sshkey_sig_details; -void mm_log_handler(const char *, const char *, int, LogLevel, - const char *, void *); +void mm_log_handler(LogLevel, int, const char *, void *); int mm_is_monitor(void); #ifdef WITH_OPENSSL DH *mm_choose_dh(int, int, int); From b2b60ebab0cb77b5bc02d364d72e13db882f33ae Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 16 Apr 2021 03:42:00 +0000 Subject: [PATCH 0338/1788] upstream: openssh-8.6 OpenBSD-Commit-ID: b5f3e133c846127ec114812248bc17eff07c3e19 --- version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.h b/version.h index 6b4fa3721e80..b1cdf851daee 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ -/* $OpenBSD: version.h,v 1.89 2021/03/02 01:48:18 djm Exp $ */ +/* $OpenBSD: version.h,v 1.90 2021/04/16 03:42:00 djm Exp $ */ -#define SSH_VERSION "OpenSSH_8.5" +#define SSH_VERSION "OpenSSH_8.6" #define SSH_PORTABLE "p1" #define SSH_RELEASE SSH_VERSION SSH_PORTABLE From 2fb25ca11e8b281363a2a2a4dec4c497a1475d9a Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 16 Apr 2021 13:53:02 +1000 Subject: [PATCH 0339/1788] crank version in README and RPM spec files --- README | 2 +- contrib/redhat/openssh.spec | 2 +- contrib/suse/openssh.spec | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index 0f87812a6388..99fe347738ca 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -See https://www.openssh.com/releasenotes.html#8.5p1 for the release notes. +See https://www.openssh.com/releasenotes.html#8.6p1 for the release notes. Please read https://www.openssh.com/report.html for bug reporting instructions and note that we do not use Github for bug reporting or diff --git a/contrib/redhat/openssh.spec b/contrib/redhat/openssh.spec index 908cafdacd1b..96972ec48804 100644 --- a/contrib/redhat/openssh.spec +++ b/contrib/redhat/openssh.spec @@ -1,4 +1,4 @@ -%global ver 8.5p1 +%global ver 8.6p1 %global rel 1%{?dist} # OpenSSH privilege separation requires a user & group ID diff --git a/contrib/suse/openssh.spec b/contrib/suse/openssh.spec index fe950303ee95..827eee6c270a 100644 --- a/contrib/suse/openssh.spec +++ b/contrib/suse/openssh.spec @@ -13,7 +13,7 @@ Summary: OpenSSH, a free Secure Shell (SSH) protocol implementation Name: openssh -Version: 8.5p1 +Version: 8.6p1 URL: https://www.openssh.com/ Release: 1 Source0: openssh-%{version}.tar.gz From e86968280e358e62649d268d41f698d64d0dc9fa Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Fri, 16 Apr 2021 13:55:25 +1000 Subject: [PATCH 0340/1788] depend --- .depend | 180 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/.depend b/.depend index c7bff499c5a3..78629a54c8ad 100644 --- a/.depend +++ b/.depend @@ -3,103 +3,103 @@ # DO NOT DELETE addr.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h -addrmatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h match.h log.h ./ssherr.h +addrmatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h match.h log.h ssherr.h atomicio.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h audit-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h audit-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h audit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h sshbuf.h sshkey.h misc.h servconf.h uidswap.h hostfile.h auth.h auth-pam.h audit.h loginrec.h -auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ./ssherr.h log.h sshbuf.h misc.h sshkey.h match.h ssh2.h auth-options.h +auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ssherr.h sshbuf.h sshkey.h misc.h servconf.h uidswap.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h log.h sshbuf.h misc.h sshkey.h match.h ssh2.h auth-options.h auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h ./ssherr.h log.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h -auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h uidswap.h pathnames.h log.h ./ssherr.h misc.h sshbuf.h sshkey.h servconf.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h ssherr.h log.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h +auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h uidswap.h pathnames.h log.h ssherr.h misc.h sshbuf.h sshkey.h servconf.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h auth-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h auth.o: authfile.h monitor_wrap.h compat.h channels.h -auth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h groupaccess.h log.h ./ssherr.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h canohost.h uidswap.h packet.h dispatch.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h ./ssherr.h log.h misc.h servconf.h +auth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h groupaccess.h log.h ssherr.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h canohost.h uidswap.h packet.h dispatch.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h ssherr.h log.h misc.h servconf.h auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h auth2-hostbased.o: canohost.h monitor_wrap.h pathnames.h match.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h kex.h mac.h crypto_api.h sshbuf.h log.h ./ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h ./ssherr.h misc.h servconf.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h misc.h servconf.h compat.h ssh2.h monitor_wrap.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h ./ssherr.h log.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h monitor_wrap.h misc.h servconf.h -auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h kex.h mac.h crypto_api.h sshbuf.h log.h ./ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h kex.h mac.h crypto_api.h sshbuf.h log.h ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h ssherr.h misc.h servconf.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ssherr.h misc.h servconf.h compat.h ssh2.h monitor_wrap.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h ssherr.h log.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h monitor_wrap.h misc.h servconf.h +auth2-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h kex.h mac.h crypto_api.h sshbuf.h log.h ssherr.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth2-pubkey.o: pathnames.h uidswap.h auth-options.h canohost.h monitor_wrap.h authfile.h match.h channels.h session.h sk-api.h auth2.o: digest.h -auth2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h sshbuf.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h monitor_wrap.h -authfd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h compat.h log.h ./ssherr.h atomicio.h misc.h -authfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h ssh.h log.h ./ssherr.h authfile.h misc.h atomicio.h sshkey.h sshbuf.h krl.h +auth2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ssherr.h sshbuf.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h monitor_wrap.h +authfd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h compat.h log.h ssherr.h atomicio.h misc.h +authfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h ssh.h log.h ssherr.h authfile.h misc.h atomicio.h sshkey.h sshbuf.h krl.h bitmap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h bitmap.h -canohost.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h canohost.h misc.h +canohost.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ssherr.h canohost.h misc.h chacha.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h chacha.h -channels.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h ./ssherr.h sshbuf.h packet.h dispatch.h log.h misc.h channels.h compat.h canohost.h sshkey.h authfd.h pathnames.h match.h +channels.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h ssherr.h sshbuf.h packet.h dispatch.h log.h misc.h channels.h compat.h canohost.h sshkey.h authfd.h pathnames.h match.h cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher-aesctr.h rijndael.h cipher-chachapoly-libcrypto.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h sshbuf.h cipher-chachapoly.h chacha.h poly1305.h +cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshbuf.h cipher-chachapoly.h chacha.h poly1305.h cipher-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -cipher.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h misc.h sshbuf.h ./ssherr.h digest.h openbsd-compat/openssl-compat.h -cleanup.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h +cipher.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h misc.h sshbuf.h ssherr.h digest.h openbsd-compat/openssl-compat.h +cleanup.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h clientloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h packet.h dispatch.h sshbuf.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h -clientloop.o: myproposal.h log.h ./ssherr.h misc.h readconf.h clientloop.h sshconnect.h authfd.h atomicio.h sshpty.h match.h msg.h hostfile.h -compat.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h log.h ./ssherr.h match.h kex.h mac.h crypto_api.h +clientloop.o: myproposal.h log.h ssherr.h misc.h readconf.h clientloop.h sshconnect.h authfd.h atomicio.h sshpty.h match.h msg.h hostfile.h +compat.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h log.h ssherr.h match.h kex.h mac.h crypto_api.h dh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -digest-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h digest.h +digest-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h digest.h digest-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -dispatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh2.h log.h ./ssherr.h dispatch.h packet.h openbsd-compat/sys-queue.h compat.h -dns.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h ./ssherr.h dns.h log.h digest.h +dispatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh2.h log.h ssherr.h dispatch.h packet.h openbsd-compat/sys-queue.h compat.h +dns.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h ssherr.h dns.h log.h digest.h 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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ge25519.h fe25519.h sc25519.h entropy.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -fatal.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h +fatal.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h fe25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h fe25519.h crypto_api.h ge25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h fe25519.h crypto_api.h sc25519.h ge25519.h ge25519_base.data -groupaccess.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h groupaccess.h match.h log.h ./ssherr.h +groupaccess.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h groupaccess.h match.h log.h ssherr.h gss-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h gss-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h gss-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h hmac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h digest.h hmac.h -hostfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h sshkey.h hostfile.h log.h ./ssherr.h misc.h pathnames.h digest.h hmac.h sshbuf.h -kex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh.h ssh2.h atomicio.h version.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h log.h ./ssherr.h +hostfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h sshkey.h hostfile.h log.h ssherr.h misc.h pathnames.h digest.h hmac.h sshbuf.h +kex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh.h ssh2.h atomicio.h version.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h log.h ssherr.h kex.o: match.h misc.h monitor.h sshbuf.h digest.h -kexc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ./ssherr.h ssh2.h +kexc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ssherr.h ssh2.h kexdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -kexecdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h -kexgen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h log.h ./ssherr.h packet.h openbsd-compat/sys-queue.h dispatch.h ssh2.h sshbuf.h digest.h +kexecdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h +kexgen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h log.h ssherr.h packet.h openbsd-compat/sys-queue.h dispatch.h ssh2.h sshbuf.h digest.h kexgex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h kexgexc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h kexgexs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -kexsntrup761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h -krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ./ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h utf8.h krl.h -log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h match.h -loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h ./ssherr.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h canohost.h auth.h auth-pam.h audit.h sshbuf.h +kexsntrup761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h +krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h utf8.h krl.h +log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h match.h +loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h ssherr.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h canohost.h auth.h auth-pam.h audit.h sshbuf.h logintest.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h loginrec.h -mac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h hmac.h umac.h mac.h misc.h ./ssherr.h sshbuf.h openbsd-compat/openssl-compat.h +mac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h hmac.h umac.h mac.h misc.h ssherr.h sshbuf.h openbsd-compat/openssl-compat.h match.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h misc.h md5crypt.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h log.h ./ssherr.h ssh.h sshbuf.h +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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h log.h ssherr.h ssh.h sshbuf.h moduli.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h dh.h packet.h dispatch.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h ./ssherr.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h sk-api.h +monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h dh.h packet.h dispatch.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h ssherr.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h sk-api.h monitor.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h openbsd-compat/openssl-compat.h atomicio.h xmalloc.h ssh.h sshkey.h sshbuf.h hostfile.h auth.h auth-pam.h audit.h loginrec.h cipher.h cipher-chachapoly.h -monitor_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h monitor_fdpass.h +monitor_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h monitor_fdpass.h monitor_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h -monitor_wrap.o: loginrec.h auth-options.h packet.h dispatch.h log.h ./ssherr.h monitor.h monitor_wrap.h atomicio.h monitor_fdpass.h misc.h channels.h session.h servconf.h -msg.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h ./ssherr.h log.h atomicio.h msg.h misc.h -mux.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h log.h ./ssherr.h ssh.h ssh2.h pathnames.h misc.h match.h sshbuf.h channels.h msg.h packet.h dispatch.h monitor_fdpass.h sshpty.h sshkey.h readconf.h clientloop.h -nchan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h ssh2.h sshbuf.h ./ssherr.h packet.h dispatch.h channels.h compat.h log.h +monitor_wrap.o: loginrec.h auth-options.h packet.h dispatch.h log.h ssherr.h monitor.h monitor_wrap.h atomicio.h monitor_fdpass.h misc.h channels.h session.h servconf.h +msg.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h ssherr.h log.h atomicio.h msg.h misc.h +mux.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h log.h ssherr.h ssh.h ssh2.h pathnames.h misc.h match.h sshbuf.h channels.h msg.h packet.h dispatch.h monitor_fdpass.h sshpty.h sshkey.h readconf.h clientloop.h +nchan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h ssh2.h sshbuf.h ssherr.h packet.h dispatch.h channels.h compat.h log.h packet.o: channels.h ssh.h packet.h dispatch.h sshbuf.h -packet.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h compat.h ssh2.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h digest.h log.h ./ssherr.h canohost.h misc.h +packet.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h compat.h ssh2.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h digest.h log.h ssherr.h canohost.h misc.h platform-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h platform-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -platform-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h -platform.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h +platform-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h +platform.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h misc.h servconf.h openbsd-compat/sys-queue.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h poly1305.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h poly1305.h progressmeter.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h progressmeter.h atomicio.h misc.h utf8.h -readconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h xmalloc.h ssh.h ./ssherr.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h pathnames.h log.h sshkey.h misc.h readconf.h match.h kex.h mac.h crypto_api.h +readconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h xmalloc.h ssh.h ssherr.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h pathnames.h log.h sshkey.h misc.h readconf.h match.h kex.h mac.h crypto_api.h readconf.o: uidswap.h myproposal.h digest.h -readpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h pathnames.h log.h ./ssherr.h ssh.h uidswap.h +readpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h pathnames.h log.h ssherr.h ssh.h uidswap.h rijndael.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h rijndael.h sandbox-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sandbox-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h @@ -110,72 +110,72 @@ sandbox-seccomp-filter.o: includes.h config.h defines.h platform.h openbsd-compa sandbox-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sandbox-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sc25519.h crypto_api.h -scp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h atomicio.h pathnames.h log.h ./ssherr.h misc.h progressmeter.h utf8.h -servconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h openbsd-compat/sys-queue.h xmalloc.h ssh.h log.h ./ssherr.h sshbuf.h misc.h servconf.h compat.h pathnames.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h -servconf.o: sshkey.h kex.h mac.h crypto_api.h match.h channels.h groupaccess.h canohost.h packet.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h +scp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h atomicio.h pathnames.h log.h ssherr.h misc.h progressmeter.h utf8.h +servconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h openbsd-compat/sys-queue.h xmalloc.h ssh.h log.h ssherr.h sshbuf.h misc.h servconf.h compat.h pathnames.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h +servconf.o: kex.h mac.h crypto_api.h match.h channels.h groupaccess.h canohost.h packet.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h serverloop.o: cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h loginrec.h session.h auth-options.h serverloop.h -serverloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h sshbuf.h log.h ./ssherr.h misc.h servconf.h canohost.h sshpty.h channels.h compat.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h -session.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h sshbuf.h ./ssherr.h match.h uidswap.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h +serverloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h sshbuf.h log.h ssherr.h misc.h servconf.h canohost.h sshpty.h channels.h compat.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h +session.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h sshbuf.h ssherr.h match.h uidswap.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h session.o: rijndael.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h authfd.h pathnames.h log.h misc.h servconf.h sshlogin.h serverloop.h canohost.h session.h kex.h mac.h crypto_api.h monitor_wrap.h sftp.h atomicio.h -sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ./ssherr.h sshbuf.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h -sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ./ssherr.h sshbuf.h log.h misc.h sftp.h sftp-common.h +sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h sshbuf.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h +sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssherr.h sshbuf.h log.h misc.h sftp.h sftp-common.h sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h sftp-realpath.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h sftp.h misc.h xmalloc.h -sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h ./ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h -sftp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h pathnames.h misc.h utf8.h sftp.h sshbuf.h sftp-common.h sftp-client.h openbsd-compat/glob.h +sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sftp.h misc.h xmalloc.h +sftp-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h +sftp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h pathnames.h misc.h utf8.h sftp.h sshbuf.h sftp-common.h sftp-client.h openbsd-compat/glob.h sk-usbhid.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sntrup761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -srclimit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h canohost.h log.h ./ssherr.h misc.h srclimit.h xmalloc.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h log.h ./ssherr.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h digest.h ssh-sk.h sk-api.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h compat.h log.h ./ssherr.h misc.h digest.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h +srclimit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h addr.h canohost.h log.h ssherr.h misc.h srclimit.h xmalloc.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h log.h ssherr.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h digest.h ssh-sk.h sk-api.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h sshkey.h authfd.h compat.h log.h ssherr.h misc.h digest.h match.h msg.h pathnames.h ssh-pkcs11.h sk-api.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -ssh-ecdsa-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h sshbuf.h ./ssherr.h digest.h sshkey.h +ssh-ecdsa-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h sshbuf.h ssherr.h digest.h sshkey.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -ssh-ed25519-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ./ssherr.h sshbuf.h sshkey.h ssh.h digest.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ./ssherr.h sshbuf.h sshkey.h ssh.h +ssh-ed25519-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ssherr.h sshbuf.h sshkey.h ssh.h digest.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h ssherr.h sshbuf.h sshkey.h ssh.h ssh-keygen.o: cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h sshbuf.h pathnames.h log.h ./ssherr.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h sshsig.h ssh-sk.h sk-api.h cipher.h -ssh-keyscan.o: ./ssherr.h atomicio.h misc.h hostfile.h ssh_api.h ssh2.h dns.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h sshbuf.h pathnames.h log.h ssherr.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h sshsig.h ssh-sk.h sk-api.h cipher.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h compat.h myproposal.h packet.h dispatch.h log.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h +ssh-keyscan.o: ssherr.h atomicio.h misc.h hostfile.h ssh_api.h ssh2.h dns.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h sshbuf.h log.h ./ssherr.h misc.h sshkey.h authfd.h ssh-pkcs11.h -ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h sshkey.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h sshbuf.h log.h ssherr.h misc.h sshkey.h authfd.h ssh-pkcs11.h +ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshkey.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -ssh-sk-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h sshbuf.h sshkey.h msg.h digest.h pathnames.h ssh-sk.h misc.h -ssh-sk-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h sshkey.h authfd.h misc.h sshbuf.h msg.h uidswap.h ssh-sk.h +ssh-sk-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h sshbuf.h sshkey.h msg.h digest.h pathnames.h ssh-sk.h misc.h +ssh-sk-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h sshkey.h authfd.h misc.h sshbuf.h msg.h uidswap.h ssh-sk.h ssh-sk.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h canohost.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h packet.h dispatch.h sshbuf.h channels.h -ssh.o: sshkey.h authfd.h authfile.h pathnames.h clientloop.h log.h ./ssherr.h misc.h readconf.h sshconnect.h kex.h mac.h crypto_api.h sshpty.h match.h msg.h version.h myproposal.h utf8.h +ssh.o: sshkey.h authfd.h authfile.h pathnames.h clientloop.h log.h ssherr.h misc.h readconf.h sshconnect.h kex.h mac.h crypto_api.h sshpty.h match.h msg.h version.h myproposal.h utf8.h ssh_api.o: authfile.h misc.h version.h myproposal.h sshbuf.h openbsd-compat/openssl-compat.h -ssh_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh_api.h openbsd-compat/sys-queue.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h ssh.h ssh2.h packet.h dispatch.h compat.h log.h ./ssherr.h -sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h +ssh_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh_api.h openbsd-compat/sys-queue.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h ssh.h ssh2.h packet.h dispatch.h compat.h log.h ssherr.h +sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -sshbuf-io.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h atomicio.h -sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h -sshbuf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./ssherr.h sshbuf.h misc.h +sshbuf-io.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h atomicio.h +sshbuf-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h +sshbuf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h misc.h sshconnect.o: authfd.h kex.h mac.h crypto_api.h -sshconnect.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h hostfile.h ssh.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h sshkey.h sshconnect.h log.h ./ssherr.h misc.h readconf.h atomicio.h dns.h monitor_fdpass.h ssh2.h version.h authfile.h +sshconnect.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h hostfile.h ssh.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h sshkey.h sshconnect.h log.h ssherr.h misc.h readconf.h atomicio.h dns.h monitor_fdpass.h ssh2.h version.h authfile.h sshconnect2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h packet.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h -sshconnect2.o: myproposal.h sshconnect.h authfile.h dh.h authfd.h log.h ./ssherr.h misc.h readconf.h match.h canohost.h msg.h pathnames.h uidswap.h hostfile.h utf8.h ssh-sk.h sk-api.h -sshd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h log.h ./ssherr.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h chacha.h -sshd.o: poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h crypto_api.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h sk-api.h srclimit.h -ssherr.o: ./ssherr.h +sshconnect2.o: myproposal.h sshconnect.h authfile.h dh.h authfd.h log.h ssherr.h misc.h readconf.h match.h canohost.h msg.h pathnames.h uidswap.h hostfile.h utf8.h ssh-sk.h sk-api.h +sshd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h log.h ssherr.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h chacha.h +sshd.o: poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h crypto_api.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h sk-api.h srclimit.h dh.h +ssherr.o: ssherr.h sshkey-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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h -sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ./ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h match.h ssh-sk.h openbsd-compat/openssl-compat.h -sshlogin.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshlogin.h ./ssherr.h loginrec.h log.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h -sshpty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h log.h ./ssherr.h misc.h -sshsig.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h authfd.h authfile.h log.h ./ssherr.h misc.h sshbuf.h sshsig.h sshkey.h match.h digest.h +sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h match.h ssh-sk.h openbsd-compat/openssl-compat.h +sshlogin.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshlogin.h ssherr.h loginrec.h log.h sshbuf.h misc.h servconf.h openbsd-compat/sys-queue.h +sshpty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h log.h ssherr.h misc.h +sshsig.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h authfd.h authfile.h log.h ssherr.h misc.h sshbuf.h sshsig.h sshkey.h match.h digest.h sshtty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h -ttymodes.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ./ssherr.h compat.h sshbuf.h ttymodes.h -uidswap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ./ssherr.h uidswap.h xmalloc.h +ttymodes.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h ssherr.h compat.h sshbuf.h ttymodes.h +uidswap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h uidswap.h xmalloc.h umac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h umac128.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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h utf8.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h utf8.h verify.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h -xmalloc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ./ssherr.h +xmalloc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h ssherr.h xmss_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmss_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmss_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/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h From 9403d0e805c77a5741ea8c3281bbe92558c2f125 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 16 Apr 2021 18:14:25 +1000 Subject: [PATCH 0341/1788] Add fbsd13 target. --- .github/workflows/selfhosted.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 1cf6b5da0a34..09a1fa7b5d2c 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -16,7 +16,17 @@ jobs: # We use a matrix in two parts: firstly all of the VMs are tested with the # default config. "vm" corresponds to a label associated with the worker. matrix: - os: [bbone, dfly30, dfly48, dfly58, fbsd6, fbsd7, fbsd12, sol10, sol11] + os: + - bbone + - dfly30 + - dfly48 + - dfly58 + - fbsd6 + - fbsd7 + - fbsd12 + - fbsd13 + - sol10 + - sol11 configs: - default # Then we include any extra configs we want to test for specific VMs. @@ -27,6 +37,7 @@ jobs: - { os: fbsd6, configs: pam } - { os: fbsd7, configs: pam } - { os: fbsd12, configs: pam } + - { os: fbsd13, configs: pam } - { os: sol10, configs: pam } - { os: sol11, configs: pam } - { os: sol11, configs: sol64 } From bd4fba22e14da2fa196009010aabec5a8ba9dd42 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 17 Apr 2021 09:55:47 +1000 Subject: [PATCH 0342/1788] Add obsd51 target. --- .github/workflows/selfhosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 09a1fa7b5d2c..8d6579da1ce6 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -25,6 +25,7 @@ jobs: - fbsd7 - fbsd12 - fbsd13 + - obsd51 - sol10 - sol11 configs: From 4457837238072836b2fa3107d603aac809624983 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 20 Apr 2021 23:31:29 +1000 Subject: [PATCH 0343/1788] Add nbsd8 test target. --- .github/workflows/selfhosted.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 8d6579da1ce6..7eedffcff498 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -25,6 +25,7 @@ jobs: - fbsd7 - fbsd12 - fbsd13 + - nbsd8 - obsd51 - sol10 - sol11 @@ -39,6 +40,7 @@ jobs: - { os: fbsd7, configs: pam } - { os: fbsd12, configs: pam } - { os: fbsd13, configs: pam } + - { os: nbsd8, configs: pam } - { os: sol10, configs: pam } - { os: sol11, configs: pam } - { os: sol11, configs: sol64 } From cb4ff640d79b3c736879582139778f016bbb2cd7 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 21 Apr 2021 01:08:04 +1000 Subject: [PATCH 0344/1788] Add win10 test target. --- .github/configs | 4 ++++ .github/workflows/selfhosted.yml | 1 + 2 files changed, 5 insertions(+) diff --git a/.github/configs b/.github/configs index c47f1a523b16..2eff0deae0b5 100755 --- a/.github/configs +++ b/.github/configs @@ -109,6 +109,10 @@ case "${TARGET_HOST}" in # sol11 has 4 test configs so skip unit tests to speed up. TEST_TARGET="tests SKIP_UNIT=1" ;; + win10) + # No sudo on Windows. + SUDO="" + ;; esac # If we have a local openssl/libressl, use that. diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 7eedffcff498..55ba435e6a13 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -29,6 +29,7 @@ jobs: - obsd51 - sol10 - sol11 + - win10 configs: - default # Then we include any extra configs we want to test for specific VMs. From e428f29402fb6ac140b52f8f12e06ece7bb104a0 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 22 Apr 2021 22:26:08 +1000 Subject: [PATCH 0345/1788] Remove now-unused 2nd arg to configs. --- .github/run_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/run_test.sh b/.github/run_test.sh index 66fd5260362f..1d1ecbf35026 100755 --- a/.github/run_test.sh +++ b/.github/run_test.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -. .github/configs $1 $2 +. .github/configs $1 [ -z "${SUDO}" ] || ${SUDO} mkdir -p /var/empty From f57fbfe5eb02df1a91f1a237c4d27165afd87c13 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 22 Apr 2021 22:27:26 +1000 Subject: [PATCH 0346/1788] Don't always set SUDO. Rely on sourcing configs to set as appropriate. --- .github/workflows/c-cpp.yml | 1 - .github/workflows/selfhosted.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index c4ae28434305..c2825a30f3a2 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -52,7 +52,6 @@ jobs: - name: make tests run: ./.github/run_test.sh ${{ matrix.configs }} env: - SUDO: sudo TEST_SSH_UNSAFE_PERMISSIONS: 1 - name: save logs if: failure() diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 55ba435e6a13..ec91ebda5081 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -10,7 +10,6 @@ jobs: runs-on: ${{ matrix.os }} env: TARGET_HOST: ${{ matrix.os }} - SUDO: sudo strategy: fail-fast: false # We use a matrix in two parts: firstly all of the VMs are tested with the From 3fe7e73b025c07eda46d78049f1da8ed7dfc0c69 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 23 Apr 2021 10:26:35 +1000 Subject: [PATCH 0347/1788] Test krb5 on Solaris 11 too. --- .github/configs | 4 ++++ .github/workflows/selfhosted.yml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/configs b/.github/configs index 2eff0deae0b5..b24de4dd1e66 100755 --- a/.github/configs +++ b/.github/configs @@ -36,6 +36,10 @@ case "$config" in libedit) CONFIGFLAGS="--with-libedit" ;; + pam-krb5) + CONFIGFLAGS="--with-pam --with-kerberos5" + SSHD_CONFOPTS="UsePam yes" + ;; *pam) CONFIGFLAGS="--with-pam" SSHD_CONFOPTS="UsePam yes" diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index ec91ebda5081..a9144b4260ce 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -42,7 +42,7 @@ jobs: - { os: fbsd13, configs: pam } - { os: nbsd8, configs: pam } - { os: sol10, configs: pam } - - { os: sol11, configs: pam } + - { os: sol11, configs: pam-krb5 } - { os: sol11, configs: sol64 } # - { os: sol11, configs: sol64-pam } steps: From a6db3a47b56adb76870d59225ffb90a65bc4daf2 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 23 Apr 2021 10:28:28 +1000 Subject: [PATCH 0348/1788] Add openindiana test target. --- .github/workflows/selfhosted.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index a9144b4260ce..e85a5054ae80 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -26,6 +26,7 @@ jobs: - fbsd13 - nbsd8 - obsd51 + - openindiana - sol10 - sol11 - win10 @@ -41,6 +42,7 @@ jobs: - { os: fbsd12, configs: pam } - { os: fbsd13, configs: pam } - { os: nbsd8, configs: pam } + - { os: openindiana, configs: pam } - { os: sol10, configs: pam } - { os: sol11, configs: pam-krb5 } - { os: sol11, configs: sol64 } From c039a6bf79192fe1daa9ddcc7c87dd98e258ae7c Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 23 Apr 2021 11:08:23 +1000 Subject: [PATCH 0349/1788] Re-add macos-11.0 test target. --- .github/workflows/c-cpp.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index c2825a30f3a2..2b6d98900a34 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: # First we test all OSes in the default configuration. - os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, macos-10.15] + os: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, macos-10.15, macos-11.0] configs: [default] # Then we include any extra configs we want to test for specific VMs. # Valgrind slows things down quite a bit, so start them first. @@ -38,6 +38,7 @@ jobs: - { os: ubuntu-16.04, configs: pam } - { os: ubuntu-16.04, configs: kitchensink } - { os: macos-10.15, configs: pam } + - { os: macos-11.0, configs: pam } runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 From db1f9ab8feb838aee9f5b99c6fd3f211355dfdcf Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 23 Apr 2021 14:41:13 +1000 Subject: [PATCH 0350/1788] Add obsd67 test target. --- .github/workflows/selfhosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index e85a5054ae80..4abdfa2458cb 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -26,6 +26,7 @@ jobs: - fbsd13 - nbsd8 - obsd51 + - obsd67 - openindiana - sol10 - sol11 From e3ba6574ed69e8b7af725cf5e8a9edaac04ff077 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 23 Apr 2021 14:53:32 +1000 Subject: [PATCH 0351/1788] Remove dependency on bash. --- .github/run_test.sh | 2 +- .github/setup_ci.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/run_test.sh b/.github/run_test.sh index 1d1ecbf35026..7ef17697f782 100755 --- a/.github/run_test.sh +++ b/.github/run_test.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh . .github/configs $1 diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 6240ef06ef53..61fd9725d0c5 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh case $(./config.guess) in *-darwin*) From 196bf2a9bb771f45d9b0429cee7d325962233c44 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 23 Apr 2021 14:54:10 +1000 Subject: [PATCH 0352/1788] Add obsd68 test target. --- .github/workflows/selfhosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 4abdfa2458cb..77cb295b5384 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -27,6 +27,7 @@ jobs: - nbsd8 - obsd51 - obsd67 + - obsd68 - openindiana - sol10 - sol11 From a116b6f5be17a1dd345b7d54bf8aa3779a28a0df Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 23 Apr 2021 16:34:48 +1000 Subject: [PATCH 0353/1788] Add nbsd2 test target. --- .github/workflows/selfhosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 77cb295b5384..3eae0fd8d124 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -24,6 +24,7 @@ jobs: - fbsd7 - fbsd12 - fbsd13 + - nbsd2 - nbsd8 - obsd51 - obsd67 From 3737c9f66ee590255546c4b637b6d2be669a11eb Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 23 Apr 2021 19:49:46 +1000 Subject: [PATCH 0354/1788] Replace "==" (a bashism) with "=". --- .github/setup_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 61fd9725d0c5..46832128858f 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -62,7 +62,7 @@ for TARGET in $TARGETS; do esac done -if [ "yes" == "$INSTALL_FIDO_PPA" ]; then +if [ "yes" = "$INSTALL_FIDO_PPA" ]; then sudo apt update -qq sudo apt install software-properties-common sudo apt-add-repository ppa:yubico/stable From a6b4ec94e5bd5a8a18cd2c9942d829d2e5698837 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 24 Apr 2021 17:52:24 +1000 Subject: [PATCH 0355/1788] Add OPENBSD ORIGINAL marker. --- openbsd-compat/memmem.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openbsd-compat/memmem.c b/openbsd-compat/memmem.c index ad330d1a8879..2637401d7c6e 100644 --- a/openbsd-compat/memmem.c +++ b/openbsd-compat/memmem.c @@ -23,6 +23,8 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/* OPENBSD ORIGINAL: lib/libc/string/memmem.c */ + #include "includes.h" #ifndef HAVE_MEMMEM From d1aed05bd2e4ae70f359a394dc60a2d96b88f78c Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 24 Apr 2021 22:03:46 +1000 Subject: [PATCH 0356/1788] Comment out nbsd2 test target for now. --- .github/workflows/selfhosted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 3eae0fd8d124..5d5abe7b3c3f 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -24,7 +24,7 @@ jobs: - fbsd7 - fbsd12 - fbsd13 - - nbsd2 + # - nbsd2 - nbsd8 - obsd51 - obsd67 From 6a5d39305649da5dff1934ee54292ee0cebd579d Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sun, 25 Apr 2021 13:01:34 +1000 Subject: [PATCH 0357/1788] Add nbsd3, nbsd4 and nbsd9 test targets. --- .github/workflows/selfhosted.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 5d5abe7b3c3f..0b1dac172561 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -25,7 +25,10 @@ jobs: - fbsd12 - fbsd13 # - nbsd2 + - nbsd3 + - nbsd4 - nbsd8 + - nbsd9 - obsd51 - obsd67 - obsd68 @@ -45,6 +48,7 @@ jobs: - { os: fbsd12, configs: pam } - { os: fbsd13, configs: pam } - { os: nbsd8, configs: pam } + - { os: nbsd9, configs: pam } - { os: openindiana, configs: pam } - { os: sol10, configs: pam } - { os: sol11, configs: pam-krb5 } From 2c805f16b24ea37cc051c6018fcb05defab6e57a Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sun, 25 Apr 2021 14:15:02 +1000 Subject: [PATCH 0358/1788] Disable compiler hardening on nbsd4. The system compiler supports -fstack-protector-all, but using it will result in an internal compiler error on some files. --- .github/configs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/configs b/.github/configs index b24de4dd1e66..7a157259080d 100755 --- a/.github/configs +++ b/.github/configs @@ -108,6 +108,10 @@ case "$config" in esac case "${TARGET_HOST}" in + nbsd4) + # System compiler will ICE on some files with fstack-protector + CONFIGFLAGS="${CONFIGFLAGS} --without-hardening" + ;; sol10|sol11) # sol10 VM is 32bit and the unit tests are slow. # sol11 has 4 test configs so skip unit tests to speed up. From b16082aa110fa7128ece2a9037ff420c4a285317 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 26 Apr 2021 13:35:44 +1000 Subject: [PATCH 0359/1788] Add fbsd10 test target. --- .github/workflows/selfhosted.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 0b1dac172561..0c0e707a93b3 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -22,6 +22,7 @@ jobs: - dfly58 - fbsd6 - fbsd7 + - fbsd10 - fbsd12 - fbsd13 # - nbsd2 @@ -45,6 +46,7 @@ jobs: - { os: dfly58, configs: pam } - { os: fbsd6, configs: pam } - { os: fbsd7, configs: pam } + - { os: fbsd10, configs: pam } - { os: fbsd12, configs: pam } - { os: fbsd13, configs: pam } - { os: nbsd8, configs: pam } From 095b0307a77be8803768857cc6c0963fa52ed85b Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 26 Apr 2021 14:02:03 +1000 Subject: [PATCH 0360/1788] Support testing against arbitary libcrytpo vers. Add tests against various LibreSSL and OpenSSL versions. --- .github/configs | 8 ++++---- .github/setup_ci.sh | 26 ++++++++++++++++++-------- .github/workflows/c-cpp.yml | 14 ++++++++++++-- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/.github/configs b/.github/configs index 7a157259080d..df7ae28c43e3 100755 --- a/.github/configs +++ b/.github/configs @@ -44,11 +44,11 @@ case "$config" in CONFIGFLAGS="--with-pam" SSHD_CONFOPTS="UsePam yes" ;; - libressl-head) - LIBCRYPTOFLAGS="--with-ssl-dir=/opt/libressl/head --with-rpath=-Wl,-rpath," + libressl-*) + LIBCRYPTOFLAGS="--with-ssl-dir=/opt/libressl --with-rpath=-Wl,-rpath," ;; - openssl-head) - LIBCRYPTOFLAGS="--with-ssl-dir=/opt/openssl/head --with-rpath=-Wl,-rpath," + openssl-*) + LIBCRYPTOFLAGS="--with-ssl-dir=/opt/openssl --with-rpath=-Wl,-rpath," ;; selinux) CONFIGFLAGS="--with-selinux" diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 46832128858f..569502527885 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -47,11 +47,19 @@ for TARGET in $TARGETS; do hardenedmalloc) INSTALL_HARDENED_MALLOC=yes ;; - openssl-head) - INSTALL_OPENSSL_HEAD=yes + openssl-*) + INSTALL_OPENSSL=$(echo ${TARGET} | cut -f2 -d-) + case ${INSTALL_OPENSSL} in + 1.*) INSTALL_OPENSSL="OpenSSL_$(echo ${INSTALL_OPENSSL} | tr . _)" ;; + 3.*) INSTALL_OPENSSL="openssl-${INSTALL_OPENSSL}" ;; + esac ;; - libressl-head) - INSTALL_LIBRESSL_HEAD=yes + libressl-*) + INSTALL_LIBRESSL=$(echo ${TARGET} | cut -f2 -d-) + case ${INSTALL_LIBRESSL} in + master) ;; + *) INSTALL_LIBRESSL="v$(echo ${TARGET} | cut -f2 -d-)" ;; + esac ;; valgrind*) PACKAGES="$PACKAGES valgrind" @@ -80,7 +88,7 @@ if [ "${INSTALL_HARDENED_MALLOC}" = "yes" ]; then make -j2 && sudo cp libhardened_malloc.so /usr/lib/) fi -if [ "${INSTALL_OPENSSL_HEAD}" = "yes" ];then +if [ ! -z "${INSTALL_OPENSSL}" ]; then (cd ${HOME} && git clone https://github.com/openssl/openssl.git && cd ${HOME}/openssl && @@ -88,10 +96,12 @@ if [ "${INSTALL_OPENSSL_HEAD}" = "yes" ];then make -j2 && sudo make install_sw) fi -if [ "${INSTALL_LIBRESSL_HEAD}" = "yes" ];then +if [ ! -z "${INSTALL_LIBRESSL}" ]; then (mkdir -p ${HOME}/libressl && cd ${HOME}/libressl && git clone https://github.com/libressl-portable/portable.git && - cd ${HOME}/libressl/portable && sh update.sh && sh autogen.sh && + cd ${HOME}/libressl/portable && + git checkout ${INSTALL_LIBRESSL} && + sh update.sh && sh autogen.sh && ./configure --prefix=/opt/libressl/head && - make -j2 && sudo make install_sw) + make -j2 && sudo make install) fi diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 2b6d98900a34..c0a0ac812098 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -26,8 +26,18 @@ jobs: - { os: ubuntu-20.04, configs: pam } - { os: ubuntu-20.04, configs: kitchensink } - { os: ubuntu-20.04, configs: hardenedmalloc } - - { os: ubuntu-20.04, configs: libressl-head } - - { os: ubuntu-20.04, configs: openssl-head } + - { os: ubuntu-20.04, configs: libressl-master } + - { os: ubuntu-20.04, configs: libressl-2.2.9 } + - { os: ubuntu-20.04, configs: libressl-2.8.3 } + - { os: ubuntu-20.04, configs: libressl-3.0.2 } + - { os: ubuntu-20.04, configs: libressl-3.2.5 } + - { os: ubuntu-20.04, configs: openssl-master } + - { os: ubuntu-20.04, configs: openssl-1.0.1 } + - { os: ubuntu-20.04, configs: openssl-1.0.1u } + - { os: ubuntu-20.04, configs: openssl-1.0.2u } + - { os: ubuntu-20.04, configs: openssl-1.1.0g } + - { os: ubuntu-20.04, configs: openssl-1.1.1 } + - { os: ubuntu-20.04, configs: openssl-1.1.1k } - { os: ubuntu-18.04, configs: pam } - { os: ubuntu-18.04, configs: kerberos5 } - { os: ubuntu-18.04, configs: libedit } From a38016d369d21df5d35f761f2b67e175e132ba22 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 26 Apr 2021 14:29:03 +1000 Subject: [PATCH 0361/1788] Interop test agains PuTTY. --- .github/configs | 5 +++++ .github/setup_ci.sh | 2 ++ 2 files changed, 7 insertions(+) diff --git a/.github/configs b/.github/configs index df7ae28c43e3..44b607a37ab1 100755 --- a/.github/configs +++ b/.github/configs @@ -135,4 +135,9 @@ fi CONFIGFLAGS="${CONFIGFLAGS} ${LIBCRYPTOFLAGS}" +if [ -x "$(which plink 2>/dev/null)" ]; then + REGRESS_INTEROP_PUTTY=yes + export REGRESS_INTEROP_PUTTY +fi + export LTESTS SUDO TEST_TARGET TEST_SSH_UNSAFE_PERMISSIONS diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 569502527885..72b545ce5cd8 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -53,6 +53,7 @@ for TARGET in $TARGETS; do 1.*) INSTALL_OPENSSL="OpenSSL_$(echo ${INSTALL_OPENSSL} | tr . _)" ;; 3.*) INSTALL_OPENSSL="openssl-${INSTALL_OPENSSL}" ;; esac + PACKAGES="${PACKAGES} putty-tools" ;; libressl-*) INSTALL_LIBRESSL=$(echo ${TARGET} | cut -f2 -d-) @@ -60,6 +61,7 @@ for TARGET in $TARGETS; do master) ;; *) INSTALL_LIBRESSL="v$(echo ${TARGET} | cut -f2 -d-)" ;; esac + PACKAGES="${PACKAGES} putty-tools" ;; valgrind*) PACKAGES="$PACKAGES valgrind" From 29e194a752359ebf85bf7fce100f23a0477fc4de Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 26 Apr 2021 14:49:59 +1000 Subject: [PATCH 0362/1788] Ensure we can still build with C89. --- .github/configs | 6 ++++++ .github/workflows/c-cpp.yml | 1 + 2 files changed, 7 insertions(+) diff --git a/.github/configs b/.github/configs index 44b607a37ab1..f6d39ed62425 100755 --- a/.github/configs +++ b/.github/configs @@ -22,6 +22,12 @@ LIBCRYPTOFLAGS="" case "$config" in default|sol64) ;; + c89) + CC="gcc" + CFLAGS="-Wall -std=c89 -pedantic -Werror=vla" + CONFIGFLAGS="--without-openssl --without-zlib" + TEST_TARGET=t-exec + ;; kitchensink) CONFIGFLAGS="--with-kerberos5 --with-libedit --with-pam" CONFIGFLAGS="${CONFIGFLAGS} --with-security-key-builtin --with-selinux" diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index c0a0ac812098..0dab607ed980 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -23,6 +23,7 @@ jobs: - { os: ubuntu-20.04, configs: valgrind-3 } - { os: ubuntu-20.04, configs: valgrind-4 } - { os: ubuntu-20.04, configs: valgrind-unit } + - { os: ubuntu-20.04, configs: c89 } - { os: ubuntu-20.04, configs: pam } - { os: ubuntu-20.04, configs: kitchensink } - { os: ubuntu-20.04, configs: hardenedmalloc } From da9d59f526fce58e11cba49cd8eb011dc0bf5677 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 26 Apr 2021 15:34:23 +1000 Subject: [PATCH 0363/1788] Add test against OpenSSL w/out ECC. --- .github/setup_ci.sh | 7 ++++++- .github/workflows/c-cpp.yml | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 72b545ce5cd8..4c7a90196b19 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -47,6 +47,10 @@ for TARGET in $TARGETS; do hardenedmalloc) INSTALL_HARDENED_MALLOC=yes ;; + openssl-noec) + INSTALL_OPENSSL=OpenSSL_1_1_1k + SSLCONFOPTS="no-ec" + ;; openssl-*) INSTALL_OPENSSL=$(echo ${TARGET} | cut -f2 -d-) case ${INSTALL_OPENSSL} in @@ -94,7 +98,8 @@ if [ ! -z "${INSTALL_OPENSSL}" ]; then (cd ${HOME} && git clone https://github.com/openssl/openssl.git && cd ${HOME}/openssl && - ./config no-threads no-engine no-fips no-shared --prefix=/opt/openssl/head && + ./config no-threads no-engine no-fips no-shared ${SSLCONFOPTS} \ + --prefix=/opt/openssl/head && make -j2 && sudo make install_sw) fi diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 0dab607ed980..81a6f0e05f09 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -33,6 +33,7 @@ jobs: - { os: ubuntu-20.04, configs: libressl-3.0.2 } - { os: ubuntu-20.04, configs: libressl-3.2.5 } - { os: ubuntu-20.04, configs: openssl-master } + - { os: ubuntu-20.04, configs: openssl-noec } - { os: ubuntu-20.04, configs: openssl-1.0.1 } - { os: ubuntu-20.04, configs: openssl-1.0.1u } - { os: ubuntu-20.04, configs: openssl-1.0.2u } From 33f62dfbe865f4de77980ab88774bf1eb5e4e040 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 26 Apr 2021 17:13:44 +1000 Subject: [PATCH 0364/1788] Add c89 here too. --- .github/setup_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 4c7a90196b19..1b0c8870e343 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -24,7 +24,7 @@ fi for TARGET in $TARGETS; do case $TARGET in - default|without-openssl|without-zlib) + default|without-openssl|without-zlib|c89) # nothing to do ;; kerberos5) From 77532609874a99a19e3e2eb2d1b7fa93aef963bb Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Mon, 26 Apr 2021 17:18:25 +1000 Subject: [PATCH 0365/1788] Export CC and CFLAGS for c89 test. --- .github/configs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/configs b/.github/configs index f6d39ed62425..6f612dd0aed4 100755 --- a/.github/configs +++ b/.github/configs @@ -146,4 +146,4 @@ if [ -x "$(which plink 2>/dev/null)" ]; then export REGRESS_INTEROP_PUTTY fi -export LTESTS SUDO TEST_TARGET TEST_SSH_UNSAFE_PERMISSIONS +export CC CFLAGS LTESTS SUDO TEST_TARGET TEST_SSH_UNSAFE_PERMISSIONS From b3cc9fbdff2782eca79e33e02ac22450dc63bce9 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 27 Apr 2021 09:18:02 +1000 Subject: [PATCH 0366/1788] Fix custom OpenSSL tests. Check out specified OpenSSL version. Install custom libcrypto where configure expects to find it. Remove unneeded OpenSSL config time options. Older OpenSSL versions were not make -j safe so remove it. --- .github/setup_ci.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 1b0c8870e343..1918a42362fe 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -98,9 +98,10 @@ if [ ! -z "${INSTALL_OPENSSL}" ]; then (cd ${HOME} && git clone https://github.com/openssl/openssl.git && cd ${HOME}/openssl && - ./config no-threads no-engine no-fips no-shared ${SSLCONFOPTS} \ - --prefix=/opt/openssl/head && - make -j2 && sudo make install_sw) + git checkout ${INSTALL_OPENSSL} && + ./config no-threads ${SSLCONFOPTS} \ + --prefix=/opt/openssl && + make && sudo make install_sw) fi if [ ! -z "${INSTALL_LIBRESSL}" ]; then @@ -109,6 +110,6 @@ if [ ! -z "${INSTALL_LIBRESSL}" ]; then cd ${HOME}/libressl/portable && git checkout ${INSTALL_LIBRESSL} && sh update.sh && sh autogen.sh && - ./configure --prefix=/opt/libressl/head && + ./configure --prefix=/opt/libressl && make -j2 && sudo make install) fi From 9f79e80dc40965c2e73164531250b83b176c1eea Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 27 Apr 2021 12:24:10 +1000 Subject: [PATCH 0367/1788] Always build OpenSSL shared. This is the default for current versions but we need it to test against earlier versions. --- .github/setup_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh index 1918a42362fe..70a444e4eff4 100755 --- a/.github/setup_ci.sh +++ b/.github/setup_ci.sh @@ -99,7 +99,7 @@ if [ ! -z "${INSTALL_OPENSSL}" ]; then git clone https://github.com/openssl/openssl.git && cd ${HOME}/openssl && git checkout ${INSTALL_OPENSSL} && - ./config no-threads ${SSLCONFOPTS} \ + ./config no-threads shared ${SSLCONFOPTS} \ --prefix=/opt/openssl && make && sudo make install_sw) fi From 9bc20efd39ce8525be33df3ee009f5a4564224f1 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 27 Apr 2021 12:37:59 +1000 Subject: [PATCH 0368/1788] Use the default VM type for libcrypto ver tests. --- .github/workflows/c-cpp.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 81a6f0e05f09..29c3cd630e47 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -27,19 +27,19 @@ jobs: - { os: ubuntu-20.04, configs: pam } - { os: ubuntu-20.04, configs: kitchensink } - { os: ubuntu-20.04, configs: hardenedmalloc } - - { os: ubuntu-20.04, configs: libressl-master } - - { os: ubuntu-20.04, configs: libressl-2.2.9 } - - { os: ubuntu-20.04, configs: libressl-2.8.3 } - - { os: ubuntu-20.04, configs: libressl-3.0.2 } - - { os: ubuntu-20.04, configs: libressl-3.2.5 } - - { os: ubuntu-20.04, configs: openssl-master } - - { os: ubuntu-20.04, configs: openssl-noec } - - { os: ubuntu-20.04, configs: openssl-1.0.1 } - - { os: ubuntu-20.04, configs: openssl-1.0.1u } - - { os: ubuntu-20.04, configs: openssl-1.0.2u } - - { os: ubuntu-20.04, configs: openssl-1.1.0g } - - { os: ubuntu-20.04, configs: openssl-1.1.1 } - - { os: ubuntu-20.04, configs: openssl-1.1.1k } + - { os: ubuntu-latest, configs: libressl-master } + - { os: ubuntu-latest, configs: libressl-2.2.9 } + - { os: ubuntu-latest, configs: libressl-2.8.3 } + - { os: ubuntu-latest, configs: libressl-3.0.2 } + - { os: ubuntu-latest, configs: libressl-3.2.5 } + - { os: ubuntu-latest, configs: openssl-master } + - { os: ubuntu-latest, configs: openssl-noec } + - { os: ubuntu-latest, configs: openssl-1.0.1 } + - { os: ubuntu-latest, configs: openssl-1.0.1u } + - { os: ubuntu-latest, configs: openssl-1.0.2u } + - { os: ubuntu-latest, configs: openssl-1.1.0g } + - { os: ubuntu-latest, configs: openssl-1.1.1 } + - { os: ubuntu-latest, configs: openssl-1.1.1k } - { os: ubuntu-18.04, configs: pam } - { os: ubuntu-18.04, configs: kerberos5 } - { os: ubuntu-18.04, configs: libedit } From 1b8108ebd12fc4ed0fb39ef94c5ba122558ac373 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 27 Apr 2021 14:22:20 +1000 Subject: [PATCH 0369/1788] Test against OpenSSL 1.1.0h instead of 1.1.0g. 1.1.0g requires a perl glob module that's not installed by default. --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 29c3cd630e47..a8234ab8a14f 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -37,7 +37,7 @@ jobs: - { os: ubuntu-latest, configs: openssl-1.0.1 } - { os: ubuntu-latest, configs: openssl-1.0.1u } - { os: ubuntu-latest, configs: openssl-1.0.2u } - - { os: ubuntu-latest, configs: openssl-1.1.0g } + - { os: ubuntu-latest, configs: openssl-1.1.0h } - { os: ubuntu-latest, configs: openssl-1.1.1 } - { os: ubuntu-latest, configs: openssl-1.1.1k } - { os: ubuntu-18.04, configs: pam } From e627067ec8ef9ae8e7a638f4dbac91d52dee3e6d Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 28 Apr 2021 11:35:28 +1000 Subject: [PATCH 0370/1788] Add test building upstream OpenBSD source. --- .github/workflows/upstream.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/upstream.yml diff --git a/.github/workflows/upstream.yml b/.github/workflows/upstream.yml new file mode 100644 index 000000000000..9c8efb192b9c --- /dev/null +++ b/.github/workflows/upstream.yml @@ -0,0 +1,34 @@ +name: Upstream self-hosted + +on: + push: + branches: [ master, ci ] + +jobs: + selfhosted: + if: github.repository == 'openssh/openssh-portable-selfhosted' + runs-on: ${{ matrix.os }} + env: + TARGET_HOST: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ obsdsnap ] + configs: [ default ] + steps: + - uses: actions/checkout@v2 + - name: shutdown VM if running + run: vmshutdown + - name: startup VM + run: vmstartup + - name: update source + run: vmrun "cd /usr/src && cvs up -dPA usr.bin/ssh regress/usr.bin/ssh" + - name: make + run: vmrun "cd /usr/src/usr.bin/ssh && make obj && make clean && make" + - name: make install + run: vmrun "cd /usr/src/usr.bin/ssh && sudo make install" + - name: make tests + run: vmrun "cd /usr/src/regress/usr.bin/ssh && make obj && make clean && SUDO=sudo make" + - name: shutdown VM + if: always() + run: vmshutdown From 40b59024cc3365815381474cdf4fe423102e391b Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 28 Apr 2021 12:22:11 +1000 Subject: [PATCH 0371/1788] Add obsdsnap (OpenBSD snapshot) test target. --- .github/workflows/selfhosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index 0c0e707a93b3..a8f65678efc9 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -33,6 +33,7 @@ jobs: - obsd51 - obsd67 - obsd68 + - obsdsnap - openindiana - sol10 - sol11 From 70a8dc138a6480f85065cdb239915ad4b7f928cf Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Wed, 28 Apr 2021 14:44:07 +1000 Subject: [PATCH 0372/1788] Add status badges for Actions-based tests. --- .github/README.md | 4 ++++ README.md | 1 + 2 files changed, 5 insertions(+) create mode 100644 .github/README.md diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 000000000000..0ad8bf5aaf44 --- /dev/null +++ b/.github/README.md @@ -0,0 +1,4 @@ +[![C/C++ CI](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml) +[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml) +[![Upstream self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/upstream.yml/badge.svg)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/upstream.yml) +[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/openssh.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:openssh) diff --git a/README.md b/README.md index e9ee372ca330..de4717737eac 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Portable OpenSSH +[![C/C++ CI](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/openssh.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:openssh) OpenSSH is a complete implementation of the SSH protocol (version 2) for secure remote login, command execution and file transfer. It includes a client ``ssh`` and server ``sshd``, file transfer utilities ``scp`` and ``sftp`` as well as tools for key generation (``ssh-keygen``), run-time key storage (``ssh-agent``) and a number of supporting programs. From ae5f9b0d5c8126214244ee6b35aae29c21028133 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 29 Apr 2021 13:01:50 +1000 Subject: [PATCH 0373/1788] Wrap sntrup761x25519 inside ifdef. From balu.gajjala at gmail.com via bz#3306. --- regress/unittests/kex/test_kex.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/regress/unittests/kex/test_kex.c b/regress/unittests/kex/test_kex.c index 06bd001aeaed..3bd71a9f4d56 100644 --- a/regress/unittests/kex/test_kex.c +++ b/regress/unittests/kex/test_kex.c @@ -202,6 +202,8 @@ kex_tests(void) do_kex("diffie-hellman-group-exchange-sha1"); do_kex("diffie-hellman-group14-sha1"); do_kex("diffie-hellman-group1-sha1"); +# ifdef USE_SNTRUP761X25519 do_kex("sntrup761x25519-sha512@openssh.com"); +# endif /* USE_SNTRUP761X25519 */ #endif /* WITH_OPENSSL */ } From e65cf00da6bc31e5f54603b7feb7252dc018c033 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Fri, 30 Apr 2021 04:02:52 +0000 Subject: [PATCH 0374/1788] upstream: Remove now-unused skey function prototypes leftover from skey removal. OpenBSD-Commit-ID: 2fc36d519fd37c6f10ce74854c628561555a94c3 --- monitor.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/monitor.c b/monitor.c index 1a00d4591733..9d23d8234f69 100644 --- a/monitor.c +++ b/monitor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor.c,v 1.225 2021/04/15 16:24:31 markus Exp $ */ +/* $OpenBSD: monitor.c,v 1.226 2021/04/30 04:02:52 dtucker Exp $ */ /* * Copyright 2002 Niels Provos * Copyright 2002 Markus Friedl @@ -120,8 +120,6 @@ int mm_answer_authserv(struct ssh *, int, struct sshbuf *); int mm_answer_authpassword(struct ssh *, int, struct sshbuf *); int mm_answer_bsdauthquery(struct ssh *, int, struct sshbuf *); int mm_answer_bsdauthrespond(struct ssh *, int, struct sshbuf *); -int mm_answer_skeyquery(struct ssh *, int, struct sshbuf *); -int mm_answer_skeyrespond(struct ssh *, int, struct sshbuf *); int mm_answer_keyallowed(struct ssh *, int, struct sshbuf *); int mm_answer_keyverify(struct ssh *, int, struct sshbuf *); int mm_answer_pty(struct ssh *, int, struct sshbuf *); From f06893063597c5bb9d9e93f851c4070e77d2fba9 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 30 Apr 2021 04:29:53 +0000 Subject: [PATCH 0375/1788] upstream: a little debugging in the main mux process for status confirmation failures in multiplexed sessions OpenBSD-Commit-ID: 6e27b87c95176107597035424e1439c3232bcb49 --- clientloop.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clientloop.c b/clientloop.c index cb3ff8645274..7c91104f1c26 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.359 2021/03/19 02:22:34 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.360 2021/04/30 04:29:53 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -696,6 +696,8 @@ client_status_confirm(struct ssh *ssh, int type, Channel *c, void *ctx) * their stderr. */ if (tochan) { + debug3_f("channel %d: mux request: %s", c->self, + cr->request_type); if ((r = sshbuf_put(c->extended, errmsg, strlen(errmsg))) != 0) fatal_fr(r, "sshbuf_put"); From 8e32e97e788e0676ce83018a742203614df6a2b3 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 1 May 2021 20:07:47 +1000 Subject: [PATCH 0376/1788] Add obsd69 test target. --- .github/workflows/selfhosted.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml index a8f65678efc9..5a597ac6a6d3 100644 --- a/.github/workflows/selfhosted.yml +++ b/.github/workflows/selfhosted.yml @@ -33,6 +33,7 @@ jobs: - obsd51 - obsd67 - obsd68 + - obsd69 - obsdsnap - openindiana - sol10 From ac31aa3c6341905935e75f0539cf4a61bbe99779 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Mon, 3 May 2021 00:16:45 +0000 Subject: [PATCH 0377/1788] upstream: more debugging for UpdateHostKeys signature failures OpenBSD-Commit-ID: 1ee95f03875e1725df15d5e4bea3e73493d57d36 --- clientloop.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/clientloop.c b/clientloop.c index 7c91104f1c26..cbfe098b7a45 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.360 2021/04/30 04:29:53 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.361 2021/05/03 00:16:45 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2154,11 +2154,14 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, */ use_kexsigtype = kexsigtype == KEY_RSA && sshkey_type_plain(ctx->keys[i]->type) == KEY_RSA; + debug3_f("verify %s key %zu using %s sigalg", + sshkey_type(ctx->keys[i]), i, + use_kexsigtype ? ssh->kex->hostkey_alg : NULL); if ((r = sshkey_verify(ctx->keys[i], sig, siglen, sshbuf_ptr(signdata), sshbuf_len(signdata), use_kexsigtype ? ssh->kex->hostkey_alg : NULL, 0, NULL)) != 0) { - error_f("server gave bad signature for %s key %zu", + error_fr(r, "server gave bad signature for %s key %zu", sshkey_type(ctx->keys[i]), i); goto out; } From f43859159cc62396ad5d080f0b1f2635a67dac02 Mon Sep 17 00:00:00 2001 From: "dtucker@openbsd.org" Date: Tue, 4 May 2021 22:53:52 +0000 Subject: [PATCH 0378/1788] upstream: Don't pass NULL as a string in debugging as it does not work on some platforms in -portable. ok djm@ OpenBSD-Commit-ID: 937c892c99aa3c9c272a8ed78fa7c2aba3a44fc9 --- clientloop.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clientloop.c b/clientloop.c index cbfe098b7a45..219f0e9048ac 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.361 2021/05/03 00:16:45 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.362 2021/05/04 22:53:52 dtucker Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2156,7 +2156,7 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type, sshkey_type_plain(ctx->keys[i]->type) == KEY_RSA; debug3_f("verify %s key %zu using %s sigalg", sshkey_type(ctx->keys[i]), i, - use_kexsigtype ? ssh->kex->hostkey_alg : NULL); + use_kexsigtype ? ssh->kex->hostkey_alg : "default"); if ((r = sshkey_verify(ctx->keys[i], sig, siglen, sshbuf_ptr(signdata), sshbuf_len(signdata), use_kexsigtype ? ssh->kex->hostkey_alg : NULL, 0, From 24fee8973abdf1c521cd2c0047d89e86d9c3fc38 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 7 May 2021 02:29:40 +0000 Subject: [PATCH 0379/1788] upstream: correct mistake in spec - the private key blobs are encoded verbatim and not as strings (i.e. no 4-byte length header) OpenBSD-Commit-ID: 3606b5d443d72118c5b76c4af6dd87a5d5a4f837 --- PROTOCOL.key | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/PROTOCOL.key b/PROTOCOL.key index 959bd7aeec22..38df268b6536 100644 --- a/PROTOCOL.key +++ b/PROTOCOL.key @@ -35,9 +35,9 @@ of the cipher block size. uint32 checkint uint32 checkint - string privatekey1 + byte[] privatekey1 string comment1 - string privatekey2 + byte[] privatekey2 string comment2 ... string privatekeyN @@ -48,6 +48,9 @@ of the cipher block size. ... char padlen % 255 +where each private key is encoded using the same rules as used for +SSH agent. + Before the key is encrypted, a random integer is assigned to both checkint fields so successful decryption can be quickly checked by verifying that both checkint fields @@ -65,4 +68,4 @@ For unencrypted keys the cipher "none" and the KDF "none" are used with empty passphrases. The options if the KDF "none" are the empty string. -$OpenBSD: PROTOCOL.key,v 1.1 2013/12/06 13:34:54 markus Exp $ +$OpenBSD: PROTOCOL.key,v 1.2 2021/05/07 02:29:40 djm Exp $ From c0d7e36e979fa3cdb60f5dcb6ac9ad3fd018543b Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 7 May 2021 02:26:55 +0000 Subject: [PATCH 0380/1788] upstream: dump out a usable private key string too; inspired by Tyson Whitehead OpenBSD-Regress-ID: 65572d5333801cb2f650ebc778cbdc955e372058 --- regress/unittests/sshsig/webauthn.html | 80 +++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 3 deletions(-) diff --git a/regress/unittests/sshsig/webauthn.html b/regress/unittests/sshsig/webauthn.html index 953041e61ecb..1869c8b373cf 100644 --- a/regress/unittests/sshsig/webauthn.html +++ b/regress/unittests/sshsig/webauthn.html @@ -37,6 +37,8 @@

attestationObject raw


 

attestationObject


+

key handle

+

 

authData raw


 

authData

@@ -45,6 +47,8 @@

SSH pubkey blob


 

SSH pubkey string


+

SSH private key string

+