diff options
Diffstat (limited to 'comm/mail/test/browser/smime')
-rw-r--r-- | comm/mail/test/browser/smime/browser.ini | 13 | ||||
-rw-r--r-- | comm/mail/test/browser/smime/browser_multipartAlternative.js | 100 | ||||
-rw-r--r-- | comm/mail/test/browser/smime/browser_nestedSMimeSigs.js | 49 | ||||
-rw-r--r-- | comm/mail/test/browser/smime/data/Bob.p12 | bin | 0 -> 3666 bytes | |||
-rw-r--r-- | comm/mail/test/browser/smime/data/README.md | 5 | ||||
-rw-r--r-- | comm/mail/test/browser/smime/data/TestCA.pem | 21 | ||||
-rw-r--r-- | comm/mail/test/browser/smime/data/multipart-alternative.eml | 42 | ||||
-rw-r--r-- | comm/mail/test/browser/smime/data/nested-sigs.eml | 219 |
8 files changed, 449 insertions, 0 deletions
diff --git a/comm/mail/test/browser/smime/browser.ini b/comm/mail/test/browser/smime/browser.ini new file mode 100644 index 0000000000..ba509e2496 --- /dev/null +++ b/comm/mail/test/browser/smime/browser.ini @@ -0,0 +1,13 @@ +[DEFAULT] +prefs = + mail.provider.suppress_dialog_on_startup=true + mail.spotlight.firstRunDone=true + mail.winsearch.firstRunDone=true + mailnews.start_page.override_url=about:blank + mailnews.start_page.url=about:blank + datareporting.policy.dataSubmissionPolicyBypassNotification=true +subsuite = thunderbird +support-files = data/** + +[browser_multipartAlternative.js] +[browser_nestedSMimeSigs.js] diff --git a/comm/mail/test/browser/smime/browser_multipartAlternative.js b/comm/mail/test/browser/smime/browser_multipartAlternative.js new file mode 100644 index 0000000000..cd55bba265 --- /dev/null +++ b/comm/mail/test/browser/smime/browser_multipartAlternative.js @@ -0,0 +1,100 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Test that a reply to a multipart/alternative message with two + * encrypted parts doesn't leak the secret plaintext from the second + * part. + */ + +"use strict"; + +var { close_compose_window, get_msg_source, open_compose_with_reply } = + ChromeUtils.import("resource://testing-common/mozmill/ComposeHelpers.jsm"); +var { + be_in_folder, + get_special_folder, + open_message_from_file, + press_delete, + select_click_row, + smimeUtils_ensureNSS, + smimeUtils_loadCertificateAndKey, + smimeUtils_loadPEMCertificate, +} = ChromeUtils.import( + "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" +); +var { close_window } = ChromeUtils.import( + "resource://testing-common/mozmill/WindowHelpers.jsm" +); + +var { MailServices } = ChromeUtils.import( + "resource:///modules/MailServices.jsm" +); + +var gDrafts; + +add_setup(async function () { + gDrafts = await get_special_folder(Ci.nsMsgFolderFlags.Drafts, true); + + Services.prefs.setBoolPref("mail.identity.id1.compose_html", true); +}); + +add_task(async function test_multipart_alternative() { + smimeUtils_ensureNSS(); + smimeUtils_loadPEMCertificate( + new FileUtils.File(getTestFilePath("data/TestCA.pem")), + Ci.nsIX509Cert.CA_CERT + ); + smimeUtils_loadCertificateAndKey( + new FileUtils.File(getTestFilePath("data/Bob.p12"), "nss") + ); + + let msgc = await open_message_from_file( + new FileUtils.File(getTestFilePath("data/multipart-alternative.eml")) + ); + + let cwc = open_compose_with_reply(msgc); + + close_window(msgc); + + // Now save the message as a draft. + EventUtils.synthesizeKey( + "s", + { shiftKey: false, accelKey: true }, + cwc.window + ); + await TestUtils.waitForCondition( + () => !cwc.window.gSaveOperationInProgress && !cwc.window.gWindowLock, + "Saving of draft did not finish" + ); + close_compose_window(cwc); + + // Now check the message content in the drafts folder. + await be_in_folder(gDrafts); + let message = select_click_row(0); + let messageContent = await get_msg_source(message); + + // Check for a single line that contains text and make sure there is a + // space at the end for a flowed reply. + Assert.ok( + !messageContent.includes("SECRET-TEXT"), + "Secret text was found, but shouldn't be there." + ); + + // Delete the outgoing message. + press_delete(); +}); + +registerCleanupFunction(function () { + Services.prefs.clearUserPref("mail.identity.id1.compose_html"); + + // Some tests that open new windows don't return focus to the main window + // in a way that satisfies mochitest, and the test times out. + Services.focus.focusedWindow = window; + // Focus an element in the main window, then blur it again to avoid it + // hijacking keypresses. + let mainWindowElement = document.getElementById("button-appmenu"); + mainWindowElement.focus(); + mainWindowElement.blur(); +}); diff --git a/comm/mail/test/browser/smime/browser_nestedSMimeSigs.js b/comm/mail/test/browser/smime/browser_nestedSMimeSigs.js new file mode 100644 index 0000000000..996c4e804a --- /dev/null +++ b/comm/mail/test/browser/smime/browser_nestedSMimeSigs.js @@ -0,0 +1,49 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Test that a message containing two nested S/MIME signatures shows + * the contents of the inner signed message. + */ + +"use strict"; + +var { open_message_from_file, get_about_message, smimeUtils_ensureNSS } = + ChromeUtils.import( + "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" + ); +var { close_window } = ChromeUtils.import( + "resource://testing-common/mozmill/WindowHelpers.jsm" +); + +function getMsgBodyTxt(mc) { + let msgPane = get_about_message(mc.window).getMessagePaneBrowser(); + return msgPane.contentDocument.documentElement.textContent; +} + +add_task(async function test_nested_sigs() { + smimeUtils_ensureNSS(); + + let msgc = await open_message_from_file( + new FileUtils.File(getTestFilePath("data/nested-sigs.eml")) + ); + + Assert.ok( + getMsgBodyTxt(msgc).includes("level 2"), + "level 2 text is shown in body" + ); + + close_window(msgc); +}); + +registerCleanupFunction(() => { + // Some tests that open new windows don't return focus to the main window + // in a way that satisfies mochitest, and the test times out. + Services.focus.focusedWindow = window; + // Focus an element in the main window, then blur it again to avoid it + // hijacking keypresses. + let mainWindowElement = document.getElementById("button-appmenu"); + mainWindowElement.focus(); + mainWindowElement.blur(); +}); diff --git a/comm/mail/test/browser/smime/data/Bob.p12 b/comm/mail/test/browser/smime/data/Bob.p12 Binary files differnew file mode 100644 index 0000000000..b5c8504a73 --- /dev/null +++ b/comm/mail/test/browser/smime/data/Bob.p12 diff --git a/comm/mail/test/browser/smime/data/README.md b/comm/mail/test/browser/smime/data/README.md new file mode 100644 index 0000000000..43c4ce63fa --- /dev/null +++ b/comm/mail/test/browser/smime/data/README.md @@ -0,0 +1,5 @@ +S/MIME Mozmill test certificates and messages +============================================= + +The test data in this directory can be refreshed by executing script +local-gen.sh found in comm/mailnews/test/data/smime diff --git a/comm/mail/test/browser/smime/data/TestCA.pem b/comm/mail/test/browser/smime/data/TestCA.pem new file mode 100644 index 0000000000..0e9f065d6e --- /dev/null +++ b/comm/mail/test/browser/smime/data/TestCA.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQGEwJVUzET
+MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzESMBAG
+A1UEChMJQk9HVVMgTlNTMRQwEgYDVQQDEwtOU1MgVGVzdCBDQTAgFw0yMzExMjEy
+MDUwMDdaGA8yMDczMTEyMTIwNTAwN1owZDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+CkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxEjAQBgNVBAoTCUJP
+R1VTIE5TUzEUMBIGA1UEAxMLTlNTIFRlc3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDPL+VBVHBnK32PfKsFz5mwpeOdSOsfqymx2DN1qo42mQ8s
+SRmrK7lbi0iiGuU+3jFBh/29wWitHH+1qb/DDSiIYk+RS3mVKdTxDOztwyRW7mf3
+oqK3OR4cQhLxXhIDuhDW4P4CQTwu6CSqwyTkrJeEi77foQ/C1rX1zQWMpJW7n4Iv
+9PNMedHpNtoXP7zS8GxV9WwiHFEcRYzwdrlHQJm9+l0OWp8Tl5DFniJjjOuQYr4n
+DGJ1R4F74yU9NPrOzAy9Cvm1eO4novQEcUyQ5Mdnw7bHI31ChWf/KyZzDLA+jTMI
+30fLNDr512k0Z1429p1n77nzGhSDSbSNKFtyyNy1AgMBAAGjMDAuMBEGCWCGSAGG
++EIBAQQEAwIABzAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0B
+AQsFAAOCAQEAt8reMMu83pDQiZqgq1bI7P1sGznDykMefFITZF3veDas86T9seDZ
+pPAT45uo8t/+yuQWciDfBDcB5NnedkTjmXUaG1ZKekTamv6uNaLqr5aZrotnNUwK
+CYk4ci1K5MuprqE6kBKKP8cGYL5ZqA4PPIHxlCgU2JR9G8NVn7Nw3Xb6ZTqRWTSn
+g2tM3LWBDCu2p6qIZPNu35OYBUmLzsfSSlroj8iwirnOa+LYAmUMTQlnBQpln1WI
+q+q0haYFPt9MTGpvwA9JBoElS9I4XxJHbthlsCizas9UJfue37RIR5LRXA8zudRU
+Rwo8QS6MTgppRvorz2kvABRmkXiYk3Vn/g==
+-----END CERTIFICATE----- diff --git a/comm/mail/test/browser/smime/data/multipart-alternative.eml b/comm/mail/test/browser/smime/data/multipart-alternative.eml new file mode 100644 index 0000000000..0ff896f048 --- /dev/null +++ b/comm/mail/test/browser/smime/data/multipart-alternative.eml @@ -0,0 +1,42 @@ +MIME-Version: 1.0 +Date: Tue, 21 Nov 2023 21:12:39 +0000 +From: Alice <alice@example.com> +To: Bob <bob@example.com> +Subject: a message +Content-Type: multipart/alternative; boundary="--------BOUNDARY" + +----------BOUNDARY +Content-Type: application/pkcs7-mime; smime-type=enveloped-data +Content-Transfer-Encoding: base64 + +MIAGCSqGSIb3DQEHA6CAMIACAQAxggGFMIIBgQIBADBpMGQxCzAJBgNVBAYTAlVT
+MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRIw
+EAYDVQQKEwlCT0dVUyBOU1MxFDASBgNVBAMTC05TUyBUZXN0IENBAgEoMA0GCSqG
+SIb3DQEBAQUABIIBAJFkVEzBMOiW8RY8h8xH7ZujIgZ/HjTP0NziHV+asAP1ANm1
+EqPqiy8C5/jtrW/rYF+2JYZIe8xW9kOpd4AlKyAvESn/jM+wRwRai3YHJ8DalFzl
+4+CsqIzSwmf9KZa0yK72Cy+Lp8/0ycWJstDU/ZXFd6lUsHWiYdPgF1KsceWepyYS
+Ggg4n9dopCN7+Xthlj8uW2yG5u+WtJkWJrXqrM4z7pzaW9GDPeOV5jp9CUauZOdV
+ItlwPlGH/mMeiJ7KKQVclnN8bx2q/QHOvnSWS6fID1WTBYV1ZhAlxZHWBRSn643J
+3ZwLxIS+F1cRc/EClsWv8zgKLfNXrcVSja1vD4UwgAYJKoZIhvcNAQcBMB0GCWCG
+SAFlAwQBAgQQ57mGV7ei08u956g0xkC4caCABIGQt8h3XciNdcCwh4xWGWviytVC
+Gbt5ZAI/iAsrBbkm2Tx/PxNrcn7+5FBhsTld1Inm8lge2WTNClOxoOecoeZxCe+y
+MGqrAsxPIDYpO7HP/n1+RBWy8azv+j2o2+LuguA+xo2wnTbt8BJz6DN8k61PL8Xg
+yY8hP+DQsA/6OxB/KA8TJRFxR8N26DseKmuXoo/xBBAJyufRO/Z/JkWOTbTpOIjC
+AAAAAAAAAAAAAA==
+----------BOUNDARY +Content-Type: application/pkcs7-mime; smime-type=enveloped-data +Content-Transfer-Encoding: base64 + +MIAGCSqGSIb3DQEHA6CAMIACAQAxggGFMIIBgQIBADBpMGQxCzAJBgNVBAYTAlVT
+MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRIw
+EAYDVQQKEwlCT0dVUyBOU1MxFDASBgNVBAMTC05TUyBUZXN0IENBAgEoMA0GCSqG
+SIb3DQEBAQUABIIBAAZXwFocAUc633rlij5f7h34x/PYispef+6ufoNaQKq1/c9b
+SbKRZR4hqBYy1pBxO6tK61gWnFeHdnrq7Kec/i+LOkUG4g8Ki4ELG3MGICaqo7Fu
+CAQeSbSD+E8LuO/rRsnNwUwNE2oy7Zie9iqqcJQuCR48WMeVhuGn+RwEDAlZod73
+/us2Xvobl3Q40vcbidegMmP9UXBa45BhIfeq8GrtPOUzVW9zv7fQoNc+1x1JSK7L
+Y+o5VPUoJUMsr2jcgpGDb0uPN1xN8qEThEb8YeFLQbynEoEihJLtKfs33E0U2BVe
+GhSCHB0w6SvSkhwSYI7OY6vj18JBcjnFTIY2VkEwgAYJKoZIhvcNAQcBMB0GCWCG
+SAFlAwQBAgQQECWIfBfTzibznP1cQzICh6CABEBc9eyhZr/eEGCVEcyXi/X5XfUr
+YAbZTYjcjislKjI+2R922HPdAtQabWkWY9S8O81XlRNmTr0qhl+IArc3IWUwBBC+
+3oryP+raeGBWDEEj7ZTYAAAAAAAAAAAAAA==
+----------BOUNDARY diff --git a/comm/mail/test/browser/smime/data/nested-sigs.eml b/comm/mail/test/browser/smime/data/nested-sigs.eml new file mode 100644 index 0000000000..3a84ae1f98 --- /dev/null +++ b/comm/mail/test/browser/smime/data/nested-sigs.eml @@ -0,0 +1,219 @@ +Date: Wed, 5 Jan 2022 08:54:26 +0100
+From: nobody1@example.com
+To: nobody2@example.com
+Subject: subject 1
+MIME-Version: 1.0
+Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1;
+ boundary="----=_Part_159674795_1647108947.1641369266420"
+
+------=_Part_159674795_1647108947.1641369266420
+Content-Type: multipart/mixed;
+ boundary="----=_Part_159674792_1533625984.1641369266416"
+
+------=_Part_159674792_1533625984.1641369266416
+Content-Type: text/plain; charset="ISO-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+level 1
+
+------=_Part_159674792_1533625984.1641369266416
+Content-Type: message/rfc822; name=nested2.eml
+Content-Disposition: attachment; filename="nested2.eml"
+
+Date: Wed, 5 Jan 2022 08:54:23 +0100
+From: nobody3@example.com
+To: nobody1@example.com
+Subject: subject 2
+MIME-Version: 1.0
+Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1;
+ boundary="----=_Part_71865141_195979751.1641369263077"
+
+------=_Part_71865141_195979751.1641369263077
+Content-Type: text/plain; charset="ISO-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+level 2
+
+------=_Part_71865141_195979751.1641369263077
+Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7s"
+Content-Description: S/MIME Cryptographic Signature
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwEAAKCC
+DMgwggY9MIIEJaADAgECAgMU4igwDQYJKoZIhvcNAQENBQAweTEQMA4GA1UEChMHUm9vdCBD
+QTEeMBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0IFNp
+Z25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2VydC5vcmcwHhcN
+MjEwNDE5MTIxODMwWhcNMzEwNDE3MTIxODMwWjBUMRQwEgYDVQQKEwtDQWNlcnQgSW5jLjEe
+MBwGA1UECxMVaHR0cDovL3d3dy5DQWNlcnQub3JnMRwwGgYDVQQDExNDQWNlcnQgQ2xhc3Mg
+MyBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0k1EUh80iZ+U5TPQ6nd
+KNdCKovzh3gZWHwPntqJfeH763KQDXShlmSrn6AkmXPa4lV2xxd79QSsRrjDvn9kjRBsJPNh
+nMDykPpR5vVpAWPDD1biSkLP4kSMJSioxXkJfUa5ivPp8zQpCEXkHJ/LlAQcgagUs5hlxEPs
+ToKNCdG9qluNktDs3pDFfwrC4+vmMVpedD6XM1nowwM9YDO/99FvR8TN7mKDUm4uCJqk2RUY
+kaaFkkewrkjrbbch7IUaaHI1q//wEF3A9JSnatU7kn5MkAV+k8Esi6SOYnQVcW4LcQPqrxU4
+mtTSBXJvjPkr61pyJfk5RuNyGz4Ew2QnIhAqik9YpwOtvrQuE+1dqkjX1X3UKntc+kYEUOTM
+DkJbjO3b8s/8lpPg2xE2VGI0OI8MYJs7l1Y4rfPSW4ugW+pOlrh819WghnBA05Ept6I8rfWM
+u88akorkNHvA2Gxf6QrCw6cgmlrfLF1SXLpH1ZvvJChwOCAv1X8pwLJBA2iSzOCczJdLRe86
+EAqrcDqYlXCtNbHqhSukHIAhMamuYHqAJkgAuAHAk2NVIpE8Vuev2zol848xVOomi4FZ+aHR
+UxHFe50D9nQR4G2xLD8shpGZcZqmd4s0YNEUtCysna+MENOfxGr4bxP8c1n3ZkJ0Horj+NzS
+b5icy0eYlUAF++kCAwEAAaOB8jCB7zAPBgNVHRMBAf8EBTADAQH/MGEGCCsGAQUFBwEBBFUw
+UzAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuQ0FjZXJ0Lm9yZy8wLAYIKwYBBQUHMAKGIGh0
+dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9jbGFzczMuY3J0MEUGA1UdIAQ+MDwwOgYLKwYBBAGBkEoC
+AwEwKzApBggrBgEFBQcCARYdaHR0cDovL3d3dy5DQWNlcnQub3JnL2Nwcy5waHAwMgYDVR0f
+BCswKTAnoCWgI4YhaHR0cHM6Ly93d3cuY2FjZXJ0Lm9yZy9jbGFzczMuY3JsMA0GCSqGSIb3
+DQEBDQUAA4ICAQDGHq13XLQom9HIjUQSwL12dgSDIQf4EYJ/a8GVQsA4EbUlcI2LDMHVbP0c
+GgN8i/gGMaWd3kEp1IubhNc9wTeGcaMfW2EpHl13fbvwrbkVGRMU5jWA/6YZtDeFlEHoiMNf
+4LIGpLv4QKkdOazt6j+YBE35jPlHeXNS9ezfNJf7Pnfg3NGDiLqIc0dapqQVxA1wDQ+eSxMH
+fu8YPvmlAap5KbHnUvpTOsimf7bviaGxoU0vzmOFf6Uq6TvUwaPPChOFu5nXnGaQhOdm1FCz
+oeEtIiolaMMgsivEupgd6ErvXFjCtE2EVvdOuxZoQmySuG94zQ6z+++gs2SH8veIRDn8ueYs
+wJgk1EAsXsjuCx24Ak0muAoYxi8eS3Vujy4hc7zCA1XuqhTgmhoHUwvfRBSoZwWvRMjToUV2
+ArZ/DLmG6U/GbrC7FbS/6IC1djH+ZGTBClhtxVC2sgO/HUJPWTnRxDGL6MgqORwVYfDeQGgO
+cKizT+6R6A9PtpCeTYBsvhzucKS4BwQrDUECVIROR+qLlu12WGHnwyF7Bm/UtwvnNDKDzDWm
+5yVPfBdC/LxXA8afQn+YYPiAstn2sZwcNQQKiTEWhaT67kwJxWqYZuzIbirmy5LcI2yWwdRF
+8zxtArigu8dHwsIcQExFx0UGfztxK84rp4HWR0YosDzKZfFmnzCCBoMwggRroAMCAQICAwL0
+FjANBgkqhkiG9w0BAQ0FADBUMRQwEgYDVQQKEwtDQWNlcnQgSW5jLjEeMBwGA1UECxMVaHR0
+cDovL3d3dy5DQWNlcnQub3JnMRwwGgYDVQQDExNDQWNlcnQgQ2xhc3MgMyBSb290MB4XDTIx
+MTAxMzE1MDA0NloXDTIzMTAxMzE1MDA0NlowVzETMBEGA1UEAxMKS2FpIEVuZ2VydDEbMBkG
+CSqGSIb3DQEJARYMa2FpZUBrdWl4LmRlMSMwIQYJKoZIhvcNAQkBFhRrYWllQHRodW5kZXJi
+aXJkLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKlAMvhWj/JTL3TYeWHi
+ElUgH7QcaKr57viBf5Hz6GliZuC7IffSD7o9FPL5Her+Y6ny/7emyzY444619SgxA6GtT2cx
+bl7usPrV8JX+ZxFQLrODQ3xmlhO1PiQGVhLxnjh/hBQYLqyuibjy77vexAAmHYyvjcvwtOeV
+JxYQn0wRWf9fXOqa5jKot9U4/gT3UnSxLtFfU9d8wjAE3EV8Q6wto0e3xKy4GkP6DWBK/LJI
+tE+wEtvP6egFJgxByuNrCIwtL6qCi15JAFUpAegnxEl6Ejn+vBKSz3GtiSPA5TuCtJx6nYy4
+C8JSIMUxXsLxXeabtRgJyb/4AP14Vjfa/bdryUTgzoNjmQ4kJJv0ltG2weyhomsL4oZIoY/V
+x9cXnBrlr+C1CU3r4d7JeB3OlJFGxC0C5uq3+OfTozdrn26fVamlAo3CnjQ/qYqPZfmjtSD7
+bVl4gYxFOlAxN6a1QpDf3dNdmXGRalj04osQ+QcaNVeLhpyqFN4dslFWMboGDkDQhRysA2la
+BxS1f99syysaiI7xNIOs6QYExf/yCo1BKEXbpTkygFJLicIv/SC/o6/9OZhwoG2tM3eSKp8V
+0P9NcIh6KZN5wZ4KYebW1y2aA+Hh+qHAgVUhb8FZyRuKKpqfrpavaQB1SAHJK0xq4Xjd7KI8
+gUTR8Z0zIg/ZJ5kVAgMBAAGjggFZMIIBVTAMBgNVHRMBAf8EAjAAMFYGCWCGSAGG+EIBDQRJ
+FkdUbyBnZXQgeW91ciBvd24gY2VydGlmaWNhdGUgZm9yIEZSRUUgaGVhZCBvdmVyIHRvIGh0
+dHA6Ly93d3cuQ0FjZXJ0Lm9yZzAOBgNVHQ8BAf8EBAMCA6gwQAYDVR0lBDkwNwYIKwYBBQUH
+AwQGCCsGAQUFBwMCBgorBgEEAYI3CgMEBgorBgEEAYI3CgMDBglghkgBhvhCBAEwMgYIKwYB
+BQUHAQEEJjAkMCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5jYWNlcnQub3JnMDgGA1UdHwQx
+MC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNybDAtBgNV
+HREEJjAkgQxrYWllQGt1aXguZGWBFGthaWVAdGh1bmRlcmJpcmQubmV0MA0GCSqGSIb3DQEB
+DQUAA4ICAQBEyGOkkF49VDUeSiqRn7J2QVpNTJszE5yofqw3YjUEx1GQZ3pf2dWwSUnCR3bi
+Am2/OomaBvqWVpS0nDvbFrTCF8ewoRcvQRt9AwIZDYA0mPnl9wR66L4o2/1AkvmXUAXbOilr
+9m2rAZQ8Xu6iZtCUmXR/0QoXbiJYk7ljFVd3/cjOzXAo5K1GAWwQ8jh8s06RVkSXuWORX3Pa
+mkHfRcdokp9oi2nRHrLWUWwJUj8f2zURovXDVyUZYephYfMpac9y/ySnviuTmMYsndIZm9qP
+E7IiC22mTLMNaTGjfI13n+X7jC0Oh0K7WqqmmpCb+xYFfa0G3gmnQaPuS8CcecEvL06dNOBC
+aeMrWPbR7n0IwQSWxCueg8TvGryqhK0nX0X9DyX90uxtK+Zqb+mZGJ5ovv54FsWpYfZDMWIk
+UMQs8jiFxHQi+uFtDB1UYxaN5ML15VnFH2wRzq0aHzHevn8cq5SXo5tbbpOucEqMyASiYAdj
+51TumBPhTLGV81lLHQxSY8bBTrMfaljIieps1pP/pL5LgbrmB+ZuHpXxOeHQADzNuTipdYLr
+kDwjMfjIVQEiiNPxjmOH/oEIjYZMlvZdnZyz0RYTJfAMEHhpo/VkC0m6CWxUnpy4YE4/179s
+tsSviSN77rLqdPVhtgucPn7FP1vdWi+xkNxpG/KmaCnTVjGCBFswggRXAgEBMFswVDEUMBIG
+A1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZzEcMBoG
+A1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdAIDAvQWMA0GCWCGSAFlAwQCAwUAoIIB0TAYBgkq
+hkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yMTExMDIwOTU2MDNaME8G
+CSqGSIb3DQEJBDFCBED769ZTTw8PcLnVMFuaVHnDUorGj9QTWjUfRdTnwvdskdCvXa4df9U0
+U5IcPrdX9QQy4COFNAX4X5070FSXRTx4MGoGCSsGAQQBgjcQBDFdMFswVDEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZzEcMBoGA1UEAxMT
+Q0FjZXJ0IENsYXNzIDMgUm9vdAIDAvQWMGwGCSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEq
+MAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwIC
+AUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwbAYLKoZIhvcNAQkQAgsxXaBbMFQxFDASBgNV
+BAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV
+BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QCAwL0FjANBgkqhkiG9w0BAQEFAASCAgCNhxk8PfAe
+qCu70oJfAvQ09c1SYERIaRXqYLpHT1gC0L0M/8mn+nlhvHh+suNI6yvsqafvyBRwZKp5e2K3
+dQT+irZrn0CWiwfJarGsqNoilmNbXRieRgXbSPCU6O+BTDXJmwAc9EvPO0PKeJnQH0VhVSw2
+s8IpqdHnmlf8XZ8BBVEZLUstuzzVBXtVDlvzwneKULrn07yEfLuHkVbG1addtssOhOabjy2t
+/RK+jAi00bO9KyhBedXvtbd1ugWowRSFZHqnKHccvIpsHF1P1PCPnnDuQQftlPzxoWK11gCz
+XVpJyJyuI/C007QuJFBPVaJL3kTR2tR/dnyOq8iJ8iAOQ227/9i0Xt2IYF5fBlwrWsm7VIg7
+XJb/EHAqaXNSfbo66gWBRWi9YF/mx59CGQLbS6FIlEca1T25HlXipoN8nH7SaHgHpM/rziuY
+5kkNIWB8UXZYe9XpPKTBat3dUVpKlyHVTKYq1UqyoUiFSMigicFvuz3uEBJHUMMuEuaJSUB9
+rraWm+++XlHMVfgwyDw77jws6+cI0CfOrsEtGPzLCiStnlSlKfywg5dzBSn26NXxN26Z3P/e
+PiB8aayx0hANyVd+J4TWcbd5WckAOj2kVZk9bNUFumrxMCOpoai/JOFdXU5P1yaxaTrJJICf
+nynNuW256mKMxVwYWImgCmQjngAAAAAAAA==
+------=_Part_71865141_195979751.1641369263077--
+
+------=_Part_159674792_1533625984.1641369266416--
+
+------=_Part_159674795_1647108947.1641369266420
+Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7s"
+Content-Description: S/MIME Cryptographic Signature
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwEAAKCC
+DMgwggY9MIIEJaADAgECAgMU4igwDQYJKoZIhvcNAQENBQAweTEQMA4GA1UEChMHUm9vdCBD
+QTEeMBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0IFNp
+Z25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2VydC5vcmcwHhcN
+MjEwNDE5MTIxODMwWhcNMzEwNDE3MTIxODMwWjBUMRQwEgYDVQQKEwtDQWNlcnQgSW5jLjEe
+MBwGA1UECxMVaHR0cDovL3d3dy5DQWNlcnQub3JnMRwwGgYDVQQDExNDQWNlcnQgQ2xhc3Mg
+MyBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0k1EUh80iZ+U5TPQ6nd
+KNdCKovzh3gZWHwPntqJfeH763KQDXShlmSrn6AkmXPa4lV2xxd79QSsRrjDvn9kjRBsJPNh
+nMDykPpR5vVpAWPDD1biSkLP4kSMJSioxXkJfUa5ivPp8zQpCEXkHJ/LlAQcgagUs5hlxEPs
+ToKNCdG9qluNktDs3pDFfwrC4+vmMVpedD6XM1nowwM9YDO/99FvR8TN7mKDUm4uCJqk2RUY
+kaaFkkewrkjrbbch7IUaaHI1q//wEF3A9JSnatU7kn5MkAV+k8Esi6SOYnQVcW4LcQPqrxU4
+mtTSBXJvjPkr61pyJfk5RuNyGz4Ew2QnIhAqik9YpwOtvrQuE+1dqkjX1X3UKntc+kYEUOTM
+DkJbjO3b8s/8lpPg2xE2VGI0OI8MYJs7l1Y4rfPSW4ugW+pOlrh819WghnBA05Ept6I8rfWM
+u88akorkNHvA2Gxf6QrCw6cgmlrfLF1SXLpH1ZvvJChwOCAv1X8pwLJBA2iSzOCczJdLRe86
+EAqrcDqYlXCtNbHqhSukHIAhMamuYHqAJkgAuAHAk2NVIpE8Vuev2zol848xVOomi4FZ+aHR
+UxHFe50D9nQR4G2xLD8shpGZcZqmd4s0YNEUtCysna+MENOfxGr4bxP8c1n3ZkJ0Horj+NzS
+b5icy0eYlUAF++kCAwEAAaOB8jCB7zAPBgNVHRMBAf8EBTADAQH/MGEGCCsGAQUFBwEBBFUw
+UzAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuQ0FjZXJ0Lm9yZy8wLAYIKwYBBQUHMAKGIGh0
+dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9jbGFzczMuY3J0MEUGA1UdIAQ+MDwwOgYLKwYBBAGBkEoC
+AwEwKzApBggrBgEFBQcCARYdaHR0cDovL3d3dy5DQWNlcnQub3JnL2Nwcy5waHAwMgYDVR0f
+BCswKTAnoCWgI4YhaHR0cHM6Ly93d3cuY2FjZXJ0Lm9yZy9jbGFzczMuY3JsMA0GCSqGSIb3
+DQEBDQUAA4ICAQDGHq13XLQom9HIjUQSwL12dgSDIQf4EYJ/a8GVQsA4EbUlcI2LDMHVbP0c
+GgN8i/gGMaWd3kEp1IubhNc9wTeGcaMfW2EpHl13fbvwrbkVGRMU5jWA/6YZtDeFlEHoiMNf
+4LIGpLv4QKkdOazt6j+YBE35jPlHeXNS9ezfNJf7Pnfg3NGDiLqIc0dapqQVxA1wDQ+eSxMH
+fu8YPvmlAap5KbHnUvpTOsimf7bviaGxoU0vzmOFf6Uq6TvUwaPPChOFu5nXnGaQhOdm1FCz
+oeEtIiolaMMgsivEupgd6ErvXFjCtE2EVvdOuxZoQmySuG94zQ6z+++gs2SH8veIRDn8ueYs
+wJgk1EAsXsjuCx24Ak0muAoYxi8eS3Vujy4hc7zCA1XuqhTgmhoHUwvfRBSoZwWvRMjToUV2
+ArZ/DLmG6U/GbrC7FbS/6IC1djH+ZGTBClhtxVC2sgO/HUJPWTnRxDGL6MgqORwVYfDeQGgO
+cKizT+6R6A9PtpCeTYBsvhzucKS4BwQrDUECVIROR+qLlu12WGHnwyF7Bm/UtwvnNDKDzDWm
+5yVPfBdC/LxXA8afQn+YYPiAstn2sZwcNQQKiTEWhaT67kwJxWqYZuzIbirmy5LcI2yWwdRF
+8zxtArigu8dHwsIcQExFx0UGfztxK84rp4HWR0YosDzKZfFmnzCCBoMwggRroAMCAQICAwL0
+FjANBgkqhkiG9w0BAQ0FADBUMRQwEgYDVQQKEwtDQWNlcnQgSW5jLjEeMBwGA1UECxMVaHR0
+cDovL3d3dy5DQWNlcnQub3JnMRwwGgYDVQQDExNDQWNlcnQgQ2xhc3MgMyBSb290MB4XDTIx
+MTAxMzE1MDA0NloXDTIzMTAxMzE1MDA0NlowVzETMBEGA1UEAxMKS2FpIEVuZ2VydDEbMBkG
+CSqGSIb3DQEJARYMa2FpZUBrdWl4LmRlMSMwIQYJKoZIhvcNAQkBFhRrYWllQHRodW5kZXJi
+aXJkLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKlAMvhWj/JTL3TYeWHi
+ElUgH7QcaKr57viBf5Hz6GliZuC7IffSD7o9FPL5Her+Y6ny/7emyzY444619SgxA6GtT2cx
+bl7usPrV8JX+ZxFQLrODQ3xmlhO1PiQGVhLxnjh/hBQYLqyuibjy77vexAAmHYyvjcvwtOeV
+JxYQn0wRWf9fXOqa5jKot9U4/gT3UnSxLtFfU9d8wjAE3EV8Q6wto0e3xKy4GkP6DWBK/LJI
+tE+wEtvP6egFJgxByuNrCIwtL6qCi15JAFUpAegnxEl6Ejn+vBKSz3GtiSPA5TuCtJx6nYy4
+C8JSIMUxXsLxXeabtRgJyb/4AP14Vjfa/bdryUTgzoNjmQ4kJJv0ltG2weyhomsL4oZIoY/V
+x9cXnBrlr+C1CU3r4d7JeB3OlJFGxC0C5uq3+OfTozdrn26fVamlAo3CnjQ/qYqPZfmjtSD7
+bVl4gYxFOlAxN6a1QpDf3dNdmXGRalj04osQ+QcaNVeLhpyqFN4dslFWMboGDkDQhRysA2la
+BxS1f99syysaiI7xNIOs6QYExf/yCo1BKEXbpTkygFJLicIv/SC/o6/9OZhwoG2tM3eSKp8V
+0P9NcIh6KZN5wZ4KYebW1y2aA+Hh+qHAgVUhb8FZyRuKKpqfrpavaQB1SAHJK0xq4Xjd7KI8
+gUTR8Z0zIg/ZJ5kVAgMBAAGjggFZMIIBVTAMBgNVHRMBAf8EAjAAMFYGCWCGSAGG+EIBDQRJ
+FkdUbyBnZXQgeW91ciBvd24gY2VydGlmaWNhdGUgZm9yIEZSRUUgaGVhZCBvdmVyIHRvIGh0
+dHA6Ly93d3cuQ0FjZXJ0Lm9yZzAOBgNVHQ8BAf8EBAMCA6gwQAYDVR0lBDkwNwYIKwYBBQUH
+AwQGCCsGAQUFBwMCBgorBgEEAYI3CgMEBgorBgEEAYI3CgMDBglghkgBhvhCBAEwMgYIKwYB
+BQUHAQEEJjAkMCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5jYWNlcnQub3JnMDgGA1UdHwQx
+MC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNybDAtBgNV
+HREEJjAkgQxrYWllQGt1aXguZGWBFGthaWVAdGh1bmRlcmJpcmQubmV0MA0GCSqGSIb3DQEB
+DQUAA4ICAQBEyGOkkF49VDUeSiqRn7J2QVpNTJszE5yofqw3YjUEx1GQZ3pf2dWwSUnCR3bi
+Am2/OomaBvqWVpS0nDvbFrTCF8ewoRcvQRt9AwIZDYA0mPnl9wR66L4o2/1AkvmXUAXbOilr
+9m2rAZQ8Xu6iZtCUmXR/0QoXbiJYk7ljFVd3/cjOzXAo5K1GAWwQ8jh8s06RVkSXuWORX3Pa
+mkHfRcdokp9oi2nRHrLWUWwJUj8f2zURovXDVyUZYephYfMpac9y/ySnviuTmMYsndIZm9qP
+E7IiC22mTLMNaTGjfI13n+X7jC0Oh0K7WqqmmpCb+xYFfa0G3gmnQaPuS8CcecEvL06dNOBC
+aeMrWPbR7n0IwQSWxCueg8TvGryqhK0nX0X9DyX90uxtK+Zqb+mZGJ5ovv54FsWpYfZDMWIk
+UMQs8jiFxHQi+uFtDB1UYxaN5ML15VnFH2wRzq0aHzHevn8cq5SXo5tbbpOucEqMyASiYAdj
+51TumBPhTLGV81lLHQxSY8bBTrMfaljIieps1pP/pL5LgbrmB+ZuHpXxOeHQADzNuTipdYLr
+kDwjMfjIVQEiiNPxjmOH/oEIjYZMlvZdnZyz0RYTJfAMEHhpo/VkC0m6CWxUnpy4YE4/179s
+tsSviSN77rLqdPVhtgucPn7FP1vdWi+xkNxpG/KmaCnTVjGCBFswggRXAgEBMFswVDEUMBIG
+A1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZzEcMBoG
+A1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdAIDAvQWMA0GCWCGSAFlAwQCAwUAoIIB0TAYBgkq
+hkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yMTExMDIwOTU2MDNaME8G
+CSqGSIb3DQEJBDFCBED769ZTTw8PcLnVMFuaVHnDUorGj9QTWjUfRdTnwvdskdCvXa4df9U0
+U5IcPrdX9QQy4COFNAX4X5070FSXRTx4MGoGCSsGAQQBgjcQBDFdMFswVDEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZzEcMBoGA1UEAxMT
+Q0FjZXJ0IENsYXNzIDMgUm9vdAIDAvQWMGwGCSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEq
+MAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwIC
+AUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwbAYLKoZIhvcNAQkQAgsxXaBbMFQxFDASBgNV
+BAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV
+BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QCAwL0FjANBgkqhkiG9w0BAQEFAASCAgCNhxk8PfAe
+qCu70oJfAvQ09c1SYERIaRXqYLpHT1gC0L0M/8mn+nlhvHh+suNI6yvsqafvyBRwZKp5e2K3
+dQT+irZrn0CWiwfJarGsqNoilmNbXRieRgXbSPCU6O+BTDXJmwAc9EvPO0PKeJnQH0VhVSw2
+s8IpqdHnmlf8XZ8BBVEZLUstuzzVBXtVDlvzwneKULrn07yEfLuHkVbG1addtssOhOabjy2t
+/RK+jAi00bO9KyhBedXvtbd1ugWowRSFZHqnKHccvIpsHF1P1PCPnnDuQQftlPzxoWK11gCz
+XVpJyJyuI/C007QuJFBPVaJL3kTR2tR/dnyOq8iJ8iAOQ227/9i0Xt2IYF5fBlwrWsm7VIg7
+XJb/EHAqaXNSfbo66gWBRWi9YF/mx59CGQLbS6FIlEca1T25HlXipoN8nH7SaHgHpM/rziuY
+5kkNIWB8UXZYe9XpPKTBat3dUVpKlyHVTKYq1UqyoUiFSMigicFvuz3uEBJHUMMuEuaJSUB9
+rraWm+++XlHMVfgwyDw77jws6+cI0CfOrsEtGPzLCiStnlSlKfywg5dzBSn26NXxN26Z3P/e
+PiB8aayx0hANyVd+J4TWcbd5WckAOj2kVZk9bNUFumrxMCOpoai/JOFdXU5P1yaxaTrJJICf
+nynNuW256mKMxVwYWImgCmQjngAAAAAAAA==
+------=_Part_159674795_1647108947.1641369266420--
|