from cryptography import x509
from cryptography.hazmat.backends import default_backend
import datetime
def _get_cert_days_to_expiry(certs):
if certs is None or len(certs) == 0:
return None
if isinstance(certs, str):
certs = [certs]
max_days_left = float("-inf")
try:
for cert_str in certs:
cert_str = cert_str.encode("utf-8").decode("unicode_escape")
cert_str = cert_str.strip()
cert_bytes = cert_str.encode("utf-8")
cert = x509.load_pem_x509_certificate(cert_bytes, default_backend())
now = datetime.datetime.utcnow()
expiry_date = cert.not_valid_after or now
days_left = (expiry_date - now).days
print("Cert days to expire:", days_left)
max_days_left = max(max_days_left, days_left)
return max(max_days_left, 0)
except Exception as e:
print("Failed to process certs expiry", e)
print("Hello World !!")
certs = ['-----BEGIN CERTIFICATE-----\\nMIICrjCCAZagAwIBAQIQSmL0k6T+QxW6tRTW+T/dFTANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhhY21lLmNvbTAeFw0yMTA4MDkxNDQzMzFaFw0zMTA4MDkxNDQzMzFaMBMxETAPBgNVBAMTCGFjbWUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAosK5KorXh8jl4CVL4O/4Wd0qeH5ZUX+4e3Pbo+VuuQtUAr26qXvzNLEL5x0cSFlO5rzji1ODpgFjlahD3d9J8lo9MPZgt2JJaeYEazYk/e6nSuO36hITfHhR04Wcb+d0M1ygZSRgB7SEf/bijaX10V7uu3V0sm1WCqCXUPkRb0MqcFFvjobRKOA4qblBXVMu/Sx4jpinTlPwu5iE2KXljqAZRckuU0bNgwINFu8sd0+mBlR8GPB93wZ2zLTmu/1oozPaxzJIZkqxqdojIfVhwCD0AOI6ut6lHpEc3tqJJRSk2cZ8h1n5qUjMZ757WaOmfFD21H786DXNO4/1BC6+XQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQATPSIXhtgPo9Cxg1GOtIOfz3ebG0MVD1U1UMd0dgAD9lnTRN43lEFiaaDnMcbHowRLEENdq99VqTajZZ0EZhjgV3bK8UX/tgCJbtcD0fry9PMY+bBV5Y5Hswn0v1VI/qLYGKkRCn2jap/pLEQZvF4Xk7KuCpFg2TYGwmnkBVHNt1TgxbWe6M9b8g8wvmlHmCwZC1WJhRFkIt4m51bHxeeLC1wxbO4oTMqFp+aLSGAAYC0qoHCeR88leoDIGdqhuZaffVijvX2/F8j7VVO3343rcPnJ7gFVmXMJZ5Q3VKio7YpMjfSSJdtWnPskkoN0vTZ9cfjDLMhSggeCEXrqrKdV\\n-----END CERTIFICATE-----\\n', '-----BEGIN CERTIFICATE-----\\nMIICrzCCAZegAwIBAQIRAKBfxsNg/kZkjST9PNss8ncwDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAxMIYWNtZS5jb20wHhcNMjEwNzEyMTU1MzQzWhcNMzEwNzEyMTU1MzQzWjATMREwDwYDVQQDEwhhY21lLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIXqnOOPpxaDCbvUWmq4XAxufs6wplBQ5WuDOt6Q6nAFM4SE6YGBw91tzO9Mi8U+n2dtE4fFQ/lLPIvPErS3YYX9qmTVzMBNv49yDYWIQYc9xPZ9D3pGzZYdAFrdrxYquvZlmfCjRsTrY7iyWOfznyF5PrRYW/oRqTsG8INaqkJKPr/ZSEMVskeIGykgcvFU/a4q+LYBNWfkoZtP2UsLCR01a8j1dx6fwikFhjGMGJAjCjqWfh4x3BXuAodmcuRo2wVWyeSAGfV9GHk1L4MBi42/MEl8Cd40HNfgbUnVoKzwbKUyzpiB/Rr4AULW5k5Z0R0hHz9Ml+EqrRc6NepTSEkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAZhDy+KN4/RIdivHO4C6utIJaacne5sreR/J55r7dzr75fP3gFCgD5Jb1Jq71OaWiQmtlhbb/N9Vu7DtcAhVG02QtBu/xN/zYm1bgXNydY979WhmqJaglE1/+jIWgx0NgVSGUXLid+Bi6Fm76Z8o5P50EJYjUZtt/7xr83Sg29wEjofL8POs5UeLPET0jWY0F3RrDxshWcN7ierJQMfRaxlTabPVnsLDRQOHWM+JN1btwMAuRrINcefrmoLshwtyIQskCAjyrDsHxYnXVSWLRIpITy4LGHhxbqrAeN1O/O/2j9wmanY5eiWOfClKwRggoK/QEPTZ4H2f29Oq2nAz/GQ==\\n-----END CERTIFICATE-----\\n', '-----BEGIN CERTIFICATE-----\\nMIICrjCCAZagAwIBAQIQTeMlbfSLQwSkHjKDQIk9ZTANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhhY21lLmNvbTAeFw0yMTA3MTIxNTM3NDRaFw0zMTA3MTIxNTM3NDRaMBMxETAPBgNVBAMTCGFjbWUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn1BeZ/EH0lINknB+lzpU6dATRcWacfvqdMZWPUvDFPLRlSsFXex+UcLmeflvsbIRZO/WY9OUdClLFjoJMz9TR3BGCRVda/il00JQULD/3p5yrLqIZZaw7LWNUBig2thDE8HVwr1EXriS83g2fP6UFlFaTyt09vk9/sQi48yukBBL/+NFtc9IDmt5WXYZS+9OIj4MhtQ5QEj0ql04RGOv3VnentQ9P47dCic+sjvHA4EIv1Kr84EaUafNXyKKXWrqFxN2ngI5sgJQHWQEWKGewiim9X1leIcnaKtyLF3SXN+JyRnYXHZK9dmr6TlsyjOrlciGNHbX7H90jj8YXxX2+wIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBYLq1TPVGx0xzdngsdAeuGewBojtnOXJjMzLa4xsaMS/+8pPlyD9HXFqIDDE13S98kN7yIAIZvD6GnLyagmAZZ7ghYz6WiD8hoj0dhICmQnchrcqsMEdc+hScLHx0MDot7mVPCUYNsZqttT+3WiNgZ1fCD7t4tQ9FphnEuy+FALVplV1932yoqDaZuDaCBUMiN2B8S5vFjryoJXIrFkvqGcQIxxAy0wbkF29yje0Xbcj9liKrO4aBkN3xlGyZ856hunpsjiPR3yZ+gAXzX6eeVibr6ojtPNDMAjByfc1E6Jl/vrPNv57ikLoNo9C7ZJe4UFLeDIK98W6+KnYtR2Mxf\\n-----END CERTIFICATE-----\\n']
certs_1 = ['-----BEGIN CERTIFICATE-----\\nMIIDDDCCAfSgAwIBAgIUOQgbm9XyHgfoRre9oTbe8Pl+WaAwDQYJKoZIhvcNAQEL\\nBQAwNjEVMBMGA1UECgwMRHVvIFNlY3VyaXR5MR0wGwYDVQQDDBRESUwxVUVBS0lK\\nNk5VT0JBRDRZSTAgFw0yNDAyMjIxNTI0MDVaGA85OTk5MTIzMTIzNTk1OVowNjEV\\nMBMGA1UECgwMRHVvIFNlY3VyaXR5MR0wGwYDVQQDDBRESUwxVUVBS0lKNk5VT0JB\\nRDRZSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPRuQpxUtd/3s+vm\\neVHUrjqguHVApB+HuW/enHfvYkNrgUOdlU48qEXOrtLxl0QKfouWVi5PbLoCdWVz\\nZqP1hqx2wMKttgqd0EXDTPRkr5cEKDRnN0/o44bPWJ5S6wdFI0sSPeBgOb57G69L\\nPDsiVWLQdI6w/9cFCZlQwho82i62QfRzKz6D8dsO6BGxI0AZIPDp8xcy8sjxZrDh\\nzogSnBlVuQmbjwrOTL5JdJhKYJ7yZYSdbE9L9mphJynaut4IhK3ETkdXhtYTybIe\\nTS0wb+eQ4YdOT9hzn6NA/sGTUT/nBX/WpdDOO1JKW9zqIWpt/DFqakD/hNVjS+E9\\nJo6OVrcCAwEAAaMQMA4wDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAQEA\\nNaTJtFiPK1C0DjSvi1UF4BLbFgqHwZ/gMh9w6CnoLC5WdPiBIfJ+qWRYyXmm/miG\\nnbYgbxpiLBLyZKobCyLyzzwfhH5u84LxSQgLnXTlGxctZL2X5tVog/TQ9f1DvFa3\\nUo7RjyM157C2ikSB9Zt1isIBa4kcsLalDmX8vuKxvp+U0Y3jNwtEltpZM9+ySSPV\\ndN7m+4hp/dzXujoYh04VVFdQ+TjXygJB8g3YxScoGY0upBtzsepgts62yn1rh2gA\\n97A385u5VVu1AXT8NCfe8QbqkqfacpnP6sNHNPrw2ce3Glp870ST3ct2gEHHsz3K\\npruAuUenmCxeUXnCYLtDzQ==\\n-----END CERTIFICATE-----\\n']
# print("certs : ", certs)
# certs = ['-----BEGIN CERTIFICATE-----\\nMIICrjCCAZagAwIBAQIQSmL0k6T+QxW6tRTW+T/dFTANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhhY21lLmNvbTAeFw0yMTA4MDkxNDQzMzFaFw0zMTA4MDkxNDQzMzFaMBMxETAPBgNVBAMTCGFjbWUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAosK5KorXh8jl4CVL4O/4Wd0qeH5ZUX+4e3Pbo+VuuQtUAr26qXvzNLEL5x0cSFlO5rzji1ODpgFjlahD3d9J8lo9MPZgt2JJaeYEazYk/e6nSuO36hITfHhR04Wcb+d0M1ygZSRgB7SEf/bijaX10V7uu3V0sm1WCqCXUPkRb0MqcFFvjobRKOA4qblBXVMu/Sx4jpinTlPwu5iE2KXljqAZRckuU0bNgwINFu8sd0+mBlR8GPB93wZ2zLTmu/1oozPaxzJIZkqxqdojIfVhwCD0AOI6ut6lHpEc3tqJJRSk2cZ8h1n5qUjMZ757WaOmfFD21H786DXNO4/1BC6+XQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQATPSIXhtgPo9Cxg1GOtIOfz3ebG0MVD1U1UMd0dgAD9lnTRN43lEFiaaDnMcbHowRLEENdq99VqTajZZ0EZhjgV3bK8UX/tgCJbtcD0fry9PMY+bBV5Y5Hswn0v1VI/qLYGKkRCn2jap/pLEQZvF4Xk7KuCpFg2TYGwmnkBVHNt1TgxbWe6M9b8g8wvmlHmCwZC1WJhRFkIt4m51bHxeeLC1wxbO4oTMqFp+aLSGAAYC0qoHCeR88leoDIGdqhuZaffVijvX2/F8j7VVO3343rcPnJ7gFVmXMJZ5Q3VKio7YpMjfSSJdtWnPskkoN0vTZ9cfjDLMhSggeCEXrqrKdV\\n-----END CERTIFICATE-----\\n', '-----BEGIN CERTIFICATE-----\\nMIICrzCCAZegAwIBAQIRAKBfxsNg/kZkjST9PNss8ncwDQYJKoZIhvcNAQELBQAwEzERMA8GA1UEAxMIYWNtZS5jb20wHhcNMjEwNzEyMTU1MzQzWhcNMzEwNzEyMTU1MzQzWjATMREwDwYDVQQDEwhhY21lLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIXqnOOPpxaDCbvUWmq4XAxufs6wplBQ5WuDOt6Q6nAFM4SE6YGBw91tzO9Mi8U+n2dtE4fFQ/lLPIvPErS3YYX9qmTVzMBNv49yDYWIQYc9xPZ9D3pGzZYdAFrdrxYquvZlmfCjRsTrY7iyWOfznyF5PrRYW/oRqTsG8INaqkJKPr/ZSEMVskeIGykgcvFU/a4q+LYBNWfkoZtP2UsLCR01a8j1dx6fwikFhjGMGJAjCjqWfh4x3BXuAodmcuRo2wVWyeSAGfV9GHk1L4MBi42/MEl8Cd40HNfgbUnVoKzwbKUyzpiB/Rr4AULW5k5Z0R0hHz9Ml+EqrRc6NepTSEkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAZhDy+KN4/RIdivHO4C6utIJaacne5sreR/J55r7dzr75fP3gFCgD5Jb1Jq71OaWiQmtlhbb/N9Vu7DtcAhVG02QtBu/xN/zYm1bgXNydY979WhmqJaglE1/+jIWgx0NgVSGUXLid+Bi6Fm76Z8o5P50EJYjUZtt/7xr83Sg29wEjofL8POs5UeLPET0jWY0F3RrDxshWcN7ierJQMfRaxlTabPVnsLDRQOHWM+JN1btwMAuRrINcefrmoLshwtyIQskCAjyrDsHxYnXVSWLRIpITy4LGHhxbqrAeN1O/O/2j9wmanY5eiWOfClKwRggoK/QEPTZ4H2f29Oq2nAz/GQ==\\n-----END CERTIFICATE-----\\n', '-----BEGIN CERTIFICATE-----\\nMIICrjCCAZagAwIBAQIQTeMlbfSLQwSkHjKDQIk9ZTANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhhY21lLmNvbTAeFw0yMTA3MTIxNTM3NDRaFw0zMTA3MTIxNTM3NDRaMBMxETAPBgNVBAMTCGFjbWUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn1BeZ/EH0lINknB+lzpU6dATRcWacfvqdMZWPUvDFPLRlSsFXex+UcLmeflvsbIRZO/WY9OUdClLFjoJMz9TR3BGCRVda/il00JQULD/3p5yrLqIZZaw7LWNUBig2thDE8HVwr1EXriS83g2fP6UFlFaTyt09vk9/sQi48yukBBL/+NFtc9IDmt5WXYZS+9OIj4MhtQ5QEj0ql04RGOv3VnentQ9P47dCic+sjvHA4EIv1Kr84EaUafNXyKKXWrqFxN2ngI5sgJQHWQEWKGewiim9X1leIcnaKtyLF3SXN+JyRnYXHZK9dmr6TlsyjOrlciGNHbX7H90jj8YXxX2+wIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBYLq1TPVGx0xzdngsdAeuGewBojtnOXJjMzLa4xsaMS/+8pPlyD9HXFqIDDE13S98kN7yIAIZvD6GnLyagmAZZ7ghYz6WiD8hoj0dhICmQnchrcqsMEdc+hScLHx0MDot7mVPCUYNsZqttT+3WiNgZ1fCD7t4tQ9FphnEuy+FALVplV1932yoqDaZuDaCBUMiN2B8S5vFjryoJXIrFkvqGcQIxxAy0wbkF29yje0Xbcj9liKrO4aBkN3xlGyZ856hunpsjiPR3yZ+gAXzX6eeVibr6ojtPNDMAjByfc1E6Jl/vrPNv57ikLoNo9C7ZJe4UFLeDIK98W6+KnYtR2Mxf\\n-----END CERTIFICATE-----\\n']
# certs_1 = [cert.replace("\\n", "\\\\n") for cert in certs]
# print("certs_1 : ", certs_1)
print(_get_cert_days_to_expiry(certs_1))
print("Done!!")
ZnJvbSBjcnlwdG9ncmFwaHkgaW1wb3J0IHg1MDkKZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LmJhY2tlbmRzIGltcG9ydCBkZWZhdWx0X2JhY2tlbmQKaW1wb3J0IGRhdGV0aW1lCgpkZWYgX2dldF9jZXJ0X2RheXNfdG9fZXhwaXJ5KGNlcnRzKToKICAgIGlmIGNlcnRzIGlzIE5vbmUgb3IgbGVuKGNlcnRzKSA9PSAwOgogICAgICAgIHJldHVybiBOb25lCiAKICAgIGlmIGlzaW5zdGFuY2UoY2VydHMsIHN0cik6CiAgICAgICAgY2VydHMgPSBbY2VydHNdCiAKICAgIG1heF9kYXlzX2xlZnQgPSBmbG9hdCgiLWluZiIpCiAgICB0cnk6CiAgICAgICAgZm9yIGNlcnRfc3RyIGluIGNlcnRzOgogICAgICAgICAgICBjZXJ0X3N0ciA9IGNlcnRfc3RyLmVuY29kZSgidXRmLTgiKS5kZWNvZGUoInVuaWNvZGVfZXNjYXBlIikKICAgICAgICAgICAgY2VydF9zdHIgPSBjZXJ0X3N0ci5zdHJpcCgpCiAgICAgICAgICAgIGNlcnRfYnl0ZXMgPSBjZXJ0X3N0ci5lbmNvZGUoInV0Zi04IikKICAgICAgICAgICAgY2VydCA9IHg1MDkubG9hZF9wZW1feDUwOV9jZXJ0aWZpY2F0ZShjZXJ0X2J5dGVzLCBkZWZhdWx0X2JhY2tlbmQoKSkKICAgICAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjbm93KCkKICAgICAgICAgICAgZXhwaXJ5X2RhdGUgPSBjZXJ0Lm5vdF92YWxpZF9hZnRlciBvciBub3cKICAgICAgICAgICAgZGF5c19sZWZ0ID0gKGV4cGlyeV9kYXRlIC0gbm93KS5kYXlzCiAgICAgICAgICAgIHByaW50KCJDZXJ0IGRheXMgdG8gZXhwaXJlOiIsIGRheXNfbGVmdCkKICAgICAgICAgICAgbWF4X2RheXNfbGVmdCA9IG1heChtYXhfZGF5c19sZWZ0LCBkYXlzX2xlZnQpCiAgICAgICAgcmV0dXJuIG1heChtYXhfZGF5c19sZWZ0LCAwKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHByaW50KCJGYWlsZWQgdG8gcHJvY2VzcyBjZXJ0cyBleHBpcnkiLCBlKQoKcHJpbnQoIkhlbGxvIFdvcmxkICEhIikKY2VydHMgPSBbJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbk1JSUNyakNDQVphZ0F3SUJBUUlRU21MMGs2VCtReFc2dFJUVytUL2RGVEFOQmdrcWhraUc5dzBCQVFzRkFEQVRNUkV3RHdZRFZRUURFd2hoWTIxbExtTnZiVEFlRncweU1UQTRNRGt4TkRRek16RmFGdzB6TVRBNE1Ea3hORFF6TXpGYU1CTXhFVEFQQmdOVkJBTVRDR0ZqYldVdVkyOXRNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW9zSzVLb3JYaDhqbDRDVkw0Ty80V2QwcWVINVpVWCs0ZTNQYm8rVnV1UXRVQXIyNnFYdnpOTEVMNXgwY1NGbE81cnpqaTFPRHBnRmpsYWhEM2Q5SjhsbzlNUFpndDJKSmFlWUVhellrL2U2blN1TzM2aElUZkhoUjA0V2NiK2QwTTF5Z1pTUmdCN1NFZi9iaWphWDEwVjd1dTNWMHNtMVdDcUNYVVBrUmIwTXFjRkZ2am9iUktPQTRxYmxCWFZNdS9TeDRqcGluVGxQd3U1aUUyS1hsanFBWlJja3VVMGJOZ3dJTkZ1OHNkMCttQmxSOEdQQjkzd1oyekxUbXUvMW9velBheHpKSVprcXhxZG9qSWZWaHdDRDBBT0k2dXQ2bEhwRWMzdHFKSlJTazJjWjhoMW41cVVqTVo3NTdXYU9tZkZEMjFINzg2RFhOTzQvMUJDNitYUUlEQVFBQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQVRQU0lYaHRnUG85Q3hnMUdPdElPZnozZWJHME1WRDFVMVVNZDBkZ0FEOWxuVFJONDNsRUZpYWFEbk1jYkhvd1JMRUVOZHE5OVZxVGFqWlowRVpoamdWM2JLOFVYL3RnQ0pidGNEMGZyeTlQTVkrYkJWNVk1SHN3bjB2MVZJL3FMWUdLa1JDbjJqYXAvcExFUVp2RjRYazdLdUNwRmcyVFlHd21ua0JWSE50MVRneGJXZTZNOWI4Zzh3dm1sSG1Dd1pDMVdKaFJGa0l0NG01MWJIeGVlTEMxd3hiTzRvVE1xRnArYUxTR0FBWUMwcW9IQ2VSODhsZW9ESUdkcWh1WmFmZlZpanZYMi9GOGo3VlZPMzM0M3JjUG5KN2dGVm1YTUpaNVEzVktpbzdZcE1qZlNTSmR0V25Qc2trb04wdlRaOWNmakRMTWhTZ2dlQ0VYcnFyS2RWXFxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxcbicsICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cXG5NSUlDcnpDQ0FaZWdBd0lCQVFJUkFLQmZ4c05nL2taa2pTVDlQTnNzOG5jd0RRWUpLb1pJaHZjTkFRRUxCUUF3RXpFUk1BOEdBMVVFQXhNSVlXTnRaUzVqYjIwd0hoY05NakV3TnpFeU1UVTFNelF6V2hjTk16RXdOekV5TVRVMU16UXpXakFUTVJFd0R3WURWUVFERXdoaFkyMWxMbU52YlRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSVhxbk9PUHB4YURDYnZVV21xNFhBeHVmczZ3cGxCUTVXdURPdDZRNm5BRk00U0U2WUdCdzkxdHpPOU1pOFUrbjJkdEU0ZkZRL2xMUEl2UEVyUzNZWVg5cW1UVnpNQk52NDl5RFlXSVFZYzl4UFo5RDNwR3paWWRBRnJkcnhZcXV2WmxtZkNqUnNUclk3aXlXT2Z6bnlGNVByUllXL29ScVRzRzhJTmFxa0pLUHIvWlNFTVZza2VJR3lrZ2N2RlUvYTRxK0xZQk5XZmtvWnRQMlVzTENSMDFhOGoxZHg2Zndpa0ZoakdNR0pBakNqcVdmaDR4M0JYdUFvZG1jdVJvMndWV3llU0FHZlY5R0hrMUw0TUJpNDIvTUVsOENkNDBITmZnYlVuVm9LendiS1V5enBpQi9ScjRBVUxXNWs1WjBSMGhIejlNbCtFcXJSYzZOZXBUU0VrQ0F3RUFBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBWmhEeStLTjQvUklkaXZITzRDNnV0SUphYWNuZTVzcmVSL0o1NXI3ZHpyNzVmUDNnRkNnRDVKYjFKcTcxT2FXaVFtdGxoYmIvTjlWdTdEdGNBaFZHMDJRdEJ1L3hOL3pZbTFiZ1hOeWRZOTc5V2htcUphZ2xFMS8raklXZ3gwTmdWU0dVWExpZCtCaTZGbTc2WjhvNVA1MEVKWWpVWnR0Lzd4cjgzU2cyOXdFam9mTDhQT3M1VWVMUEVUMGpXWTBGM1JyRHhzaFdjTjdpZXJKUU1mUmF4bFRhYlBWbnNMRFJRT0hXTStKTjFidHdNQXVScklOY2Vmcm1vTHNod3R5SVFza0NBanlyRHNIeFluWFZTV0xSSXBJVHk0TEdIaHhicXJBZU4xTy9PLzJqOXdtYW5ZNWVpV09mQ2xLd1JnZ29LL1FFUFRaNEgyZjI5T3EybkF6L0dRPT1cXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXFxuJywgJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbk1JSUNyakNDQVphZ0F3SUJBUUlRVGVNbGJmU0xRd1NrSGpLRFFJazlaVEFOQmdrcWhraUc5dzBCQVFzRkFEQVRNUkV3RHdZRFZRUURFd2hoWTIxbExtTnZiVEFlRncweU1UQTNNVEl4TlRNM05EUmFGdzB6TVRBM01USXhOVE0zTkRSYU1CTXhFVEFQQmdOVkJBTVRDR0ZqYldVdVkyOXRNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW4xQmVaL0VIMGxJTmtuQitsenBVNmRBVFJjV2FjZnZxZE1aV1BVdkRGUExSbFNzRlhleCtVY0xtZWZsdnNiSVJaTy9XWTlPVWRDbExGam9KTXo5VFIzQkdDUlZkYS9pbDAwSlFVTEQvM3A1eXJMcUlaWmF3N0xXTlVCaWcydGhERThIVndyMUVYcmlTODNnMmZQNlVGbEZhVHl0MDl2azkvc1FpNDh5dWtCQkwvK05GdGM5SURtdDVXWFlaUys5T0lqNE1odFE1UUVqMHFsMDRSR092M1ZuZW50UTlQNDdkQ2ljK3NqdkhBNEVJdjFLcjg0RWFVYWZOWHlLS1hXcnFGeE4ybmdJNXNnSlFIV1FFV0tHZXdpaW05WDFsZUljbmFLdHlMRjNTWE4rSnlSbllYSFpLOWRtcjZUbHN5ak9ybGNpR05IYlg3SDkwamo4WVh4WDIrd0lEQVFBQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQllMcTFUUFZHeDB4emRuZ3NkQWV1R2V3Qm9qdG5PWEpqTXpMYTR4c2FNUy8rOHBQbHlEOUhYRnFJRERFMTNTOThrTjd5SUFJWnZENkduTHlhZ21BWlo3Z2hZejZXaUQ4aG9qMGRoSUNtUW5jaHJjcXNNRWRjK2hTY0xIeDBNRG90N21WUENVWU5zWnF0dFQrM1dpTmdaMWZDRDd0NHRROUZwaG5FdXkrRkFMVnBsVjE5MzJ5b3FEYVp1RGFDQlVNaU4yQjhTNXZGanJ5b0pYSXJGa3ZxR2NRSXh4QXkwd2JrRjI5eWplMFhiY2o5bGlLck80YUJrTjN4bEd5Wjg1Nmh1bnBzamlQUjN5WitnQVh6WDZlZVZpYnI2b2p0UE5ETUFqQnlmYzFFNkpsL3ZyUE52NTdpa0xvTm85QzdaSmU0VUZMZURJSzk4VzYrS25ZdFIyTXhmXFxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxcbiddCmNlcnRzXzEgPSBbJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbk1JSURERENDQWZTZ0F3SUJBZ0lVT1FnYm05WHlIZ2ZvUnJlOW9UYmU4UGwrV2FBd0RRWUpLb1pJaHZjTkFRRUxcXG5CUUF3TmpFVk1CTUdBMVVFQ2d3TVJIVnZJRk5sWTNWeWFYUjVNUjB3R3dZRFZRUUREQlJFU1V3eFZVVkJTMGxLXFxuTms1VlQwSkJSRFJaU1RBZ0Z3MHlOREF5TWpJeE5USTBNRFZhR0E4NU9UazVNVEl6TVRJek5UazFPVm93TmpFVlxcbk1CTUdBMVVFQ2d3TVJIVnZJRk5sWTNWeWFYUjVNUjB3R3dZRFZRUUREQlJFU1V3eFZVVkJTMGxLTms1VlQwSkJcXG5SRFJaU1RDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBUFJ1UXB4VXRkLzNzK3ZtXFxuZVZIVXJqcWd1SFZBcEIrSHVXL2VuSGZ2WWtOcmdVT2RsVTQ4cUVYT3J0THhsMFFLZm91V1ZpNVBiTG9DZFdWelxcblpxUDFocXgyd01LdHRncWQwRVhEVFBSa3I1Y0VLRFJuTjAvbzQ0YlBXSjVTNndkRkkwc1NQZUJnT2I1N0c2OUxcXG5QRHNpVldMUWRJNncvOWNGQ1psUXdobzgyaTYyUWZSekt6NkQ4ZHNPNkJHeEkwQVpJUERwOHhjeThzanhackRoXFxuem9nU25CbFZ1UW1iandyT1RMNUpkSmhLWUo3eVpZU2RiRTlMOW1waEp5bmF1dDRJaEszRVRrZFhodFlUeWJJZVxcblRTMHdiK2VRNFlkT1Q5aHpuNk5BL3NHVFVUL25CWC9XcGRET08xSktXOXpxSVdwdC9ERnFha0QvaE5WalMrRTlcXG5KbzZPVnJjQ0F3RUFBYU1RTUE0d0RBWURWUjBUQVFIL0JBSXdBREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBXFxuTmFUSnRGaVBLMUMwRGpTdmkxVUY0QkxiRmdxSHdaL2dNaDl3NkNub0xDNVdkUGlCSWZKK3FXUll5WG1tL21pR1xcbm5iWWdieHBpTEJMeVpLb2JDeUx5enp3ZmhINXU4NEx4U1FnTG5YVGxHeGN0WkwyWDV0Vm9nL1RROWYxRHZGYTNcXG5VbzdSanlNMTU3QzJpa1NCOVp0MWlzSUJhNGtjc0xhbERtWDh2dUt4dnArVTBZM2pOd3RFbHRwWk05K3lTU1BWXFxuZE43bSs0aHAvZHpYdWpvWWgwNFZWRmRRK1RqWHlnSkI4ZzNZeFNjb0dZMHVwQnR6c2VwZ3RzNjJ5bjFyaDJnQVxcbjk3QTM4NXU1VlZ1MUFYVDhOQ2ZlOFFicWtxZmFjcG5QNnNOSE5QcncyY2UzR2xwODcwU1QzY3QyZ0VISHN6M0tcXG5wcnVBdVVlbm1DeGVVWG5DWUx0RHpRPT1cXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXFxuJ10KIyBwcmludCgiY2VydHMgOiAiLCBjZXJ0cykKIyBjZXJ0cyA9IFsnLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXFxuTUlJQ3JqQ0NBWmFnQXdJQkFRSVFTbUwwazZUK1F4VzZ0UlRXK1QvZEZUQU5CZ2txaGtpRzl3MEJBUXNGQURBVE1SRXdEd1lEVlFRREV3aGhZMjFsTG1OdmJUQWVGdzB5TVRBNE1Ea3hORFF6TXpGYUZ3MHpNVEE0TURreE5EUXpNekZhTUJNeEVUQVBCZ05WQkFNVENHRmpiV1V1WTI5dE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBb3NLNUtvclhoOGpsNENWTDRPLzRXZDBxZUg1WlVYKzRlM1BibytWdXVRdFVBcjI2cVh2ek5MRUw1eDBjU0ZsTzVyemppMU9EcGdGamxhaEQzZDlKOGxvOU1QWmd0MkpKYWVZRWF6WWsvZTZuU3VPMzZoSVRmSGhSMDRXY2IrZDBNMXlnWlNSZ0I3U0VmL2JpamFYMTBWN3V1M1Ywc20xV0NxQ1hVUGtSYjBNcWNGRnZqb2JSS09BNHFibEJYVk11L1N4NGpwaW5UbFB3dTVpRTJLWGxqcUFaUmNrdVUwYk5nd0lORnU4c2QwK21CbFI4R1BCOTN3WjJ6TFRtdS8xb296UGF4ekpJWmtxeHFkb2pJZlZod0NEMEFPSTZ1dDZsSHBFYzN0cUpKUlNrMmNaOGgxbjVxVWpNWjc1N1dhT21mRkQyMUg3ODZEWE5PNC8xQkM2K1hRSURBUUFCTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFBVFBTSVhodGdQbzlDeGcxR090SU9mejNlYkcwTVZEMVUxVU1kMGRnQUQ5bG5UUk40M2xFRmlhYURuTWNiSG93UkxFRU5kcTk5VnFUYWpaWjBFWmhqZ1YzYks4VVgvdGdDSmJ0Y0QwZnJ5OVBNWStiQlY1WTVIc3duMHYxVkkvcUxZR0trUkNuMmphcC9wTEVRWnZGNFhrN0t1Q3BGZzJUWUd3bW5rQlZITnQxVGd4YldlNk05YjhnOHd2bWxIbUN3WkMxV0poUkZrSXQ0bTUxYkh4ZWVMQzF3eGJPNG9UTXFGcCthTFNHQUFZQzBxb0hDZVI4OGxlb0RJR2RxaHVaYWZmVmlqdlgyL0Y4ajdWVk8zMzQzcmNQbko3Z0ZWbVhNSlo1UTNWS2lvN1lwTWpmU1NKZHRXblBza2tvTjB2VFo5Y2ZqRExNaFNnZ2VDRVhycXJLZFZcXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXFxuJywgJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbk1JSUNyekNDQVplZ0F3SUJBUUlSQUtCZnhzTmcva1pralNUOVBOc3M4bmN3RFFZSktvWklodmNOQVFFTEJRQXdFekVSTUE4R0ExVUVBeE1JWVdOdFpTNWpiMjB3SGhjTk1qRXdOekV5TVRVMU16UXpXaGNOTXpFd056RXlNVFUxTXpReldqQVRNUkV3RHdZRFZRUURFd2hoWTIxbExtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFJWHFuT09QcHhhRENidlVXbXE0WEF4dWZzNndwbEJRNVd1RE90NlE2bkFGTTRTRTZZR0J3OTF0ek85TWk4VStuMmR0RTRmRlEvbExQSXZQRXJTM1lZWDlxbVRWek1CTnY0OXlEWVdJUVljOXhQWjlEM3BHelpZZEFGcmRyeFlxdXZabG1mQ2pSc1RyWTdpeVdPZnpueUY1UHJSWVcvb1JxVHNHOElOYXFrSktQci9aU0VNVnNrZUlHeWtnY3ZGVS9hNHErTFlCTldma29adFAyVXNMQ1IwMWE4ajFkeDZmd2lrRmhqR01HSkFqQ2pxV2ZoNHgzQlh1QW9kbWN1Um8yd1ZXeWVTQUdmVjlHSGsxTDRNQmk0Mi9NRWw4Q2Q0MEhOZmdiVW5Wb0t6d2JLVXl6cGlCL1JyNEFVTFc1azVaMFIwaEh6OU1sK0VxclJjNk5lcFRTRWtDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFaaER5K0tONC9SSWRpdkhPNEM2dXRJSmFhY25lNXNyZVIvSjU1cjdkenI3NWZQM2dGQ2dENUpiMUpxNzFPYVdpUW10bGhiYi9OOVZ1N0R0Y0FoVkcwMlF0QnUveE4velltMWJnWE55ZFk5NzlXaG1xSmFnbEUxLytqSVdneDBOZ1ZTR1VYTGlkK0JpNkZtNzZaOG81UDUwRUpZalVadHQvN3hyODNTZzI5d0Vqb2ZMOFBPczVVZUxQRVQwaldZMEYzUnJEeHNoV2NON2llckpRTWZSYXhsVGFiUFZuc0xEUlFPSFdNK0pOMWJ0d01BdVJySU5jZWZybW9Mc2h3dHlJUXNrQ0FqeXJEc0h4WW5YVlNXTFJJcElUeTRMR0hoeGJxckFlTjFPL08vMmo5d21hblk1ZWlXT2ZDbEt3Umdnb0svUUVQVFo0SDJmMjlPcTJuQXovR1E9PVxcbi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cXG4nLCAnLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXFxuTUlJQ3JqQ0NBWmFnQXdJQkFRSVFUZU1sYmZTTFF3U2tIaktEUUlrOVpUQU5CZ2txaGtpRzl3MEJBUXNGQURBVE1SRXdEd1lEVlFRREV3aGhZMjFsTG1OdmJUQWVGdzB5TVRBM01USXhOVE0zTkRSYUZ3MHpNVEEzTVRJeE5UTTNORFJhTUJNeEVUQVBCZ05WQkFNVENHRmpiV1V1WTI5dE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbjFCZVovRUgwbElOa25CK2x6cFU2ZEFUUmNXYWNmdnFkTVpXUFV2REZQTFJsU3NGWGV4K1VjTG1lZmx2c2JJUlpPL1dZOU9VZENsTEZqb0pNejlUUjNCR0NSVmRhL2lsMDBKUVVMRC8zcDV5ckxxSVpaYXc3TFdOVUJpZzJ0aERFOEhWd3IxRVhyaVM4M2cyZlA2VUZsRmFUeXQwOXZrOS9zUWk0OHl1a0JCTC8rTkZ0YzlJRG10NVdYWVpTKzlPSWo0TWh0UTVRRWowcWwwNFJHT3YzVm5lbnRROVA0N2RDaWMrc2p2SEE0RUl2MUtyODRFYVVhZk5YeUtLWFdycUZ4TjJuZ0k1c2dKUUhXUUVXS0dld2lpbTlYMWxlSWNuYUt0eUxGM1NYTitKeVJuWVhIWks5ZG1yNlRsc3lqT3JsY2lHTkhiWDdIOTBqajhZWHhYMit3SURBUUFCTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFCWUxxMVRQVkd4MHh6ZG5nc2RBZXVHZXdCb2p0bk9YSmpNekxhNHhzYU1TLys4cFBseUQ5SFhGcUlEREUxM1M5OGtON3lJQUladkQ2R25MeWFnbUFaWjdnaFl6NldpRDhob2owZGhJQ21RbmNocmNxc01FZGMraFNjTEh4ME1Eb3Q3bVZQQ1VZTnNacXR0VCszV2lOZ1oxZkNEN3Q0dFE5RnBobkV1eStGQUxWcGxWMTkzMnlvcURhWnVEYUNCVU1pTjJCOFM1dkZqcnlvSlhJckZrdnFHY1FJeHhBeTB3YmtGMjl5amUwWGJjajlsaUtyTzRhQmtOM3hsR3laODU2aHVucHNqaVBSM3laK2dBWHpYNmVlVmlicjZvanRQTkRNQWpCeWZjMUU2SmwvdnJQTnY1N2lrTG9ObzlDN1pKZTRVRkxlRElLOThXNitLbll0UjJNeGZcXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXFxuJ10KIyBjZXJ0c18xID0gW2NlcnQucmVwbGFjZSgiXFxuIiwgIlxcXFxuIikgZm9yIGNlcnQgaW4gY2VydHNdCiMgcHJpbnQoImNlcnRzXzEgOiAiLCBjZXJ0c18xKQpwcmludChfZ2V0X2NlcnRfZGF5c190b19leHBpcnkoY2VydHNfMSkpCnByaW50KCJEb25lISEiKQ==