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']
# 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))
print("Done!!")
ZnJvbSBjcnlwdG9ncmFwaHkgaW1wb3J0IHg1MDkKZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LmJhY2tlbmRzIGltcG9ydCBkZWZhdWx0X2JhY2tlbmQKaW1wb3J0IGRhdGV0aW1lCgpkZWYgX2dldF9jZXJ0X2RheXNfdG9fZXhwaXJ5KGNlcnRzKToKICAgIGlmIGNlcnRzIGlzIE5vbmUgb3IgbGVuKGNlcnRzKSA9PSAwOgogICAgICAgIHJldHVybiBOb25lCiAKICAgIGlmIGlzaW5zdGFuY2UoY2VydHMsIHN0cik6CiAgICAgICAgY2VydHMgPSBbY2VydHNdCiAKICAgIG1heF9kYXlzX2xlZnQgPSBmbG9hdCgiLWluZiIpCiAgICB0cnk6CiAgICAgICAgZm9yIGNlcnRfc3RyIGluIGNlcnRzOgogICAgICAgICAgICBjZXJ0X3N0ciA9IGNlcnRfc3RyLmVuY29kZSgidXRmLTgiKS5kZWNvZGUoInVuaWNvZGVfZXNjYXBlIikKICAgICAgICAgICAgY2VydF9zdHIgPSBjZXJ0X3N0ci5zdHJpcCgpCiAgICAgICAgICAgIGNlcnRfYnl0ZXMgPSBjZXJ0X3N0ci5lbmNvZGUoInV0Zi04IikKICAgICAgICAgICAgY2VydCA9IHg1MDkubG9hZF9wZW1feDUwOV9jZXJ0aWZpY2F0ZShjZXJ0X2J5dGVzLCBkZWZhdWx0X2JhY2tlbmQoKSkKICAgICAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjbm93KCkKICAgICAgICAgICAgZXhwaXJ5X2RhdGUgPSBjZXJ0Lm5vdF92YWxpZF9hZnRlciBvciBub3cKICAgICAgICAgICAgZGF5c19sZWZ0ID0gKGV4cGlyeV9kYXRlIC0gbm93KS5kYXlzCiAgICAgICAgICAgIHByaW50KCJDZXJ0IGRheXMgdG8gZXhwaXJlOiIsIGRheXNfbGVmdCkKICAgICAgICAgICAgbWF4X2RheXNfbGVmdCA9IG1heChtYXhfZGF5c19sZWZ0LCBkYXlzX2xlZnQpCiAgICAgICAgcmV0dXJuIG1heChtYXhfZGF5c19sZWZ0LCAwKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHByaW50KCJGYWlsZWQgdG8gcHJvY2VzcyBjZXJ0cyBleHBpcnkiLCBlKQoKcHJpbnQoIkhlbGxvIFdvcmxkICEhIikKY2VydHMgPSBbJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbk1JSUNyakNDQVphZ0F3SUJBUUlRU21MMGs2VCtReFc2dFJUVytUL2RGVEFOQmdrcWhraUc5dzBCQVFzRkFEQVRNUkV3RHdZRFZRUURFd2hoWTIxbExtTnZiVEFlRncweU1UQTRNRGt4TkRRek16RmFGdzB6TVRBNE1Ea3hORFF6TXpGYU1CTXhFVEFQQmdOVkJBTVRDR0ZqYldVdVkyOXRNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW9zSzVLb3JYaDhqbDRDVkw0Ty80V2QwcWVINVpVWCs0ZTNQYm8rVnV1UXRVQXIyNnFYdnpOTEVMNXgwY1NGbE81cnpqaTFPRHBnRmpsYWhEM2Q5SjhsbzlNUFpndDJKSmFlWUVhellrL2U2blN1TzM2aElUZkhoUjA0V2NiK2QwTTF5Z1pTUmdCN1NFZi9iaWphWDEwVjd1dTNWMHNtMVdDcUNYVVBrUmIwTXFjRkZ2am9iUktPQTRxYmxCWFZNdS9TeDRqcGluVGxQd3U1aUUyS1hsanFBWlJja3VVMGJOZ3dJTkZ1OHNkMCttQmxSOEdQQjkzd1oyekxUbXUvMW9velBheHpKSVprcXhxZG9qSWZWaHdDRDBBT0k2dXQ2bEhwRWMzdHFKSlJTazJjWjhoMW41cVVqTVo3NTdXYU9tZkZEMjFINzg2RFhOTzQvMUJDNitYUUlEQVFBQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQVRQU0lYaHRnUG85Q3hnMUdPdElPZnozZWJHME1WRDFVMVVNZDBkZ0FEOWxuVFJONDNsRUZpYWFEbk1jYkhvd1JMRUVOZHE5OVZxVGFqWlowRVpoamdWM2JLOFVYL3RnQ0pidGNEMGZyeTlQTVkrYkJWNVk1SHN3bjB2MVZJL3FMWUdLa1JDbjJqYXAvcExFUVp2RjRYazdLdUNwRmcyVFlHd21ua0JWSE50MVRneGJXZTZNOWI4Zzh3dm1sSG1Dd1pDMVdKaFJGa0l0NG01MWJIeGVlTEMxd3hiTzRvVE1xRnArYUxTR0FBWUMwcW9IQ2VSODhsZW9ESUdkcWh1WmFmZlZpanZYMi9GOGo3VlZPMzM0M3JjUG5KN2dGVm1YTUpaNVEzVktpbzdZcE1qZlNTSmR0V25Qc2trb04wdlRaOWNmakRMTWhTZ2dlQ0VYcnFyS2RWXFxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxcbicsICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cXG5NSUlDcnpDQ0FaZWdBd0lCQVFJUkFLQmZ4c05nL2taa2pTVDlQTnNzOG5jd0RRWUpLb1pJaHZjTkFRRUxCUUF3RXpFUk1BOEdBMVVFQXhNSVlXTnRaUzVqYjIwd0hoY05NakV3TnpFeU1UVTFNelF6V2hjTk16RXdOekV5TVRVMU16UXpXakFUTVJFd0R3WURWUVFERXdoaFkyMWxMbU52YlRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSVhxbk9PUHB4YURDYnZVV21xNFhBeHVmczZ3cGxCUTVXdURPdDZRNm5BRk00U0U2WUdCdzkxdHpPOU1pOFUrbjJkdEU0ZkZRL2xMUEl2UEVyUzNZWVg5cW1UVnpNQk52NDl5RFlXSVFZYzl4UFo5RDNwR3paWWRBRnJkcnhZcXV2WmxtZkNqUnNUclk3aXlXT2Z6bnlGNVByUllXL29ScVRzRzhJTmFxa0pLUHIvWlNFTVZza2VJR3lrZ2N2RlUvYTRxK0xZQk5XZmtvWnRQMlVzTENSMDFhOGoxZHg2Zndpa0ZoakdNR0pBakNqcVdmaDR4M0JYdUFvZG1jdVJvMndWV3llU0FHZlY5R0hrMUw0TUJpNDIvTUVsOENkNDBITmZnYlVuVm9LendiS1V5enBpQi9ScjRBVUxXNWs1WjBSMGhIejlNbCtFcXJSYzZOZXBUU0VrQ0F3RUFBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBWmhEeStLTjQvUklkaXZITzRDNnV0SUphYWNuZTVzcmVSL0o1NXI3ZHpyNzVmUDNnRkNnRDVKYjFKcTcxT2FXaVFtdGxoYmIvTjlWdTdEdGNBaFZHMDJRdEJ1L3hOL3pZbTFiZ1hOeWRZOTc5V2htcUphZ2xFMS8raklXZ3gwTmdWU0dVWExpZCtCaTZGbTc2WjhvNVA1MEVKWWpVWnR0Lzd4cjgzU2cyOXdFam9mTDhQT3M1VWVMUEVUMGpXWTBGM1JyRHhzaFdjTjdpZXJKUU1mUmF4bFRhYlBWbnNMRFJRT0hXTStKTjFidHdNQXVScklOY2Vmcm1vTHNod3R5SVFza0NBanlyRHNIeFluWFZTV0xSSXBJVHk0TEdIaHhicXJBZU4xTy9PLzJqOXdtYW5ZNWVpV09mQ2xLd1JnZ29LL1FFUFRaNEgyZjI5T3EybkF6L0dRPT1cXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXFxuJywgJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbk1JSUNyakNDQVphZ0F3SUJBUUlRVGVNbGJmU0xRd1NrSGpLRFFJazlaVEFOQmdrcWhraUc5dzBCQVFzRkFEQVRNUkV3RHdZRFZRUURFd2hoWTIxbExtTnZiVEFlRncweU1UQTNNVEl4TlRNM05EUmFGdzB6TVRBM01USXhOVE0zTkRSYU1CTXhFVEFQQmdOVkJBTVRDR0ZqYldVdVkyOXRNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW4xQmVaL0VIMGxJTmtuQitsenBVNmRBVFJjV2FjZnZxZE1aV1BVdkRGUExSbFNzRlhleCtVY0xtZWZsdnNiSVJaTy9XWTlPVWRDbExGam9KTXo5VFIzQkdDUlZkYS9pbDAwSlFVTEQvM3A1eXJMcUlaWmF3N0xXTlVCaWcydGhERThIVndyMUVYcmlTODNnMmZQNlVGbEZhVHl0MDl2azkvc1FpNDh5dWtCQkwvK05GdGM5SURtdDVXWFlaUys5T0lqNE1odFE1UUVqMHFsMDRSR092M1ZuZW50UTlQNDdkQ2ljK3NqdkhBNEVJdjFLcjg0RWFVYWZOWHlLS1hXcnFGeE4ybmdJNXNnSlFIV1FFV0tHZXdpaW05WDFsZUljbmFLdHlMRjNTWE4rSnlSbllYSFpLOWRtcjZUbHN5ak9ybGNpR05IYlg3SDkwamo4WVh4WDIrd0lEQVFBQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQllMcTFUUFZHeDB4emRuZ3NkQWV1R2V3Qm9qdG5PWEpqTXpMYTR4c2FNUy8rOHBQbHlEOUhYRnFJRERFMTNTOThrTjd5SUFJWnZENkduTHlhZ21BWlo3Z2hZejZXaUQ4aG9qMGRoSUNtUW5jaHJjcXNNRWRjK2hTY0xIeDBNRG90N21WUENVWU5zWnF0dFQrM1dpTmdaMWZDRDd0NHRROUZwaG5FdXkrRkFMVnBsVjE5MzJ5b3FEYVp1RGFDQlVNaU4yQjhTNXZGanJ5b0pYSXJGa3ZxR2NRSXh4QXkwd2JrRjI5eWplMFhiY2o5bGlLck80YUJrTjN4bEd5Wjg1Nmh1bnBzamlQUjN5WitnQVh6WDZlZVZpYnI2b2p0UE5ETUFqQnlmYzFFNkpsL3ZyUE52NTdpa0xvTm85QzdaSmU0VUZMZURJSzk4VzYrS25ZdFIyTXhmXFxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxcbiddCiMgcHJpbnQoImNlcnRzIDogIiwgY2VydHMpCiMgY2VydHMgPSBbJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbk1JSUNyakNDQVphZ0F3SUJBUUlRU21MMGs2VCtReFc2dFJUVytUL2RGVEFOQmdrcWhraUc5dzBCQVFzRkFEQVRNUkV3RHdZRFZRUURFd2hoWTIxbExtTnZiVEFlRncweU1UQTRNRGt4TkRRek16RmFGdzB6TVRBNE1Ea3hORFF6TXpGYU1CTXhFVEFQQmdOVkJBTVRDR0ZqYldVdVkyOXRNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW9zSzVLb3JYaDhqbDRDVkw0Ty80V2QwcWVINVpVWCs0ZTNQYm8rVnV1UXRVQXIyNnFYdnpOTEVMNXgwY1NGbE81cnpqaTFPRHBnRmpsYWhEM2Q5SjhsbzlNUFpndDJKSmFlWUVhellrL2U2blN1TzM2aElUZkhoUjA0V2NiK2QwTTF5Z1pTUmdCN1NFZi9iaWphWDEwVjd1dTNWMHNtMVdDcUNYVVBrUmIwTXFjRkZ2am9iUktPQTRxYmxCWFZNdS9TeDRqcGluVGxQd3U1aUUyS1hsanFBWlJja3VVMGJOZ3dJTkZ1OHNkMCttQmxSOEdQQjkzd1oyekxUbXUvMW9velBheHpKSVprcXhxZG9qSWZWaHdDRDBBT0k2dXQ2bEhwRWMzdHFKSlJTazJjWjhoMW41cVVqTVo3NTdXYU9tZkZEMjFINzg2RFhOTzQvMUJDNitYUUlEQVFBQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQVRQU0lYaHRnUG85Q3hnMUdPdElPZnozZWJHME1WRDFVMVVNZDBkZ0FEOWxuVFJONDNsRUZpYWFEbk1jYkhvd1JMRUVOZHE5OVZxVGFqWlowRVpoamdWM2JLOFVYL3RnQ0pidGNEMGZyeTlQTVkrYkJWNVk1SHN3bjB2MVZJL3FMWUdLa1JDbjJqYXAvcExFUVp2RjRYazdLdUNwRmcyVFlHd21ua0JWSE50MVRneGJXZTZNOWI4Zzh3dm1sSG1Dd1pDMVdKaFJGa0l0NG01MWJIeGVlTEMxd3hiTzRvVE1xRnArYUxTR0FBWUMwcW9IQ2VSODhsZW9ESUdkcWh1WmFmZlZpanZYMi9GOGo3VlZPMzM0M3JjUG5KN2dGVm1YTUpaNVEzVktpbzdZcE1qZlNTSmR0V25Qc2trb04wdlRaOWNmakRMTWhTZ2dlQ0VYcnFyS2RWXFxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxcbicsICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cXG5NSUlDcnpDQ0FaZWdBd0lCQVFJUkFLQmZ4c05nL2taa2pTVDlQTnNzOG5jd0RRWUpLb1pJaHZjTkFRRUxCUUF3RXpFUk1BOEdBMVVFQXhNSVlXTnRaUzVqYjIwd0hoY05NakV3TnpFeU1UVTFNelF6V2hjTk16RXdOekV5TVRVMU16UXpXakFUTVJFd0R3WURWUVFERXdoaFkyMWxMbU52YlRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSVhxbk9PUHB4YURDYnZVV21xNFhBeHVmczZ3cGxCUTVXdURPdDZRNm5BRk00U0U2WUdCdzkxdHpPOU1pOFUrbjJkdEU0ZkZRL2xMUEl2UEVyUzNZWVg5cW1UVnpNQk52NDl5RFlXSVFZYzl4UFo5RDNwR3paWWRBRnJkcnhZcXV2WmxtZkNqUnNUclk3aXlXT2Z6bnlGNVByUllXL29ScVRzRzhJTmFxa0pLUHIvWlNFTVZza2VJR3lrZ2N2RlUvYTRxK0xZQk5XZmtvWnRQMlVzTENSMDFhOGoxZHg2Zndpa0ZoakdNR0pBakNqcVdmaDR4M0JYdUFvZG1jdVJvMndWV3llU0FHZlY5R0hrMUw0TUJpNDIvTUVsOENkNDBITmZnYlVuVm9LendiS1V5enBpQi9ScjRBVUxXNWs1WjBSMGhIejlNbCtFcXJSYzZOZXBUU0VrQ0F3RUFBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBWmhEeStLTjQvUklkaXZITzRDNnV0SUphYWNuZTVzcmVSL0o1NXI3ZHpyNzVmUDNnRkNnRDVKYjFKcTcxT2FXaVFtdGxoYmIvTjlWdTdEdGNBaFZHMDJRdEJ1L3hOL3pZbTFiZ1hOeWRZOTc5V2htcUphZ2xFMS8raklXZ3gwTmdWU0dVWExpZCtCaTZGbTc2WjhvNVA1MEVKWWpVWnR0Lzd4cjgzU2cyOXdFam9mTDhQT3M1VWVMUEVUMGpXWTBGM1JyRHhzaFdjTjdpZXJKUU1mUmF4bFRhYlBWbnNMRFJRT0hXTStKTjFidHdNQXVScklOY2Vmcm1vTHNod3R5SVFza0NBanlyRHNIeFluWFZTV0xSSXBJVHk0TEdIaHhicXJBZU4xTy9PLzJqOXdtYW5ZNWVpV09mQ2xLd1JnZ29LL1FFUFRaNEgyZjI5T3EybkF6L0dRPT1cXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXFxuJywgJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbk1JSUNyakNDQVphZ0F3SUJBUUlRVGVNbGJmU0xRd1NrSGpLRFFJazlaVEFOQmdrcWhraUc5dzBCQVFzRkFEQVRNUkV3RHdZRFZRUURFd2hoWTIxbExtTnZiVEFlRncweU1UQTNNVEl4TlRNM05EUmFGdzB6TVRBM01USXhOVE0zTkRSYU1CTXhFVEFQQmdOVkJBTVRDR0ZqYldVdVkyOXRNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW4xQmVaL0VIMGxJTmtuQitsenBVNmRBVFJjV2FjZnZxZE1aV1BVdkRGUExSbFNzRlhleCtVY0xtZWZsdnNiSVJaTy9XWTlPVWRDbExGam9KTXo5VFIzQkdDUlZkYS9pbDAwSlFVTEQvM3A1eXJMcUlaWmF3N0xXTlVCaWcydGhERThIVndyMUVYcmlTODNnMmZQNlVGbEZhVHl0MDl2azkvc1FpNDh5dWtCQkwvK05GdGM5SURtdDVXWFlaUys5T0lqNE1odFE1UUVqMHFsMDRSR092M1ZuZW50UTlQNDdkQ2ljK3NqdkhBNEVJdjFLcjg0RWFVYWZOWHlLS1hXcnFGeE4ybmdJNXNnSlFIV1FFV0tHZXdpaW05WDFsZUljbmFLdHlMRjNTWE4rSnlSbllYSFpLOWRtcjZUbHN5ak9ybGNpR05IYlg3SDkwamo4WVh4WDIrd0lEQVFBQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQllMcTFUUFZHeDB4emRuZ3NkQWV1R2V3Qm9qdG5PWEpqTXpMYTR4c2FNUy8rOHBQbHlEOUhYRnFJRERFMTNTOThrTjd5SUFJWnZENkduTHlhZ21BWlo3Z2hZejZXaUQ4aG9qMGRoSUNtUW5jaHJjcXNNRWRjK2hTY0xIeDBNRG90N21WUENVWU5zWnF0dFQrM1dpTmdaMWZDRDd0NHRROUZwaG5FdXkrRkFMVnBsVjE5MzJ5b3FEYVp1RGFDQlVNaU4yQjhTNXZGanJ5b0pYSXJGa3ZxR2NRSXh4QXkwd2JrRjI5eWplMFhiY2o5bGlLck80YUJrTjN4bEd5Wjg1Nmh1bnBzamlQUjN5WitnQVh6WDZlZVZpYnI2b2p0UE5ETUFqQnlmYzFFNkpsL3ZyUE52NTdpa0xvTm85QzdaSmU0VUZMZURJSzk4VzYrS25ZdFIyTXhmXFxuLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxcbiddCiMgY2VydHNfMSA9IFtjZXJ0LnJlcGxhY2UoIlxcbiIsICJcXFxcbiIpIGZvciBjZXJ0IGluIGNlcnRzXQojIHByaW50KCJjZXJ0c18xIDogIiwgY2VydHNfMSkKcHJpbnQoX2dldF9jZXJ0X2RheXNfdG9fZXhwaXJ5KGNlcnRzKSkKcHJpbnQoIkRvbmUhISIp