# HG changeset patch # User Raimund Renkert # Date 1397138603 -7200 # Node ID 5f1494fab517923272b067fe73e8cbe0c8b2916f # Parent c9315b24b055a9746a93943bf2211c467d17c3fa# Parent ee59ab0eb7ffb5dbb644d427a0b01a25ee8461ca merged. diff -r c9315b24b055 -r 5f1494fab517 ui/certificate.cpp --- a/ui/certificate.cpp Thu Apr 10 15:57:26 2014 +0200 +++ b/ui/certificate.cpp Thu Apr 10 16:03:23 2014 +0200 @@ -1,9 +1,11 @@ #include "certificate.h" #include +#include #include #include #include "certhelp.h" +#include "listutil.h" /* Qt wrapper around certhelp functions. */ QString getX509Value(x509_name *namebuf, unsigned char *oid) { @@ -62,6 +64,20 @@ .arg(QLocale::system().toString(mValidTo)); } +Certificate::Certificate(const QByteArray& derData) : + mValid(false) +{ + if (derData.isEmpty()) { + return; + } + + parseDetails(derData); + + mValid = !mSubjectCN.isEmpty(); + + mBaseLine = derData.toBase64(); +} + Certificate::Certificate(const QString& b64Line) : mValid(false) { @@ -70,10 +86,10 @@ } /* Cut of the first two chars (e.g. I: and decode) */ - QByteArray asn1data = QByteArray::fromBase64( + QByteArray derData = QByteArray::fromBase64( b64Line.right(b64Line.size() - 2).toLatin1()); - parseDetails(asn1data); + parseDetails(derData); /* If the subject CN is set then at least one x509parse * in polarssl was successfull. And a root certificate @@ -98,6 +114,57 @@ return ret; } +QList Certificate::fromFileName(const QString& file_name) { + /* We read the file using Qt to avoid filename encoding problems + * on Windows */ + + /* TODO change qDebug errors into messageboxes */ + QFile certificateFile(file_name); + QByteArray fileContent; + QList retval; + x509_crt chain; + int ret = 0; + if (!certificateFile.open(QIODevice::ReadOnly)) { + qDebug() << "Failed to read file."; + return retval; + } + + if (certificateFile.size() > MAX_LINE_LENGTH * MAX_LINES) { + qDebug() << "File too large"; + return retval; + } + + fileContent = certificateFile.readAll(); + + x509_crt_init(&chain); + + ret = x509_crt_parse(&chain, + reinterpret_cast(fileContent.constData()), + fileContent.size()); + + if (ret < 0) { + qDebug() << "Failed to parse certificates."; + return retval; + } + + if (ret > 0) { + qDebug() << "Some certificates could not be parsed."; + /* Maybe return here? */ + } + + x509_crt *iter = &chain; + + while (iter) { + QByteArray derData(reinterpret_cast(iter->raw.p), + static_cast(iter->raw.len)); + retval << Certificate(derData); + iter = iter->next; + } + x509_crt_free(&chain); + + return retval; +} + void Certificate::setInstallCert(bool install) { if (install && mBaseLine.startsWith("R:")) { diff -r c9315b24b055 -r 5f1494fab517 ui/certificate.h --- a/ui/certificate.h Thu Apr 10 15:57:26 2014 +0200 +++ b/ui/certificate.h Thu Apr 10 16:03:23 2014 +0200 @@ -36,6 +36,12 @@ **/ Certificate(const QString& b64Line = QString()); + /** @brief construct a certificate from a byte array of DER data + * + * @param[in] derData a der encoded certificate. + **/ + Certificate(const QByteArray& derData); + /** @brief check if this certificate could be parsed */ bool isValid() const {return mValid;} @@ -94,6 +100,18 @@ /** @brief get the date the certificate expires */ QDateTime validTo() const {return mValidTo;} + /** @brief construct certificate objects from a file + * + * Constructs a new Certificate Object from a file containing either + * one DER encoded certificate or one or many PEM certificates. + * If no certificate could be parsed from that file an empty list is + * returned. + * + * The size restrictions for the certificate list file also apply + * for this file. + **/ + static QList fromFileName (const QString& file_name); + private: /** @brief Helper function to parse the details of a certificate **/ void parseDetails(const QByteArray& cert); diff -r c9315b24b055 -r 5f1494fab517 ui/tests/certlistparsertest.cpp --- a/ui/tests/certlistparsertest.cpp Thu Apr 10 15:57:26 2014 +0200 +++ b/ui/tests/certlistparsertest.cpp Thu Apr 10 16:03:23 2014 +0200 @@ -143,6 +143,47 @@ return new CertificateList(fileName.toLocal8Bit().data()); } +void CertListTest::testCertificateFromFile() +{ + QList result; + + /* Real certificates in the wild */ + result = Certificate::fromFileName(":/Intevation-Root-CA-2010.crt"); + QVERIFY(result.size() == 1); + QVERIFY(result[0].isValid()); + result = Certificate::fromFileName(":/Intevation-Root-CA-2010.der"); + QVERIFY(result.size() == 1); + QVERIFY(result[0].isValid()); + + /* We can handle ECC keys */ + result = Certificate::fromFileName(":/valid_ssl_bp.pem"); + QVERIFY(result.size() == 1); + QVERIFY(result[0].isValid()); + + /* Basic stuff */ + result = Certificate::fromFileName(":/valid_ssl_rsa.pem"); + QVERIFY(result.size() == 1); + QVERIFY(result[0].isValid()); + + /* Multiple certs */ + result = Certificate::fromFileName(":/import_test.pem"); + QVERIFY(result.size() == 15); + + QString lastCertB64; + foreach (const Certificate& cert, result) { + QVERIFY(cert.isValid()); + /* Just to verify that it's not all the same */ + QVERIFY(cert.base64Line() != lastCertB64); + lastCertB64 = cert.base64Line(); + } + + /* Some robustness */ + QString fname = getRandomDataFile(MAX_LINE_LENGTH * MAX_LINES - 100); + result = Certificate::fromFileName(fname); + QVERIFY(QFile::remove(fname)); + QVERIFY(result.isEmpty()); +} + int main( int argc, char **argv ) { CertListTest tc; diff -r c9315b24b055 -r 5f1494fab517 ui/tests/certlistparsertest.h --- a/ui/tests/certlistparsertest.h Thu Apr 10 15:57:26 2014 +0200 +++ b/ui/tests/certlistparsertest.h Thu Apr 10 16:03:23 2014 +0200 @@ -19,6 +19,7 @@ void testGarbage(); void testTooLarge(); void testEmptyFile(); + void testCertificateFromFile(); void benchmarkValid(); }; #endif diff -r c9315b24b055 -r 5f1494fab517 ui/tests/data/Intevation-Root-CA-2010.crt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/tests/data/Intevation-Root-CA-2010.crt Thu Apr 10 16:03:23 2014 +0200 @@ -0,0 +1,118 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=DE, O=Intevation GmbH, CN=Root CA 2010 + Validity + Not Before: Mar 12 19:54:02 2010 GMT + Not After : Mar 12 19:54:02 2020 GMT + Subject: C=DE, O=Intevation GmbH, CN=Root CA 2010 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (4096 bit) + Modulus (4096 bit): + 00:99:ec:42:54:07:a4:de:9f:e8:d9:04:c3:6e:34: + 76:ea:16:9f:ed:0e:e2:c3:61:8c:a8:09:83:ba:5e: + c7:a9:88:c7:58:66:ef:f4:0a:ea:b1:94:68:09:7e: + fc:b8:f1:72:6a:fb:d1:6c:40:de:91:8b:45:b3:7f: + a0:76:c2:b7:8a:35:18:f7:57:6e:3f:24:19:d7:00: + a8:90:05:a4:ba:b3:54:96:12:8d:d2:55:43:99:6c: + 47:0e:4c:f1:be:02:99:4e:64:48:80:00:f7:4f:6e: + 4e:a5:73:af:d0:47:8b:4e:68:43:29:f1:08:1c:c1: + 76:45:f9:b2:06:70:01:23:82:a9:fb:4b:92:b1:a0: + 3c:87:ae:56:74:8e:79:b9:91:d7:01:45:e9:55:90: + aa:da:52:a8:8d:a8:ac:f8:48:2d:97:7a:70:48:26: + 7d:5d:da:96:57:ac:e5:3f:ca:29:fb:11:5c:f4:36: + a2:ad:8e:5a:24:40:80:af:68:f5:45:c0:bb:5f:47: + ac:b2:04:5a:5f:7b:05:4b:63:2d:9a:ab:59:0c:0f: + 41:fe:dd:c0:17:2c:ca:26:39:f3:ee:67:12:36:71: + d3:f7:8e:2f:82:b4:f3:b3:d7:2a:63:e6:20:33:7a: + c5:5f:77:0b:4d:f5:dd:06:a1:ff:d9:65:8f:d1:cc: + 82:1f:68:86:9c:54:90:d1:1f:d4:1c:c8:34:00:5d: + ff:fc:08:9e:0c:8a:79:b0:dc:6b:49:0e:79:bf:43: + 4d:86:3a:63:42:19:40:8c:e3:ac:42:d2:0e:38:a4: + 7d:e8:31:e4:7a:25:73:0d:f3:ba:6a:d7:53:77:86: + 44:55:0c:b6:d2:ea:49:08:59:ca:08:3f:f9:28:8f: + 29:c9:31:bd:ac:ef:c6:f0:38:8d:bd:1a:76:2e:f9: + f2:5d:4c:8f:8e:5a:8a:7a:36:c9:27:3a:e8:f6:f4: + a5:b2:5e:d3:ce:7a:68:49:59:01:33:29:15:5e:35: + 6b:66:93:3d:fa:2b:df:d2:1a:d8:5f:2b:cb:04:18: + ce:e2:93:17:b3:bb:59:76:cc:9e:e7:4a:f6:f0:ee: + ab:24:9e:67:92:77:13:6d:ef:93:da:1e:dc:4c:eb: + b6:8b:18:fa:a6:48:dd:39:cd:a1:8d:be:ca:62:fa: + 1a:4a:fc:d5:b8:bf:2d:e3:5e:d2:16:39:2c:af:fa: + 8f:9d:07:ad:2f:da:e8:22:16:87:0f:d7:a2:8c:6c: + 25:a8:e4:33:70:9a:47:bb:41:55:02:4a:09:4b:71: + 22:7d:2c:29:54:e7:91:5a:ff:4f:41:68:8c:f8:07: + 76:75:95:46:3a:f8:4d:c4:ed:3c:0e:ae:a2:30:42: + a3:7e:bf + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 9A:65:7A:C0:A5:4C:2A:3D:52:95:50:85:7F:01:A9:5A:58:7D:13:95 + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Alternative Name: + email:ca@intevation.de, URI:http://ca.intevation.org + Signature Algorithm: sha1WithRSAEncryption + 1f:60:e4:4c:30:dc:91:af:23:c6:90:c4:98:09:85:43:95:46: + 01:c5:5a:16:75:47:f2:a3:f8:7f:c8:29:9e:c3:66:ad:73:b9: + d9:59:b9:ab:6b:f0:2b:e7:26:a3:30:5e:44:6a:43:97:a5:1a: + 30:c9:a3:87:d3:0b:8b:0b:9d:f8:04:c0:47:6c:02:3c:c1:72: + df:66:c5:12:fc:60:39:db:09:0a:75:12:51:6b:3e:3e:e0:a8: + fe:0d:eb:36:8f:45:b3:0d:e2:fb:8f:e6:91:da:b2:eb:0c:fd: + e2:e8:00:79:a2:42:1a:ff:9d:59:42:21:73:1f:02:48:eb:3c: + 29:05:21:ea:2d:b9:d3:15:05:bf:2c:53:ab:dc:e3:e7:58:ed: + db:19:91:3b:d5:9f:af:ae:d7:4d:85:18:fe:ac:21:65:d6:67: + b5:c4:c8:bb:b3:74:02:df:c3:33:75:37:83:2d:24:65:2e:80: + 26:4f:c2:61:d8:0d:47:be:3c:ec:41:7b:a6:be:c3:bb:86:46: + 43:9d:26:05:23:7e:cc:bd:f9:32:67:6d:c7:d2:c3:5e:27:13: + 7f:b7:4c:d3:40:34:5c:af:5a:ab:99:86:02:87:14:26:9e:54: + 88:c6:8f:b5:8a:ec:c1:1d:66:33:a8:a2:32:5b:f0:5d:b9:51: + 5f:45:a8:78:9e:00:e4:06:0a:ea:67:31:bc:e3:75:76:ee:b6: + d5:c0:1a:56:c5:a1:1d:37:1e:67:21:8e:54:2d:b8:ef:48:04: + 95:7c:79:a4:67:ec:41:99:78:90:a4:5a:58:c8:74:58:14:4e: + 02:1b:15:22:b0:1d:2e:97:32:63:c1:71:ff:c7:a9:11:41:b9: + bf:02:da:4b:92:bc:f3:5f:93:ed:39:5f:41:1a:25:69:fd:fc: + 42:f0:99:c0:b5:71:b0:d0:52:3b:65:f8:2a:d1:90:f8:18:e3: + b2:fd:db:71:1c:54:2b:b5:3d:a2:d9:9c:1a:43:03:c3:eb:c1: + 5c:be:c7:d5:ed:d0:20:b3:63:53:ae:5d:23:68:21:7a:58:01: + c6:fb:48:7b:0e:7c:5b:35:80:34:57:2f:95:e7:08:cf:e8:30: + 9d:14:27:41:ea:7c:08:81:b1:2e:b8:95:97:5c:11:a7:48:6b: + 88:2a:10:15:16:2c:3c:0a:36:8a:28:ae:2f:bd:c2:13:be:67: + 8c:0c:4e:fa:00:10:63:8a:26:ca:98:1d:b8:95:89:e3:1c:a8: + fe:d8:01:26:d0:b5:3e:35:23:e7:94:96:ad:7b:9c:5d:09:dc: + 1d:79:9f:d6:8e:27:d2:db:fb:df:ea:81:2c:87:a9:7d:1c:56: + 7b:1b:1c:93:7f:22:86:af +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIBADANBgkqhkiG9w0BAQUFADA+MQswCQYDVQQGEwJERTEY +MBYGA1UECgwPSW50ZXZhdGlvbiBHbWJIMRUwEwYDVQQDDAxSb290IENBIDIwMTAw +HhcNMTAwMzEyMTk1NDAyWhcNMjAwMzEyMTk1NDAyWjA+MQswCQYDVQQGEwJERTEY +MBYGA1UECgwPSW50ZXZhdGlvbiBHbWJIMRUwEwYDVQQDDAxSb290IENBIDIwMTAw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCZ7EJUB6Ten+jZBMNuNHbq +Fp/tDuLDYYyoCYO6XsepiMdYZu/0CuqxlGgJfvy48XJq+9FsQN6Ri0Wzf6B2wreK +NRj3V24/JBnXAKiQBaS6s1SWEo3SVUOZbEcOTPG+AplOZEiAAPdPbk6lc6/QR4tO +aEMp8QgcwXZF+bIGcAEjgqn7S5KxoDyHrlZ0jnm5kdcBRelVkKraUqiNqKz4SC2X +enBIJn1d2pZXrOU/yin7EVz0NqKtjlokQICvaPVFwLtfR6yyBFpfewVLYy2aq1kM +D0H+3cAXLMomOfPuZxI2cdP3ji+CtPOz1ypj5iAzesVfdwtN9d0Gof/ZZY/RzIIf +aIacVJDRH9QcyDQAXf/8CJ4Minmw3GtJDnm/Q02GOmNCGUCM46xC0g44pH3oMeR6 +JXMN87pq11N3hkRVDLbS6kkIWcoIP/kojynJMb2s78bwOI29GnYu+fJdTI+OWop6 +NsknOuj29KWyXtPOemhJWQEzKRVeNWtmkz36K9/SGthfK8sEGM7ikxezu1l2zJ7n +Svbw7qsknmeSdxNt75PaHtxM67aLGPqmSN05zaGNvspi+hpK/NW4vy3jXtIWOSyv ++o+dB60v2ugiFocP16KMbCWo5DNwmke7QVUCSglLcSJ9LClU55Fa/09BaIz4B3Z1 +lUY6+E3E7TwOrqIwQqN+vwIDAQABo2kwZzAdBgNVHQ4EFgQUmmV6wKVMKj1SlVCF +fwGpWlh9E5UwDwYDVR0TAQH/BAUwAwEB/zA1BgNVHREELjAsgRBjYUBpbnRldmF0 +aW9uLmRlhhhodHRwOi8vY2EuaW50ZXZhdGlvbi5vcmcwDQYJKoZIhvcNAQEFBQAD +ggIBAB9g5Eww3JGvI8aQxJgJhUOVRgHFWhZ1R/Kj+H/IKZ7DZq1zudlZuatr8Cvn +JqMwXkRqQ5elGjDJo4fTC4sLnfgEwEdsAjzBct9mxRL8YDnbCQp1ElFrPj7gqP4N +6zaPRbMN4vuP5pHasusM/eLoAHmiQhr/nVlCIXMfAkjrPCkFIeotudMVBb8sU6vc +4+dY7dsZkTvVn6+u102FGP6sIWXWZ7XEyLuzdALfwzN1N4MtJGUugCZPwmHYDUe+ +POxBe6a+w7uGRkOdJgUjfsy9+TJnbcfSw14nE3+3TNNANFyvWquZhgKHFCaeVIjG +j7WK7MEdZjOoojJb8F25UV9FqHieAOQGCupnMbzjdXbuttXAGlbFoR03HmchjlQt +uO9IBJV8eaRn7EGZeJCkWljIdFgUTgIbFSKwHS6XMmPBcf/HqRFBub8C2kuSvPNf +k+05X0EaJWn9/ELwmcC1cbDQUjtl+CrRkPgY47L923EcVCu1PaLZnBpDA8PrwVy+ +x9Xt0CCzY1OuXSNoIXpYAcb7SHsOfFs1gDRXL5XnCM/oMJ0UJ0HqfAiBsS64lZdc +EadIa4gqEBUWLDwKNooori+9whO+Z4wMTvoAEGOKJsqYHbiVieMcqP7YASbQtT41 +I+eUlq17nF0J3B15n9aOJ9Lb+9/qgSyHqX0cVnsbHJN/Ioav +-----END CERTIFICATE----- diff -r c9315b24b055 -r 5f1494fab517 ui/tests/data/Intevation-Root-CA-2010.der Binary file ui/tests/data/Intevation-Root-CA-2010.der has changed diff -r c9315b24b055 -r 5f1494fab517 ui/tests/data/import_test.pem --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/tests/data/import_test.pem Thu Apr 10 16:03:23 2014 +0200 @@ -0,0 +1,465 @@ +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0MTEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDExGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIAo +DGdggfyK/7eQQQAggCBwWwpa0zpw1mOR1cfHS7OCaLYfmH37LFe7rPRUIkhh7ETR +DwIxwWJPLmDAr0qcZrbUm533UeHVC7PnZwl5YQqJuMlB7TyX+x9ZCplePf/lyBxD +g9nGqSrTwh+Vlh9k+v+FjXhtUq+zyOEGj7TShXEFm2/9i6QXR9nA93jkTtyOXw83 +rajY23esozzHeP01JqqlGbXoLB9DFb4BzEKbBAbzEXR9myc4G8yXrSA1FcH10jDW +zHDzC9/Yfxw1enZQXeOr16wsPIzGLWrlCEvnc6ayUR08oIeR3u/a6gAsJK7obYV7 +wapwB3ILPc92sOKTY7C17U/JkQESSc/yXqoSfUr9+1TYVZMRlbY78H/WV34WKxMQ +MkVc33ypq8z7+SqBzNmNehlKwe6BQzOeaffHQC8sf/eIRuZCytB55SmXoGYxJyzx +vOJUReuVprjQ59g7eWxaaUof7d4zy46CKZVH0p2spJG5MEy0grQH9XWkXJdyaXXQ +EOAFq09wOMDuS1KjNX7K6at4Hh6bmU+ZaP30X+jP1zXufAutsBeDwsLiiaPqaVo1 +Zd9sYFQWrXEJoiQFk3xlJ2rHhFi74AO9IrEOdBMy7G7Nf+oVFHa7QV73qLwKtrE5 +sr65azDqyyo/5FWFoN4cnxfXfLWOShxzN8Ft5cxfAgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFOcK9e/IHDiOuxccjXbpUWsItntVMB8GA1UdIwQY +MBaAFOcK9e/IHDiOuxccjXbpUWsItntVMA0GCSqGSIb3DQEBBQUAA4ICAQAm3IxM +mWv9mJMsi54XiloGDF56fjVcvbOeR9h6ybp71XK2xKICe6VWrQ0HBSBLQdJ6p9e4 +GUHxjdiSzrUHn1QmicwRnrt7Vl6/DYRLNaqwsPP3P2Spb9orJO5u3pMqFcBct3Uq +/KuJzcBKcNLlf2wJIw4IyWy8lBwc34nFFkgaGXXD2ZzxrhwaEjQyzLHqGuyfFdHn +JrLj28PVvO54CyoplRiAaIcS4beR+ei3BLPQfsabkURo/ohZ6tyIpYJkrP0jT072 +yOZZrv9kegL/C13UCMWirSVEYMIjZow1MsxWWvi8QIWCfmvc5wmx9KEkMAzzE+LG +kISwLdN+VKqSMuQT185qfo/Ge810P9FSR/OI9Gvkd4S7gUnBVIqD9KVEEGWfjir/ +qeyFyntYavE7eh8e1QuEv9RxKKzDwk6nerJtTh5pk0jRx1K912YB5+8cfh7OVix2 +6uqymBja3JGiA8HtnAoyTjzs91xsSxTI5DfxlH/cFj+q7E3VLj3u8X3OzAdzg4sj +m+Z90vaOlxc8MCPySg94ShmQ1osy0gSnWmrQJsjb2OfuzdmixbNkVb0VWlIEqcHO +WXhwBvTg3cinB3Rd+qXmSEuMH5SSu9GSo1KbsQai7L8tQxLL31AUzVZOBv7APNtT +mzFcT6Vtxx93Fl5SAiXtubh5v6aGPtFmaniEKg== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0MjEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDIxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIYh +5ygg9rIEngytGlxv1SDpBjECRjiT0ol3KPCyvxFXw/cHvSV8xmy7qz6zZ5mU70Ty +yeh9mYamba1PGF2fNSWohdTiXLxD3X+cO0X6raSHZRkojvwsfnRKqMVN+P+R5/pg +IYvSkAzY1idhucYQFwQyoRpjpvxPCG6psOrsmXRwwTdGSiEszOyo3+K8bMG8rytG +ZC39qt12LTi0+SmreefQHpUStM5k15LpSy4b48iT93UElMsTxTnoxJysjqexH1fj +ZEdpvN0JNiyfMstnU4cM5V2ZuqFRkIDHfcFvwla3ilZlf7JiBOifKi5OKD1wDXnx +W6QQlLfjTt8BzTAgRgPARbLmRgydl6kcoWAJ8HJlIKt86t48s40dzNzXNnkbogmy +MXaoNQCVWeA0n12Psv3NJYCH0pTsrBXqM9ryJz807moTNakPMUFsgkdNRYlEs1/A +mOMQaTNZFXeN5pAvONAL63PfZx39OjgDeCF1lT1h1rG0fcztvZbt6ZwckmvWFUaw +rUMFdJPcf2Ycob7Y/Bw5Jj7kx5htwMlA9mGQzY7jvs4SmP6OQObZmdFdaUaFv+66 +hOA/9wccwMhdJxPM4//xmIS0Pl4WbOoOPPopIv4zbZ9soNspqot57h4XFQCInDTU +6KPJ/2Lm5kUboJHk5m57sENwyM0QLY0++mYQBdoJAgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFHF1Zp5M4FaUQvddUG8dMVfA41l+MB8GA1UdIwQY +MBaAFHF1Zp5M4FaUQvddUG8dMVfA41l+MA0GCSqGSIb3DQEBBQUAA4ICAQB4uWUI +37Bogm4B61C/0lCcBTheG2nHftfrbDNW6IZHhOUSlhVxEDsa6BAUlk4BLQ0W8+G3 +knarqpzjWn70m1LtZpNZu0SNPdec12GneyaIb4DI/ootMYNYKURKumK4ZaVy8AbD +1yQlX6J6bSBpbFI8TpWCEoyv3kvnrIi0LaAMMMeFBwRkxjtO/hSxoh+Tkg+kJjuV +tdXIGSbwn2zFFJuVGtCxiLsA2iCfio2SGK6Il1S83hIwYBc5Bhh98GxdGvjY8gQU +yR1Jd+kCqCpyG/q6OCALR/hQP7PR0PCgZahtBR1kzAlbpjO/nsWSd5HhJzxVmSU2 +VSSYKMFPnoUG12Zz+IRXi/+KhP/BmXv9EBwt9Up3O3eEhvU2YBAWRsmKPxvcUo42 +qRg5wzjoYYoo1mHNT2MYA6Mne91VspQzXUUo8i2hPtppa8r2Oe+1Vp5s+ov0cBE9 +ktBY0yrOFJbUfgMprdPMEUamSJAwpXQnKo2F0O1zkj87w44LluTbYdo8Afsu231c +7kuv/VbpGLs9BgkJSv6hodxJnq9Ia3TRu63heLe4G3NbviLpnZuJZ8gw9RvrI0eK +J5LZXGJn/Bkdk5FoH+CrmUinJ58g+gfwc9vlbq0TlthSdC7FKKP0MMEa0VjgWIZF +G+P1vANAHdx9TpojVR4SeNmuj2JPeBjODbxEgw== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0MzEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDMxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMId +XzsYLlV5EmvF+81YGiskQrbf5y4WvW0AFuaH6htyL26xnA1iaIz6GybgsUBvJlPQ +gv1BCnmd3JEt7KLeWuWnMVw0elNKyI0WHv/leORmF/jCZvt2hjzR4CacNH50KjbT +0xtQZSCIxlyMkGlis5EydZCWLJAHxRHfQoIIIJtTyi+hunCODFmJ/CBJirY4BSuZ +BXIslMylcR4PlU+2yOb9H7VYnIwhYZe2U9ctxpP32R9A4KiLrk41WbmvS5UE1WIt +FC2o7rKKIz+wzsi3YtvNdEb7juorXZP9awc8DzG1UL9MFRJllaXVPRN7s1xLjlUo +mVMAy/TqePISOnNgPiLXHnCHw+j6F3VVaTOyBaTkZ6yMKXZdoAsasN5DHDOzGwxy +vja8EGEwyt+O0hz2cVwn4sBvf4i62UrS490sWRAkU6ZupbCP5oU9GcK76KUMKv0R +bskGEuQtgmDdxOTjDe4wtTfoAJrjX2hBb2Uw9Z+h0j9dr79eFfGJIzKJIfIqeFAh +ZempUi16ervJqkJGUW/3KIsLgCGiMtuoMYwav1y24pp47vUUQUQaV+eWeE7pUQpx +aI+p1WaQaZwmBZjofJne/6WEdG+CQ/X+eni/IEOt5tCGYQuGnDt82CQBKpO9BMLm +B0+V1PCw9fSZZrugmhoIYKNK/+ptvcbTU2fk2/ZBAgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFJ61FOi7+8OiFUaxJPuCh0/uKGGtMB8GA1UdIwQY +MBaAFJ61FOi7+8OiFUaxJPuCh0/uKGGtMA0GCSqGSIb3DQEBBQUAA4ICAQB6p+n6 +b0pXgbyKQHfB/Y+GqwRxnYp6pfHIDsOpyiYKg57NgxzgjP+UFHK4x2x5WaJewM94 +oxywtow5YFWqC57N/Hss3V4hztk5h1wnOfDFwg/2nhnD1cTS5JnqU7nYLT1jEFU/ +pH/Lx5Zw7sWxrIUB+UFcZcYSH8bU0MKNAnD0R6OD6ceKQ7v+uvwJR61K98Go/XLq +5E75uezXWTO/4+co4u1HoF7D+ivsz2yI2CxIGqROiw8/G9LWSO5sEzZZGVEQ8cdr +kphwoM42NfHL4uEsfQ0ggK6DtLAmRK02HwoMUSB9vNkrzM8M3zY5VcVP8hTTzc5Y +d0SsTdB1DdfGLsm1vU0HzIlZaLFoKEw1X3eKg9soxpTOc9QwkJpDJcGV4gApEs5V +W8KsnuYS0Lkz3hLsSwNExpD6B0MLhwflzE7ydMdCf2KKgr/HbwE0nOjtmpq/kBq1 +p1FE4aVpcrMW0aJFvGMiWbppJT+pK9Ryz2TPEQVnQUyEAgBNzARbyjE7Sfyqp7+k +lbfYfN2zOeemm21Es0OD/eR+oUD2/9jUTZ13vPNbpJSh4xR23HBo7pibP7tqWGVR +szfaL0zpeD0lAmlnB/6iiLu4QvlriRhBjP/8hL/agoMVH95LjnGdoX7sd/ylNQph +NiCkZYoA6KZ3oAaDD61Dl3THQVvMm5iqXxWY6g== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0NDEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDQxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJEM +TzMtFDNOq+2PuPYAyL6tpx8dfn8ybRlYtIHLcWXckXlTSfpY4qVBkMj/yz3NlRJi +341kO2gxZw8N+BWzYunbakeX+aQRLfHCKwzNEz1swj3kKRy4NT1dsmr3oEUCKVu9 +mD3XyzfYLfCzh0+TsEjIvLcLEf+1BDSYizMxjkCDYX7xsgAQB+UfSsQw8FrBpOR3 +CUYmZMMleM7t1hIOiBE9PS9RNrwHXZ+hqq1S+A7t/yQ+opGR8pMT1F4LiTuiuNJP +GgHrPL3cPwNzFSmLy7InHGcyg3GbS82PLyDteF7LQMfKZAHyDW+0KW1HizKYUY1W +THG0mTZ2uk+QjbS67CTEKSFMFYX9MRRh+Yv1SPRowDLJfbzzC79QqNWDn8e3h+Lg +HNt3TcpvNOlin/LVXEc1EQOQuneI+1J0aQYq5xzcSOXkRhGyhSXBYnwlmjCeEF4z +sqvyWY9pZwOIJSJIi92AUuN2dAymXeTplsgkUFyMMbp0OJV2UB9keqLubeiN165B +HUG00jHJxM0UBMSZE6ZOeQyljHN2CZKibTnvl68KzS3zWHTBAtQZQzgA8ZYNaRyS +Br28EvpknC1c5Hz2CNy9s7Zb5YsMBz+D+k365UMfywmeNEMNLZQA2WGRo8++IT08 +0CJ73kW4ahlYeRncmllPi5OJXcooQxN8LuiAIxQ5AgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFJ4zjCZVsIklZaO9+kfbgIMbIyckMB8GA1UdIwQY +MBaAFJ4zjCZVsIklZaO9+kfbgIMbIyckMA0GCSqGSIb3DQEBBQUAA4ICAQBPxmwa +13UwUje0YTIL+MZsdS2fIdQxuvvlXUILV1QTT7pidCkBXWqkW3gdGz1oftEzS2B0 +mtfVI0dT1WIHSBV2ChQzF2AUWN2pHW4mSKkkMlfb3WlViylPTrf7nDWf8vdfWg31 +XXNPVpEYHCV01LhaFG9v75pWJCTn/ua/BU2f/co03IlvRijxF9pOQpEvVP5t3ahI +vsrwRA9m8/ntAkszZSLA8jcCOtshYQxLb1BehHJbBr3iLbvLIiKiNehAVgErFChu +UH1vTvbPl2bktqEQXbOQm/i1Mfd59MyIjEP6afkNflX76hoIbOWaGKV8yZ5aSQID +th+D3iDn93hfTzinTOQ9prt/yRgKehX8bTPfli3C046USUF6Rtd4ojoLxW9ymoo5 +sgmTTtT6D/tNMm74u0PrQCAJMcpkf4xGNjKAL3zWvduF58AoL4kusUnMgwHk5vNJ +x6Oq1Ri2WGqHiPF6Vb5JwGqoi4PN/ErznREYFlVMhefuk4EMVt3vVtkZFj7gvS7m +EyUEE2fSr0LTChqXoroyDK+o7GlNF8ZYS0Ko5Bz3lBJ5hWmHTu+A7TXW9xKkGZn+ +rAsx7f1N7BDGVSO/uRveuZHUkFOSOjo3gF+/gUUm6vEbyKx9/pAyjq9X7MTGFPuD +Gcf7j2nJtQnj173ccf2sgbjpTi3RZ9DkJuoWXQ== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0NTEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDUxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYd +fOSfCagOjEkEteJr5Odix8EcIEaXxiEnj0F2qx9n2UGYwnM9oC9RFYM68YkloBHj +qIbxxp0HANQYO4coB4Pay72AwETqFT9apZw1C2KkxFBgH4Vt8ytBwdd8Zj2W9zJA +GXa0WQQZkV2+nNdatClhJjAJD6CLMb+ifokRAcIs8Vz8ZNQSfIaFpzspgJtUk6c4 +vt6rN2m8pTH2InjT1NYWtoZaL7g62p27mssUA7mDU651+ua5eoC0b8C7oWfdoZoz +41Okk4S/0SZrCdBlrSvEBULCsPTfllUHzBSTAvYQ8B7RNeCFHsNYxpGmNDfMYm67 +n6mDpNj8HsPcNSuKnvOzrKG1LlimT0lxmRdiUTTaVeGwfHWDBlVrPBoYcbpkXb00 +o+Zgg1N5s/8iRaMmnTLD6f/7YWz9vbWRMwLp/3Ovoo1mxyttuBcLTyDjWInzP/7j +biD/Cy3PnfHJSFt1XkcPJt19WtbBI4wvyDqMR+3ouS8ZnTlzsYjI80pYF8TrUsrK +HPAEN/qeYJ4sAASMCIJBQ7X0Ov5mKwcLr6al+BNkaUq9LgGeS2kTVeUqQFcM2tlA +UfaBcDnNp1JlQJnPDYb7tCbYxopmDWyZAhsNBVa2QyS741bqJBiouJD5jmGIaJaE +gcb4q4S8z3mD6unGnmCy4+X40bAc4t/apa6begtjAgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFFk6Z1kBZYdKHZGCXiJYp+xBdCBvMB8GA1UdIwQY +MBaAFFk6Z1kBZYdKHZGCXiJYp+xBdCBvMA0GCSqGSIb3DQEBBQUAA4ICAQCfpFKu +XjqL8iTtqGdxw6GjB8SOLa5/NmXxAEtCItGo5S6s7m30ieJ60/mYTidgt1vPHXUV +YDV0YtuSFh53I1tfo5AhcIv8dG7O7caluUIdR/Bd/UbxmDNk26WliPqo9Ht7DzTi +CHjwJOBTChBnZ3PcF6wMJTAOA1MyMs5LWZ/N30x2xfrQjwjhUxRns4Sl+hgm5pGL +Fa8hwzFAUPUdjJqwlmkFsdJNAvbrphkiwD3Qf5ftFPHovkFBmChslAMTJ5mDNgW8 +rLJQyufet2h0K8DSByOw344ALuiI3dKuzmeXcrrf1r3EC4vp+DUwzDHjSly5nrB8 +V6BSm7IvEyCWxBBBjMv7GMJmCB9f7AAk7O8xAvGKi21yNI98UkqfHuZSlasgJmnX +LDcznpt9O78BVxSd/7L2fsvzFQyK1qiBtnjQn1Yu+kzVwaeLiYOd5jVNXRjXuj86 +c5yw0rMgoNUTt3RUtwR5PC9XhxDHaokZ6HG1dTYE4/gvcuomYI0d5t9njcGJzVfE +LFht7WjmsuoIyjQIWbN29RvtT5RkvOFlPARs1+Qi/Pqyykl03QCKjflF1GJc01oF +BMAM/iY+d3wQI41IX3nC8/dZSFqprgb4nz2pnEfkAFZDzDYHry7O56MVNs/LKC03 +P3WIDlMIBQj4179X+APTUe2pnI+H0kX61Oz+sQ== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0NjEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDYxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJXg +y6QC0cho9vd3hJG4GiDvdq6pT09UIpyzihxilHq5KFgtyf6FiArUU8dHH2f1I+d9 +UZgphKC5AaANZ9/xVnMdmAEQO4LiXs3Z81HDBkv0rm8uQe1ArBC/Dr2vn1grYrBb +HGbfXqjPlpigVBjcL/fMiE+HFMdSH026aXUGvI32w2dTJ3eLhJTbbP0CbevlNqK5 +UPG0AR4NGQkPGBEo2Cp3SbUmrrth6EAYb8D4ybJGdDpcRFeIPIGxLHqwKFHaCajw +Yx6Sq8u3i7leCUGpmPEHhVc9lZWqH+gBTh0a56gCfb6e+ZLr0M0C0Im1Zy1fnDBC +kkRicROCoaXzIyVQdyvIcpPtvm290LzDLBu+lqb+cxPNaJB+TRlXIZWIw2EmNONt +UMDCxH3EsMW8s6tgQQxRqS8tQyEpif6+ab+f4IaoHSe6I1dv+ngRazFpZyUJVPr3 +9ZEgnxhqkZUEu1fWusdq6E07C+fMipUtTF3d2h1bpCReIi2p/xs6w9DCh9pWnDBc +uQYvFDvs17QmIDUHhdSuDK85TZsXimyHohFTofcTRSzxjJRndceUF79uZVOSKyC5 +Wg9M/7oeIc/Uu3OGcqVwYSBuNS/6YbDw/Y/HSslqHizCnn72yR3ek6sC/+MzTkP2 +HZrhComoXaS9SLIe21ppPoAtBnru4WZRRgujc+0fAgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFIF6Wkbfxx0PVlGzp6Ix2LvJL3i1MB8GA1UdIwQY +MBaAFIF6Wkbfxx0PVlGzp6Ix2LvJL3i1MA0GCSqGSIb3DQEBBQUAA4ICAQAHHvFw +B2p4S2/P/QYixuo38m98EKzCBT53hwdJss0QQDXrf3LdaY9NAgPpwRR75rl71SDX +z9nRLUczFlQq32p+uQXL/pcfKFc/dnPkodNxhmCzJRL0QqcKjqRLhX5RGJsMbhJD +vOdhl15y/S8Xco0rCkWb1Y0zRqugtxoQL5J6RAhy+sgSdOKs8AfTqtMEtavm/IyG +OJXf6uZm3AfyhA5iAO+/1pCMVrnDWrNT0OJ9ZZo24WmjJbwfOd0YOUraRktD+n6O +iJtcyONxIQcdspR//sERv3byaEM5IGo3fxEzuIa6s/XSczl2xvBt105Rz6cuYKTE ++OnjUOxhJyrpbmDTay0eDh71B87E8NBr3+cDfTtfYuw3hooxEhVQ8pYIERNYmxYq +j3av/VemLZVy2NUXCGEr9odXqkCWJZnXYx9YKKdnvpqeBMj1OUbPzK/Sf2vGxT15 +9i2JPx5nngoomEVNuR4axPSPlogRaYLK9lqf6zCFp0tTN8DIGGUcmEDrnfCtrT8h +8eYbGrN6P1BWjVYCiHHEZ1a/294lvDyHFObhNk5gr1dFGos4BUIw80VhVEUQypL+ +rlkNcOzrOnv8ewfi3KfXPoHrB3g8d7Gb9/a9UHcsMcNej0645rNgFAUfKvNFGlHy +8MxA3O+V5j8ovMxm9K0kaqFNEyJb8yhzR+Bg2g== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0NzEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDcxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAItK +ewWsAkCc5tR7thbKHuiFa1zUOm3sYZRBhLoYdIlzkdsp3xs+10znYnCULkjPVw4p +wiiPQzFVK6sz7yKOesMbpDK5opf2r4hpbl0jDjPwTE+PVnJK8HiK7TcXg2fOSs78 +GcM8Due3E88PGqIa+GVm7j/4N+nz3olsBLsxHIEChOJAAOXKP9Tu546VnWwERBWY +HfEPTkWrXzXgZ6+49YhCjxiTxSkyKzoEoWsj3oNK9Y96jT1WXB2Iug5DCt+Lc7yD +q584vKphjknHRLI2B6qva1E/cv4Kqkxsr2UWt/jxCcdjFY4ctnNj8eFHhtlkEpkD +mxuT1Bg/8Q9TiGHm13+eTn0mzxS89yF6l8aF5WVLUWcZN/rcDQCqQB9mB/ssEKAT +WIvR6J8UoILCVrd+kMUSQyz5QmExNYKq518yalst87F98DFIKmS+/QNUPE0vldCG +crT7u/ix6a9NI7oo+ZQK1A7GrAeita/YGde5EsD0t++coINSZlpkcBsI1KUmJyca +sjfNybjIzuE/GxEjRJ60dE8BiN8ZoducVVLc4KjHDyYuymCzfCDBEEvOnfkM4DLs +OkEa8Df7La5AeFXm1Zn6J/hnknLZ6bkdJOlSPZ2aZ/nu7OL7sN/+O+8olD8Nds7B +laJYRmFgSOpFZEnyktoQoEhozlechPn8ae21uGRfAgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFD5DyaUYi8j0B0ELhxJdkecxhcyeMB8GA1UdIwQY +MBaAFD5DyaUYi8j0B0ELhxJdkecxhcyeMA0GCSqGSIb3DQEBBQUAA4ICAQBun+ep +u42otPKrUVX3W7jOxGR+3AReHZtjTgznJyTxzpeOg4V69hEoFRGMO5SD0RyxiyNQ +OTm6gpigivwK4fNuXX2/5LedkPmokOkMwZ9lcyx5rJ9FFRDHPXVjtKOCZBoJIqox +igO7T5xbdEQfC68h2YX2udMzV1qNbYyPbS1rgxv8AzuzrpiVhJ5VxMC4mSophlNX +04K9JWrgcWKaIIZGDJGrJCAkyNm1z37+5g4+YoPW/VbEipNf64lXFhgLwbA0OSBP +hTt8imQRPtGcezw6z5g7ak7nxhS/PwtFwNFHJwem7MgixcCeZN0ySlQuUyVPiwE+ +aREYkPv3QTF7AfL0bucO6mvq78OU/UsTtcV8pCWGONoWLAOh8ysnny3R7fzmYixS +yC0baR/tDJWjONtg4/kTrCcfokETEM/NBN3cvIjLxg7o+ryhJOLjYk1HLMO5mf3R +IPRGVZiukm7iTLofy6PrAgIjQcYVDWPGft3v8hChuk23ofWoC6UytjvH/UcpoTjA +YZmd9j7a8yl92Il16AbwFIZSKAWQNZo+c9UoxiNxoNV3InYGt8nbZWD/H/ALAACl +YLIvAE0SxpDDlVFIyzNJ9oEgF862DtJhTdMLWKOVZMyM4BMypqSc5SNhcntAnSkA +n5jHUwcg7nvYvG4i3qZhG0gB62NWREckCyc2Qg== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0ODEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDgxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIdW +yXaDQGHV5NctURzR++l70R4Yk9jk3BbXHfIS6voJWQRhUNTbdCC3OBRUWWzXmP5n +VJmtrja3Y1WWb+7smtlFRI9uzV+Z1ZJ8CKUxvxosqssue+tRzEpvbF63556er6/T +rG6KR58U5NrESb2/vbeFELC7GB4h4+TZGsyxgr+XFPLCkwWHPpCg/hyBwD3AgtG4 +Y7qgLMrf+6c/DDWN3ka7qrIiwX98tEfLwzDZT+nE+xSb18A0doBLQcEAxQ+q+N6+ +5r1bIlURgUp9xH1LWG4uNzFc9KPFxMWGOYWduzQVuYXW9CadRRoAbVmhTDflGgIw +G+7PE+X0B0bL1MqcVXtMg3npoET8cZJdCltrthDlEkpfQkQQXsSTpLfZUnJ6XLFq +mIpieNXCSv3L0qKLJDd4PziD0l39fhTSZ+1V9ELjD28olhVS9kymup2aEMnE0Z33 +UAWsE2/5fW7Jg+D9YfEYlnLNofLOtPlbBDyH+PNW4bmnu2D/4h8hm/hLD1TetcfN +Wm14odm+cYMO6Zn3uQ89ik3ogWOi/YI2aDH+zZwCuzLBAt4duWNDWBCpbB848uyp +jiyjgAplMMIRyDlOTAYhIuBFeIY3O27iMEMNO+rjgG7H9Spr7JPHezw6V7wpuuyC +blT8KXboloqtnW6S+xWe0PXaCkLp1QJ6qqkYQecLAgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFCIjcwIG+s2p9QgHvOQSx1ER6MdCMB8GA1UdIwQY +MBaAFCIjcwIG+s2p9QgHvOQSx1ER6MdCMA0GCSqGSIb3DQEBBQUAA4ICAQAocikf +qBXBsOmtFkYi7sPVZKu9/epat8GhfK2wfI6cW8L3hSgPUfqn/CLLYghysqv6Wobs +7QMEVrEHc2caLerVM9FFD7c/k9xUecnvDk99ZjlZu8jH0Ix14eVQ+OEtnzL8FOMc +Y75tiJP+Tntohoe8dREHMc+kVl59v8P9zjSlcZxQV3qoB7Ka5zIFsShUU0kX9R4g +P56v23WLT3PPRtysT9aBMD4nXUMVuSI7B7pSyVcEaRFL70POf2a+h1EjfFXcwiWy +a8QtlKfBtYsMSd7q050ezFiCvHqpZriQsjYmpA5j0Sk9XDc9ds/eGqum2I6Gogpz +ZzLIdTK+xTBhD4PZJC/+tRiitQqGxgSFJCxjU77Q34tNgMFB2eTOZjMfXAEnJoYm +sUSLyIsLEjviysN2jtiLLYxyJ6TYvUlcah23cQqzpznfaXhLnB0cCaChwEbXdobG +aVaz+h8hvXTNs+5BGK0cv/xI62rwASM10tZsnPWEQcrZxpKbymF35BWYMD0+4Kkq +qK5v8SedwQ2k64lqho6su2yYm5H67JpWPtFOCH9W29pmOhQtxzdXRvMDnQvhwutO +i4AOreB+HufK/enbw02UsHw2X+O5TAops3RKQgz0tNfILULMo98mkWu+q9jY6pYp +zJGumKQvEkuv/4y0PkKE/6HF8TkTpPY9oOHvUQ== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRowGAYDVQQDExFUZXN0 +Um9vdENBSW1wb3J0OTEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rlc3QxCzAJBgNV +BAYTAkRFMB4XDTEzMDEwMTAwMDAwMFoXDTE1MTIzMTIzNTk1OVowRTEaMBgGA1UE +AxMRVGVzdFJvb3RDQUltcG9ydDkxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0 +MQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ0b +CPJgxOJ17zNoY2zMbUQmOjOletFEs8PdN6mg470pb8oYQH3m5+wWpBu77BR1JEj3 +oD3gmHIaylmGM+8/dPwO8VUth8G0Xw4FoHouBi3M8d+xdiof64epVExuwS4154E7 +tg1kulUSjOwtsXe/3kWXhAjAVBPr5wEp70Vj0JDvaWt9rgED3LtYTefyD4MVrcEF +qaptQU666ZlE25uH/4nYa1tnwoq4zWigdBDY+iId8HoQ17qZ70Qr1l8B7m9BYkdy +QCubw2YnGGZ9a7/e5plBwSiADUhofPly9NHDLXRcuowciE+voXTrCSFcPbqUZiFh +YwLYXQCZ9MCUhkY1hA+MKQI4KjvBTHOpbqZwBYXJxoWqAhi+eOaEoDvdaet3uXWG +HRjTeCgYd1fAA+ZjmPucniw/Nzc127l9JaRTDTlkgNydeeyg4vF+rQGb2fegMunF +FK7wh34uLbagGlm8eX1ukqQlDruUM6LcuODaNz32bGVDmeU/ENZrp68EuNx+5grL +lehZRggiJWPLYBURkbWCqWF7ISAp+3Ae7ff4mDWFtwULobbtm+nfZVu6N9vLg7Lh +yHmg2rKBmUtro/IHhS6inUbW/6laf1UvEJjlvSLjUKtQZjJhY5FkBNA+boflGV3Y +1kt2t0iZbgIWqvexaymQfjyWQV4yZzJpaYgxtpibAgMBAAGjUzBRMA8GA1UdEwQI +MAYBAQECAQAwHQYDVR0OBBYEFAj00Uzn/WLI52VaLs4NxVrMKjyyMB8GA1UdIwQY +MBaAFAj00Uzn/WLI52VaLs4NxVrMKjyyMA0GCSqGSIb3DQEBBQUAA4ICAQBeIHy6 +8L6oC7p6PYocsnzhLbtGfWTzR16oHxPWhg7MMxEe/i2LA+2OJJWdQU3TUJMtmZFn +Us8MIWW+wm4LWxPPBFy94S4z+SDffQKgQjsDj+c3eXS9t2z8AQWSQb0AkFNi/aW+ +SJyS/0gPiBj+eMMNVKIVFw+agNrh2zT2KdbLp/oyMX/QjNoWMcNaJMOp4PEmwG/D +eGQsUsEAFSlGqdYJWpklPyfVAoWVD+RHuP8zOuD2+fihRyWMATWj84UcdLw+q1Lh +GnxROMOx5uZN0kKm3Z5pMXVd7tvJYcXPWdyTdpYCm1rMT+Jp7aErHLbXVtYpRt0W +rVHkVqphN4EUSTPN+rGvdHN3axQq5bwMmVcsO44rPMlBoVU0Ofgfwi1AU86FgWa+ +U9cgD8VuHlCr6NkjO42OCzrqpe+Fi8/cn+J46R8Onk9y+09OkiPc5NCq3kDAubfS +zN5tdPu+hcRX4MmRQVhIijL9QMrWQGnWJZBMhWl9NbaR9A/S1EIcLPPzFY5i5QPs +bBdP1xJoZ11cX1AGGK2g/0l/XclFhk1KgD3BZycr1+Gopxnyhi/TGuV3F+aHbfn1 +D09JglRYbMz0njlDWr2X6be32sNwhsPfYHKSN0CnlSE9LAQNzeX1wJiqVo110b22 ++N7OUol91HqrTfd8v8nx7l3utnV9Qr8ewP9Ulw== +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBGMRswGQYDVQQDExJUZXN0 +Um9vdENBSW1wb3J0MTAxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0MQswCQYD +VQQGEwJERTAeFw0xMzAxMDEwMDAwMDBaFw0xNTEyMzEyMzU5NTlaMEYxGzAZBgNV +BAMTElRlc3RSb290Q0FJbXBvcnQxMDEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rl +c3QxCzAJBgNVBAYTAkRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +lESjnWYAc62jUH5p+i+8UF7hvzB/zi8s4eQHY5lUqz94zd9FQV6zKMBlX3NtY7B2 +jUwncB7pxpl9XK9sGMQpRP4jrLm0Q/6/9qSY+BZubaYJOxVcm5a/rNslyU8meIRx +scK8bzJy9ayUpxJwRlbRFP5jf/LDTJgR8l82paleNhAv5xtgc2ynbdrNMdYhlixy +qRMA2GNiwFLXCz1pv5UI0587oSwmhqqPQYWC+63/ENpokize37UZf6VaMJko6mcK +3VURK0MA4pRFaAz/nkN92GsspdKmYBAmbWXQQHX5qCowqrdorbthIOcYNJpz/0rF +GCNz1KzC1f2bsiDIgEhjd8PxE40Xcb9+fc6VXre4ndwQh9F6V8suAw1duDj49oUw +sRsOraGsS4Wbs8hhcJ6BSBPhPzQCBwqzLusOl+Hhi+juuCiT7hJhcqaxkd0Y90nd +jvis4TzcnDIgcYJiQFg+/a1TRBQofn2iHmXuu70AbHhiJWeeQc/sHY65HOTPM0Aq +ez9IQvFfjjZOoYpMytsXt/X9zySwI8EvV1+DO9meN3kzgtgkKtDGcyENjM//QQoL +PnQDRguKrrYDRg4yIyj6+HnUtG6OknjVoXkVp8Rrk9f5REKMCtXffl7eBzeHqNT8 +0XfLxaj6q/6tYRzmLTjJmfOfQG+Wd+I0INscG5jlEBECAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBADAdBgNVHQ4EFgQUq55anfrfgcQd6KWBGS2IqmpscqEwHwYDVR0j +BBgwFoAUq55anfrfgcQd6KWBGS2IqmpscqEwDQYJKoZIhvcNAQEFBQADggIBAGBL +rSWXtIkjz2SiMJTc6mW7ws3RAElfL478NOS3W06XCrgwMUkOWJWt/g+wMn42F/IR +ha7ukucZfo9qYvB3VIGQINj8GA5B9nznoN8P6mX8mos0TwA2l6xCiJ1PZHNdnB8n +Q1FFVAeN4Qd7F9VXE/bKgeoDn8GeeFyuK+a9tlQf/LJlW3Z268CA5XT2SaCWvrTm +3nYgj7wr6qMCsTMsctxPbkYPczDuinlXMsGfWrlFNO/BQ5iVHb5+AUlJH0sXdLb0 +2pTkoDrQJKi9vmKpsnldcelT/m3sisAdWCYcmoRjvkTeiAYqDyWGZIwUmUBcRBBb +TE+IFlvs1OnIIK+JhxzsVjwYGAWrd7PCMqs9ExPPD2W64+IKXB8Yg/eFcSy7YMir +nawUE0iaKhZQDcIEdFzzyG2b7s6+fPOGqSTavwQUpmcIlPWC6F+S/rOZiZyTe3Wi +2yN1jKGnJyZZcJ5UWT4Hc65un69thzSvbMsMFMr2BF1mv4qPfmCnqzP1BifZuDNV +3OX2tqH2YdMzKiNDVo4PCP3/MeJi6oJgdhc4LlJCR5ZRrFXx6cQ4sIIgQfhGQj/3 +LfO2ZXIs517Dz2ZgSTtqkwGfPrlcDNqa9/7H/cIBOaxISElBJi9fiN3pmyO64xJU +2+g4lFcfYlzwphv1hcj/6f6eF4LrCYN3enc2Oz05 +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBGMRswGQYDVQQDExJUZXN0 +Um9vdENBSW1wb3J0MTExGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0MQswCQYD +VQQGEwJERTAeFw0xMzAxMDEwMDAwMDBaFw0xNTEyMzEyMzU5NTlaMEYxGzAZBgNV +BAMTElRlc3RSb290Q0FJbXBvcnQxMTEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rl +c3QxCzAJBgNVBAYTAkRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +l5LHIobEhW6fuDyr9dTWS9A/WZxKDMgN9mpJMrvMrNAJMx45syRSPzVBPmtHPcdp +SwZn4cOO5xYsphAVi+jY477+0YnVFFP3373wIgDaMmddnStOJVR2t2jyyxXzUyPO +BHh8jg5pzI3szCpvvLJnhuBDQwvaDsuNwglABzCBafhlWq91gyneKeSXXQDwppyH +KSG8WH/RX33UV64jrF0ynNWqRJYg6OewCS8zB0JHduqw1Mtw4DzhX8OKVSSkUK+B +gH33le3Cxl9c3dbnYWyTL3dux/4YXXRViz1F197PaJMhY62qfODxPybRgq7Wx0wi +w/ml+s9vz8nsVfZlyMOjHTtJcuvPZwHHb5cNmPAX/qd1BV8pfQPdlDxceLCiky3S +LijueFAmlUPOfN3ooU5znm1rCKkFGDNsOBLz/QWkBxLgXoE+RAMO0pP2LtfGju41 +n9g2XYiJ9e5y1fO66Rs3DZYK1cTM8lvciknj5GEq5aIiTjRSzkt2B06DquRzQpLX +Voo+zHDdlAQN/28RvXLcprotv8FvjOCUzzjMtAWb1nSzvw9FmzWqwCzrgOFLM8kB +HK/rBnu5uA9E7261eCS7hJIoZdw5ZmqTrVzfzeRuL8VAppmmxiSN1Amrh1KjsRwQ +zCQBc0Rrz9GXJJ6mmNv012e/ayFO3QSA0q8+0jC/WEkCAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBADAdBgNVHQ4EFgQUmi/GbE++zoGKDwqz8dQMWxH7tUYwHwYDVR0j +BBgwFoAUmi/GbE++zoGKDwqz8dQMWxH7tUYwDQYJKoZIhvcNAQEFBQADggIBAFmu +bN0wXzgOuDoa2repwPIP74WaiEaMLFCdHYBxOh+wBawqnrrTIhVtfbKnj3cBJXFu +eSWWcH1Re0fFvj6YvUo+NUJQ+2XJ9jYEM01pje4jW5VVdptzss4zeP+XXBPowIC4 +mX1ogOM/gZGN5fO9JhrRtKM/HUzns2+jlSSpian8BaIE2E3x89oNLjQJkj4sB2T8 +g0Z/e/L+3C+AKQhpSeKZEvphdGUfBMkrJrf2CioQJdH3JoCFT+JH4HXD2D1R9fwY +TuQGPrmP9rksHXfM7fXS6Kw9wjc9YijWHuaRdvAlcyinIVwLlvjX61T4EeefeQAq +yHq73mRX6RNIYlDo5/3zYAUxUhMV0ZU9wLfnRecAHGIZ2HMJn/gZFZqnBkWfrvcc +MxymaGv/vmRSb7NhuJpSqwLPWpM8EconNZu4ZoTQOMQUX8F2mtFOZ3r1x1GMqjjX +RAxiFz4sRjKKlAJs9H0ZgZUt63V6CEv0OGuTwzdTg1QH/JPPxeNBtBkb8kKXYP8u +uxvORzZOWWKHeHgvE3Dg0FzxaN2q03UG4UTX0wP5SMg2+urjZWZHkYpbz1FFum9B +P/w4k2qcEm9lMWEcqfzLpg3IGzHG1jPRjl+hYSCgioejBuFM1HWhREoRa9rVeLbi +IFSwpQprZ2/zfqd0FM9cJ55Elv2wNyYTj7Sv4+DA +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBGMRswGQYDVQQDExJUZXN0 +Um9vdENBSW1wb3J0MTIxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0MQswCQYD +VQQGEwJERTAeFw0xMzAxMDEwMDAwMDBaFw0xNTEyMzEyMzU5NTlaMEYxGzAZBgNV +BAMTElRlc3RSb290Q0FJbXBvcnQxMjEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rl +c3QxCzAJBgNVBAYTAkRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +lHZ4Ptyckn6UeeIgOfpiH7hUebo8KbUIYzt8D32ySeNzw+m3GiQMsA3/P2LQGXjr +TKdz2kVE3uIZ27QXYcfz/wIazU0rz8/dG4eAtz1HZ78Xqy3xXWbzjVu8rmpXJzDv +45+zhoX552UUym0mVD5tabF00nQkZEaV3ivicj1yk7w9wcmz1BPRnmXQYy03sOYY +GShX6UH53Vm+iVxV7G2AKgBhDv8gWreaPAvfkdetLihn/0qrDuEPbGQo9o0Oavhc +k9wKGkSShdokx7yblJqZn9hly5V1rryQLpklBxwDrA0jl3P3NGKH8yVN7C+u5fyS +CPEHV3FGHXJr1ndzI3gKYw768nJ/ZwzyDu48Rwc7IK6hBU1kh2Eo2uKSQZgqJCME +ukY42xPxgh7SWH05RgPBRVm1n4sgQDdU/oHnD8GRCP7VVu5kiFgAQlP2v8Nhwmgf +m+RvDHT+HgUcjOdVRGfdKB8K7jie7s/0Zat2Zr/jcgGa904xSWNS6f6HUceebAH8 +kIkAwp7Sd9WWFfdBqRzXHexdUwDON1eeRgZwpuGwz2XM1BVtM9+vX5RBSGrUE3H6 +rZ7WXf/uWT0F7tvfGElddXAYWHQKs4PyzCcEErLjpvYoznTbgX3fSKzoK/s4VS1i +0ghp8j+31M/SDlAQmnAwKj6ZQBbp+8vPVHaTQnPu0aECAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBADAdBgNVHQ4EFgQU61AgJYUdfG7VIWjPjf3LZx7HvEUwHwYDVR0j +BBgwFoAU61AgJYUdfG7VIWjPjf3LZx7HvEUwDQYJKoZIhvcNAQEFBQADggIBAGaQ +wF6CAjS+XgyKmZAyw/38BWNcSkFHNpqrZJLGFymapMrxo0u4/r94MrywG4Waa4RP +QCUUeSO6iWGm2WIwIJ3RqMR0EmKAbSmp6hrodcYOHL6Hi7ha7f1AqV4o1mh5RV1b +9NaHV145RNUkwtVIRqMpK/X7m7Hx/5xu5yPt3zDX8OYK9Xvi+fLguI2auDx36QLU +Iku2ytnf8ybJmYuwJQW7ZTtXlAyjIpDEazhnQ9/iQiQHCidKZXemcmgpE6iKSEPm +iz6fCntbNbAbeXjk7hVzfQ2Oy0w0VV+hlLZOMa+2PDP+uB1MQKqq9SNq5B9ubALt +g/LHZnR+9Nxq6ZUStZZjamaas15Y7/WdKzwn/5y4xtE2T80PcxUCg4Cl6HC2T8hS +xatQ8S4WdXM/w28g69TxCNFA1bvO3LTQCRsoEKOBNxxGb1SsPuz2wldCsbi/yVLr +d2LLR6MTwqkpobM3vPBfd7TTF08wBOugt2JmLbttzUr7nWanm9N+zAm66t/pdRUD +rG7fbCfo0JL4K2L3Tquzk9OIoDrjlKLCyBCzuD6QlgGVHkhI2uoo2V3DW4h22j1u +z40a+WpYHZtql2vSfG54QTV5kE3fyWuXcWwu7MnHTqlokT6ptVP2KXZbPtj7702i +F0bdUbs6EaH59xaeLpO4zcp5XMuLYgPWn4LcqC+A +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBGMRswGQYDVQQDExJUZXN0 +Um9vdENBSW1wb3J0MTMxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0MQswCQYD +VQQGEwJERTAeFw0xMzAxMDEwMDAwMDBaFw0xNTEyMzEyMzU5NTlaMEYxGzAZBgNV +BAMTElRlc3RSb290Q0FJbXBvcnQxMzEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rl +c3QxCzAJBgNVBAYTAkRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +gMuPsx4qLNZ6HXOm2DqWnm5a6SJ3Cvm4sunGFKeLkyQFFn5SgSDkjVIEyXMDHj8J +vtRWzKnoOVcOCN/687xHmE7hpj8VLws/itqaughkdNxAsX5sWmtKvjRcrbnEpE8j ++UbxleKoaValyT3LAuLBkMfzc5nN06RVng1v+ZIODWA4CIsDyQQZIKRwrGc4nRjr +zbSCj+z1YXRo37+qn9BlahdNJEaoipx4lNTe96U8gdqsVbB6u7VnDPUewLpLLwmd +1z2R1frPYmYGtzT8QvGJhTjZ/m9RXzgMIWFEehev3nuOPSlSROyVGWvzXQFFjseA +PYxQHCJ1HVhdX/IwazGjLP2inQK/Iz8vr7Jg4eIRguM3tDXWb3phxu7yaTUl9LVi +kBBbwHqaLJw6+BYKttYSm9qtFbOpRvMZsrgV59s8+jl13W8t+AhrZGQnleuJv5/N +H3UzmwdAt+58JxYQLFwkDYK/jOpkpQofgwCFT2a4XsoMAhr7Z5qFZOGQV0LGyy4P +ca3y6VfoR+FZI7hKBka7pHb+LmSk3PIK5cAXFFsXEfE/yMAbvcbDmp5Sz3r9IDz+ +8FDuGIvCDkYgcx19CrFkX6vtnkT/VtlXAFcNM25r3A8FK0xn9gLBFpVxyGxFNttE +lBPps+SPJrhmptcihAGJeD1CMgkMMfb3qkFrfgwAY7cCAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBADAdBgNVHQ4EFgQUsk1FfmId9B/AUyVmlzxhG/JDxoowHwYDVR0j +BBgwFoAUsk1FfmId9B/AUyVmlzxhG/JDxoowDQYJKoZIhvcNAQEFBQADggIBAAqw +W19S0YLk01nTOpIrByjV24NfIup1KAZD3HhTTigln0s5qDyCCO+0+7z2woBOHchu +c1mVht8E7eI9cPkTRrWu7y4D7yekvArfx08ulW3xyc2k03h4/2bRNeCO7tBeZsc4 +tOUT8em4z+CkDajYlv02MuW2ADpezvdYFtDjH/qQjHDQeXwlHW015KUlafowPyfG +qwlCZEopoBVDH1jgfYXK9HhXdGgpxqUazX3eCxjynXDUK00RLd8NSVeHV1kgrzR9 +0wUH2QFbnPb/cVNp9DHECWSYKyQ8hoEJiiSPJCbIUy6kZ7R1YMvjt/0OTzYjkRb0 +JZ4u/Om90XxPcUyPoBl00z+rdPr/h+GRyJP1jQ4EkZL7VNe9BqeQvj1SsKiivwZs +UswfC90oxtb3KU4+7VrVCvsn/V3l9LCDzEEGOsasRhGDL7a58UyUCk2eul8+mVaH +cyO5RtGn9QzFzwSNwIFf/kPdyxOBDSn4+DKDgU+ijOC+zKuIrZrK61krEMsy+oEz +RIfmthGteck4UIOkDKF5iydWL6kl8J7AISKCW5rHZQC0WV9HylQKn/FZbHVfbkfX +669cRLxMb+QWYRCftzeNCPhKolW16SbArXWu6Fk88I3uru3un0DUbqXgwBQ6JEqn +PGvajyustxo/lN2i1rxN4/seVwqt0UmbmZ7z3aHG +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBGMRswGQYDVQQDExJUZXN0 +Um9vdENBSW1wb3J0MTQxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0MQswCQYD +VQQGEwJERTAeFw0xMzAxMDEwMDAwMDBaFw0xNTEyMzEyMzU5NTlaMEYxGzAZBgNV +BAMTElRlc3RSb290Q0FJbXBvcnQxNDEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rl +c3QxCzAJBgNVBAYTAkRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +lTTuLbVdnvA6Jp8bnuATf5m8QicS53HrZxg6Sx9nQxLs/Y/UbPOJPnOw9mk88g74 +v2/zWZUIIZv4sy3hhQ1rEtqbrGOvrhJqqfbUX9KtTIh6U4yjec5GWcsx7arrcvl+ +M+7Pve9NP3MT4u4mcecGwTwnLBJnIvpjDXMlUuMnq1Oqibh44apEfNUCss+BqFsG +V24vCZElMSn306pwC+x+Pp0DL9cpDropurTOF7CMpHBZhXYQzkE4RfUmmauy02yb +cF9K+PImZwwjf793yqdz7VjyTEJ2U2I6g1yBdcL/29qLL192EnqCTpvheVJw6Y9G +UQYPVjoE5NkM2xLcXWQ0WZXU5fwSAx1OkIdtaU+LnPp8+8A8dRt8DdJS6cMbChKt +yS8D0GjnpqfHSrlbcKWC+pmu1gceHNhVsYsud6fOPOc+UK+NqjvxbNNkP8ArbGjO +Dcb52FfHOgB7obvOBFq1hhIEfjCHQd+CxXB+RFSMBZHJaELoWxzvEzdJ+pc2i7yG +o3IJqmd+OFSP6LMYmYtmj9t0t+F2Ip+wutZlQSAHJLL1HOqUxIwXFN2g123fk9Gt +Em0COX4fiLOmc0bf9LQnlMdFwE6pf5fLel7dJMyyDld3jSIlYNvZ6Cy4UITdmvG1 +/BuQtBpnJM4GJsKEh80w93dQmkRZfLcIc13vpiTRQ/0CAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBADAdBgNVHQ4EFgQUo66mZOP9ApJW5QBx8jygx/wIBEAwHwYDVR0j +BBgwFoAUo66mZOP9ApJW5QBx8jygx/wIBEAwDQYJKoZIhvcNAQEFBQADggIBAF8K +yIUQvAqEVr66E3bEOVuYuGVmf9HVkehYb0Dd1I0/HtyIpAYyiDTOBNiaMNtwXmM+ +WEsiAzv9VbZH5DQs9+NviN/kbA0pM/iIocVGUs6+LcTtTJfX/1mbnxL5BOuI8yHZ +nqpHZ22aAC9zH/zSOacqvWrh/wcgJIW2J49H6p+8aY/4f/4GPRKaU/TOjryEW8uO +3RMyaoOdnTXHGI68WuIBBiFPKbPoZGyGu2t7xQSS821FDbZ9cmdA0tg1jFtBvzvp +GS75sAdfcSo4yTud5EoU/j4iw4q/vQFlSJDj/1a4kN9Z7vdJDeGSpKc70w61yXa0 +UBqmA6R1waDZlUqTT2lu02rmluHSNSDoHsRGUmI9l5XaSWNPPiPHU1ZGYuqJ6O/1 +TaGLHKqAt391CYoomhUsflTMwVnbzmNNhpU/t2nHY7TDAHakpJjOGLSiaC7cMpLl +Tnv33fISJhNMVi3KynTnb5D9Z5br7Jszi/zRc8y4Uj3XLhrJA+7VodxY+KpvUk2l +t3aSOMCWse1BW7Q9bcRQE9y5netPHVk4/Z2hTaeElcWziNPuTJ6dsYZ/1WZ+w4ZE +yhkBGM1M1JkpYVixMbfCb1f+XYITby0M0K/s6KQE5LUkCHCKD8DfS05bcSvcuu8L +KK0BvplTmeVpslHPcSKuw8N9tbonp847iil3IQRS +-----END CERTIFICATE----- +R:-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBGMRswGQYDVQQDExJUZXN0 +Um9vdENBSW1wb3J0MTUxGjAYBgNVBAoTEURvX05vdF9UcnVzdF9UZXN0MQswCQYD +VQQGEwJERTAeFw0xMzAxMDEwMDAwMDBaFw0xNTEyMzEyMzU5NTlaMEYxGzAZBgNV +BAMTElRlc3RSb290Q0FJbXBvcnQxNTEaMBgGA1UEChMRRG9fTm90X1RydXN0X1Rl +c3QxCzAJBgNVBAYTAkRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +3Bd8EWYfyQDzZuw+5KhPxvdf07BreSVyYFvfuO7OswkAgTLJJ+SULWcWV5x6Xlx/ +jHQ6bqSWfWuNqOD9XFVzlcTAwTKKv18GOaiVtiUc4ezSOcey9xsSjHowg1NVVIIh +tDYu+kX2Xf/AVnNZweMwJpVjVdjWBG2o0jjWbjO9m2b53UleT/5+EtWWnF1ynqZ2 +B/4SsnXKnSNA402PWn3t04s+6egLzNdKHJRwwWDWN89dGPvNYVRLY3cPO3hg3fB2 +7SehY96+xD02PqV4gCIrXg5M0h81Qi5uB728LprctkBxF10Pt58b9M4A26eR0jgQ +4jWYupgMzX9/EEpdeiSaFwiKFAbkSk/bgnEYMr/YNYVzk0I9+/9M+Z41fCCfTmLR +Sls/FN6NxCzjPiptOj6igybvxmJ5Cxu3pH2dC66rW0zygJyRf4Ja1yM5qgj9FaDO +CJC1gECWdSYSm037Z/zRFFHeSXZaMo3uHWZn17j8ZToW1HIzMpIKBcWszVqilbXN +KcGHE/efRUyEixPtJgxcoC7wSF/8yyuLbZvCTBeEOE7GdgLGwPHKv96qh+Jg1Nt8 +zRA0p62JcIaaO5+Da3hXgLm9TxOpSAkRApO5vGVXajbUr683Ih6X9MEEi9Xlvr98 +jwLcBVMuQOsWZMMBPzfDeXdzFC6wdvtKZ87oVx5KZpUCAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBADAdBgNVHQ4EFgQUohPgto1f8oeel0AJy3YZIO5Fw48wHwYDVR0j +BBgwFoAUohPgto1f8oeel0AJy3YZIO5Fw48wDQYJKoZIhvcNAQEFBQADggIBADge +rASVX9zZ6y9YjjOK4tS/tHMmjvH8cuINSAMipcnaD2+FU4yzmZAut/F9f5Jplh6a +5bChhIZdJ9lD9fMlmSNnpQ0/u8sZSTsMihXabMpEksyX70XFHbCgo5dvq9GqUUQN +ox6S+bt5SBFfJd+vRan1zEjuVhN5nh4Wfvnh/SZFtOZQ0GeFRlsMQeSclKo98Hdx +dzxRfra2ZHPqy5fdmVfExuCKK6axE4ngPtfah9o2QjslswodyNSJyG5HWAUAmUMa +wKVrJPyjookq+Or5ow5rEJ63flIJZs147ydVbuB2F20pbQrAZmE6ohLKvyKca1Nh +EcfqDh+QYo+HK7gBWQzkf1SZrW/mYR4ZzkGvbHoXG3Wdau6KfAXKPXTrXAwh1HxX +SLwsPl6RYeDIFE0bA3oZSaExN/evLIfnnF7FIcVaHLNaKJLwQPt72lcbgnsFdD1j +cQl0HKmDkNWHqvGLdsve4IdqqKNCIA0eGWHijSmTGdAFkbDbYnLuZvKHJmXv+Zj7 +GWuRXVsCaA0xkhmmH3+ozCh/et4QbZJmxCVlxwajN6JnQTu5Xz0y5baiIzYHX1yv +K2onKeZjntbBWSRU+lFhuVNAzZQcwlYjpHhLWwWYVGB++PblVv/O/XgkvRmT4G5K +bxAiqo+wym2S75CyWiINXPbWzMjiO8AnrWXl23+m +-----END CERTIFICATE----- diff -r c9315b24b055 -r 5f1494fab517 ui/tests/data/testdata.qrc --- a/ui/tests/data/testdata.qrc Thu Apr 10 15:57:26 2014 +0200 +++ b/ui/tests/data/testdata.qrc Thu Apr 10 16:03:23 2014 +0200 @@ -6,6 +6,11 @@ nss/cert8.db nss/key3.db nss/secmod.db + import_test.pem + valid_ssl_rsa.pem + valid_ssl_bp.pem + Intevation-Root-CA-2010.crt + Intevation-Root-CA-2010.der diff -r c9315b24b055 -r 5f1494fab517 ui/tests/data/valid_ssl_rsa.key --- a/ui/tests/data/valid_ssl_rsa.key Thu Apr 10 15:57:26 2014 +0200 +++ b/ui/tests/data/valid_ssl_rsa.key Thu Apr 10 16:03:23 2014 +0200 @@ -1,51 +1,51 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY-----