diff --git a/Dockerfile b/Dockerfile index 9762469..0e496dd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,11 @@ ADD . /app RUN pip install -r requirements.txt RUN git clone https://github.com/sdgtt/telemetry.git RUN cd telemetry && pip install -r requirements.txt && pip install . && cd .. +# Copy SSL certificates +# COPY cos_analog_com.crt ./ssl/cos_analog_com.crt +# COPY cos_analog_com.key ./ssl/cos_analog_com.key +COPY cert.crt ./ssl/cert.crt +COPY cert.key ./ssl/cert.key RUN chmod u+x ./entrypoint.sh ENTRYPOINT ["./entrypoint.sh"] EXPOSE 5000 diff --git a/README.md b/README.md index 708ed7e..9df4b66 100644 --- a/README.md +++ b/README.md @@ -32,4 +32,4 @@ virtual environment of constellation 7. Once installed, run the in development mode. export FLASK_ENV=development export ES=192.168.10.12 - flask run --host=0.0.0.0 --port=5002 + flask run --host=0.0.0.0 --port=5000 --cert=./ssl/cert.crt --key=./ssl/cert.key diff --git a/app/__init__.py b/app/__init__.py index 1507b3a..92d4617 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -2,7 +2,7 @@ from flask.helpers import get_root_path from dash import Dash import dash_bootstrap_components as dbc -from flask_cors import CORS +from flask_cors import CORS, cross_origin def create_app(): diff --git a/app/app.py b/app/app.py index 645d818..ceb2869 100644 --- a/app/app.py +++ b/app/app.py @@ -24,14 +24,17 @@ render_template, request, send_from_directory, - url_for, + url_for ) from flask.helpers import get_root_path +from flask_cors import cross_origin,CORS + # from junit2htmlreport import parser # app = Flask(__name__) server_bp = Blueprint("constellation", __name__) +CORS(server_bp) JENKINS_SERVER = ( "jenkinsci" if "JENKINS_SERVER" not in os.environ else os.environ["JENKINS_SERVER"] @@ -91,6 +94,7 @@ def api(param=None): @server_bp.route("api/board//") @server_bp.route("api/board//") +@cross_origin() def board_api(board_name, param=None): boot_test_filtered = [] jenkins_project_name = "HW_tests/HW_test_multiconfig" diff --git a/app/models/artifacts.py b/app/models/artifacts.py index b326ddc..26535c9 100644 --- a/app/models/artifacts.py +++ b/app/models/artifacts.py @@ -17,7 +17,6 @@ def __init__(self, raw_artifact_result=None): self.__initialize_fields() def __initialize_fields(self): - fields = [ "archive_date", "url", @@ -47,7 +46,6 @@ def display(self): class Artifacts: def __init__(self, **filters): - self.db = DB(index_name="artifacts", keywords=Artifact.KEYWORDS) db_res = self.db.search(sort="archive_date", **filters) # create boards object from raw db_res diff --git a/app/models/boot_tests.py b/app/models/boot_tests.py index 0f67f88..d28a042 100644 --- a/app/models/boot_tests.py +++ b/app/models/boot_tests.py @@ -2,7 +2,6 @@ class BootTest: - KEYWORDS = [ "boot_folder_name", "hdl_branch", @@ -20,7 +19,6 @@ def __init__(self, raw_boot_test_result=None): self.__initialize_fields() def __initialize_fields(self): - fields = [ "boot_folder_name", "hdl_hash", @@ -143,7 +141,6 @@ def __init__( source_adjacency_matrix=None, filters=None, ): - # if not boot_folder_name: # raise ValueError('boot_folder_name must not be null or empty') diff --git a/app/models/score.py b/app/models/score.py index 27e1b34..296a7ab 100644 --- a/app/models/score.py +++ b/app/models/score.py @@ -175,7 +175,7 @@ def get_test_results(self): # noqa: C901 "pytest_skipped", ]: if not ar.payload_param == "NA": - entry += "(" + ar.payload_param + ")" + entry += "(" + str(ar.payload_param) + ")" if entry in report[bn][test]["data"]: report[bn][test]["data"][entry].append( details @@ -194,9 +194,9 @@ def get_test_results(self): # noqa: C901 "drivers_missing", "dmesg_warnings_found", "dmesg_errors_found", - "pytest_errors", - "pytest_failures", - "pytest_skipped", + # "pytest_errors", + # "pytest_failures", + # "pytest_skipped", ]: if isinstance(report[bn][test]["data"], list): try: diff --git a/app/score_card/app.py b/app/score_card/app.py index 299c680..d49d187 100644 --- a/app/score_card/app.py +++ b/app/score_card/app.py @@ -345,7 +345,6 @@ def generate_header(data): def generate_options(data): - options_div = html.Div( children=[ html.H5("Project"), @@ -421,7 +420,6 @@ def generate_options(data): def generate_dash_table(data, target, groupby="item"): - latest_build = list(data["builds"].keys())[0] label = " ".join([ele.title() for ele in target.split("_")]) @@ -476,7 +474,6 @@ def generate_dash_table(data, target, groupby="item"): def generate_top_boot_failing(data): - tabs = dbc.Tabs( [ dbc.Tab( @@ -547,7 +544,7 @@ def generate_dmesg_errors(data): dbc.Tab( generate_dash_table(data, "dmesg_errors_found"), tab_id="tab-2", - label="Dmeg Errors", + label="Dmesg Errors", ), ], active_tab="tab-1", @@ -567,7 +564,6 @@ def generate_dmesg_errors(data): def generate_pytest_results(data): - tabs = dbc.Tabs( [ dbc.Tab( @@ -648,7 +644,6 @@ def generate_panel(data): def report_tabs(data, active_tab="t_summary"): - tabs = dbc.Tabs( [ dbc.Tab( diff --git a/app/utility.py b/app/utility.py index 8d401c2..8d53486 100644 --- a/app/utility.py +++ b/app/utility.py @@ -45,8 +45,9 @@ def url_gen( if trigger_dict[0] == "auto": trigger_project_name = trigger_dict[1].split("/")[0] trigger_build_number = trigger_dict[2] - url_trigger = "http://{}/job/{}/{}/".format( - jenkins_server, trigger_project_name, trigger_build_number + trigger_job_name = trigger_dict[1].split("/")[1] + url_trigger = "http://{}/view/all/job/Triggers/job/{}/{}/{}".format( + jenkins_server, trigger_project_name,trigger_job_name,trigger_build_number ) else: url_trigger = trigger diff --git a/entrypoint.sh b/entrypoint.sh index be88c3d..8fa74d2 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,2 +1,3 @@ #!/usr/bin/env bash -flask run --host=0.0.0.0 +flask run --host=0.0.0.0 --port=5000 --cert=./ssl/cert.crt --key=./ssl/cert.key +# flask run --host=0.0.0.0 --port=5000 --cert=./ssl/cos_analog_com.crt --key=./ssl/cos_analog_com.key diff --git a/ssl/cert.crt b/ssl/cert.crt new file mode 100644 index 0000000..8043135 --- /dev/null +++ b/ssl/cert.crt @@ -0,0 +1,36 @@ +-----BEGIN CERTIFICATE----- +MIIGSDCCBDCgAwIBAgITYADM7k8s1bJFmzv3DQAAAMzuTzANBgkqhkiG9w0BAQsF +ADB4MRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGYW5hbG9n +MRIwEAYKCZImiZPyLGQBGRYCYWQxNTAzBgNVBAMTLEFuYWxvZyBTSEEyIEVudGVy +cHJpc2UgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTI0MTIwNDEyMTIzMVoXDTI1 +MTIwNDEyMTIzMVoweDELMAkGA1UEBhMCUEgxDzANBgNVBAgTBkNhdml0ZTEWMBQG +A1UEBxMNR2VuZXJhbCBUcmlhczEdMBsGA1UEChMUQW5hbG9nIERldmljZXMsIElu +Yy4xITAfBgNVBAMTGGFkZ3RzZWNhZDEuYWQuYW5hbG9nLmNvbTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALEdB7Rs30zJwd+ywIGUV6V+M0xmMGHs2tXS +qoLfcPtuaddRGbQeVxHbEENkJh72NiDgx9h8JcYTaQ2LNcErtl+4BakFpkpVmdk7 +uTGsg71acSvDQmPhaorsqjQv4NuhBapl+ng2nK8r4RuJy61asOCovHqQfxSfpZOr +Qr+6khdO8Gz7MjSHY37hvcoKogo5vnsEefLVxDg9ZxJRoa3Y6cFWp5ZL+bda0s5f +ldkPEuZt/4pEtfAICQjAYXZXrFbIMyJ90V41Ldq5XHSTuvqEXaKXYw+ZSo1BFcQX +zwweM3VnPn05O0VM/vlZFGMSrsLny1RYnPNAjZyZvjYlzQgg40cCAwEAAaOCAckw +ggHFMBwGA1UdEQQVMBOCEWNvcy5hZC5hbmFsb2cuY29tMB0GA1UdDgQWBBSQJJHy +Q67iCqSEsZEkVJqBgugvQzAfBgNVHSMEGDAWgBQ9WhDmqMRx2Ym0IuBzzmSfn8Ua +mzA8BgNVHR8ENTAzMDGgL6AthitodHRwOi8vcGtpLmFkLmFuYWxvZy5jb20vcGtp +L0FOQUxPRy1FQ0EuY3JsMIGoBggrBgEFBQcBAQSBmzCBmDBrBggrBgEFBQcwAoZf +aHR0cDovL3BraS5hZC5hbmFsb2cuY29tL3BraS9BTkFMT0ctRUNBQW5hbG9nJTIw +U0hBMiUyMEVudGVycHJpc2UlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eS5jcnQw +KQYIKwYBBQUHMAGGHWh0dHA6Ly9wa2kuYWQuYW5hbG9nLmNvbS9vY3NwMAsGA1Ud +DwQEAwIFoDA9BgkrBgEEAYI3FQcEMDAuBiYrBgEEAYI3FQiBor5hhtuiNumdHobF +1xKBybIugQGEvMpthObkdgIBZAIBDjATBgNVHSUEDDAKBggrBgEFBQcDATAbBgkr +BgEEAYI3FQoEDjAMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4ICAQCNtPnP +Xf4liCjaEh/Opdj1qzG7371vSSFpVdX63Njj06qtZwG2mMOx9efkvYJC2GIDn3Yn +SbwnPZo/JDoviYjTqsE0MpJUbq9XFwpBTKD6iLNWelbrmlcUztmXOGrCvAUYhRmC +1RmVCqcThdj1+J1LdIEGUT1rq6MW0X90DQ0EngAxuEgPP+xebDY6aZu9tN82PD0k +jqox6yTDw5sZeKKH14QkQaZVx/qKw744v70lvwaTfkOXQveR2S2kbOSqW8GP8vrj +AsGL2ZHR4bOoRNS2tsu2mfcTGhjDXDFpAsG2oAgV7a87/QzAgD6oW4Af7l2i3xb5 +zLcrsS7iqb7ASAtolHhyqrWPtaZCQDoR3bT0o5YJIdmip0BBQy4MBIdrsZmBjAd6 +/R5Jc5t2YTDm0nSU7BYHYrthP+WIIgJtZyU0k53TCoQqjS1tSKwfUlRF2ZXLIeCU +3x+U4no5G9DVxWTMhnqLx7WzIkLkPCrxaGCumN5L69y6d60U0qtdPxurXJokT6d0 +3HkUrMSi3SIbhLichSr8Q5XWlgvDSsykpvdHUNfrvAOOZINOZg+m33yiHcQ7u+OI +nE7u5uJ8AjkSoA2k/zXZtLHlG4oGmXcgjndbqcudo7o9LxodO3V/S3o4/m2LwAh8 +rshBGgsCRVmAf5wSkWItcieRncM/3ABUu685gA== +-----END CERTIFICATE----- diff --git a/ssl/cert.key b/ssl/cert.key new file mode 100644 index 0000000..51051d3 --- /dev/null +++ b/ssl/cert.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCxHQe0bN9MycHf +ssCBlFelfjNMZjBh7NrV0qqC33D7bmnXURm0HlcR2xBDZCYe9jYg4MfYfCXGE2kN +izXBK7ZfuAWpBaZKVZnZO7kxrIO9WnErw0Jj4WqK7Ko0L+DboQWqZfp4NpyvK+Eb +icutWrDgqLx6kH8Un6WTq0K/upIXTvBs+zI0h2N+4b3KCqIKOb57BHny1cQ4PWcS +UaGt2OnBVqeWS/m3WtLOX5XZDxLmbf+KRLXwCAkIwGF2V6xWyDMifdFeNS3auVx0 +k7r6hF2il2MPmUqNQRXEF88MHjN1Zz59OTtFTP75WRRjEq7C58tUWJzzQI2cmb42 +Jc0IIONHAgMBAAECggEATY9sbdcVjH93/rm9MqGfJjJXTZgcjO2XwXZhRDGMPRcT +k36I9oco0wFvJEvpo7pnZst4yLVJJ24dnZg+YIr/cPhZxjRap4fH+Uj9pyKoiFXg +ZG08GBhBO3g7auIioptnq0DASD+GKvHYwOH9hztFZQSPkU7Qz9u/uySO9P5Ddp/Y +PxQ1IFAxrb6IvruN2/ICzyr8IcWeiOv0Ass4+jEVGdrPU+lKQxBsIEFzTOd4zPBa +7DRGAiFHmNpRv4d3PmZXIwV6OsOVF6f6urYXOWMF3Rym8bQ5Jy33Z9Q6en4TEZS2 +QbC6LTo7XvMnwCus13NJ7R2mcP6kWUD+vjCUqjJNvQKBgQDplAqydB3KHS5NoFxg +hYBNkaiynZwGzfAAmHpTIwGY1/a6fbEW0SI8dGHVHys7DtbP+opv30A850dyLelg +q14RNpJwuemV5XQFolWf4c2HMgNats0fdZot1gruM/qPOnrEx0k4IfngBIwPQcXm +94xRgkV4exPkGt+/ZzQ6eHg/FQKBgQDCHWs4AfsNr5IeFTlzs9UHRSyP9IV7QnPI +olFn8V8lv4uLHLq/QHMniV1f+fpXkG8okCrcOLQxkWftg39NuhLpihRIT26TIDKi +iFwWKx5TUHdPRW0dC1LNh0k7m6JgZqbPwi0LUEcmPgZo3cfQahjF6MDT+nbEPa+h +XFKwwwnP6wKBgAyhjNKJpPLBETfxbA1sKrwHHHBMRZu4lznxBOxqADQbuaPsGB97 +v7Y1NPUpclUHQGaOzd2u3PJuL1blVLF9kuCras/dvdv1RIjpdmfm9g5RjgzhxcXl +viisYnrvJKWKLAloHXWDoNeUZ16L1//dcyEVQlx5i2HScjcPhauDyDzhAoGBAI1D +NXy7zESoaVBlJ7swuq2gxI46Z01NDc+LeGyJNjHVVCq3jJuTvnmeOIqY83r3zD0b +tWUwCsorxBMP5/vbltnHt3zr+U8uVkr7qvAjDt2YqErS/lXtoKObeUrctu0qpuh4 +qakbEbwd1TJJe5kLLN4RxQo+smGbdo2aDz89oI1jAoGBAMsb9SKsS5gDfptkJ/bE ++40qkzGZC5C5Bza55hzgzJZZdgygCYBD5JhovwD/adFEDNUUyYqaRTvNP+/03QYr +AKlrySB7Fk79HlQf38McbmsJOd+9vytW1uwSPGQcqu0wrPQxmNLJMfZN8hkvJXQW +Oly/6TeqYav+EBmD+ECE8vMM +-----END PRIVATE KEY----- diff --git a/ssl/cos_analog_com.crt b/ssl/cos_analog_com.crt new file mode 100644 index 0000000..8043135 --- /dev/null +++ b/ssl/cos_analog_com.crt @@ -0,0 +1,36 @@ +-----BEGIN CERTIFICATE----- +MIIGSDCCBDCgAwIBAgITYADM7k8s1bJFmzv3DQAAAMzuTzANBgkqhkiG9w0BAQsF +ADB4MRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGYW5hbG9n +MRIwEAYKCZImiZPyLGQBGRYCYWQxNTAzBgNVBAMTLEFuYWxvZyBTSEEyIEVudGVy +cHJpc2UgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTI0MTIwNDEyMTIzMVoXDTI1 +MTIwNDEyMTIzMVoweDELMAkGA1UEBhMCUEgxDzANBgNVBAgTBkNhdml0ZTEWMBQG +A1UEBxMNR2VuZXJhbCBUcmlhczEdMBsGA1UEChMUQW5hbG9nIERldmljZXMsIElu +Yy4xITAfBgNVBAMTGGFkZ3RzZWNhZDEuYWQuYW5hbG9nLmNvbTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALEdB7Rs30zJwd+ywIGUV6V+M0xmMGHs2tXS +qoLfcPtuaddRGbQeVxHbEENkJh72NiDgx9h8JcYTaQ2LNcErtl+4BakFpkpVmdk7 +uTGsg71acSvDQmPhaorsqjQv4NuhBapl+ng2nK8r4RuJy61asOCovHqQfxSfpZOr +Qr+6khdO8Gz7MjSHY37hvcoKogo5vnsEefLVxDg9ZxJRoa3Y6cFWp5ZL+bda0s5f +ldkPEuZt/4pEtfAICQjAYXZXrFbIMyJ90V41Ldq5XHSTuvqEXaKXYw+ZSo1BFcQX +zwweM3VnPn05O0VM/vlZFGMSrsLny1RYnPNAjZyZvjYlzQgg40cCAwEAAaOCAckw +ggHFMBwGA1UdEQQVMBOCEWNvcy5hZC5hbmFsb2cuY29tMB0GA1UdDgQWBBSQJJHy +Q67iCqSEsZEkVJqBgugvQzAfBgNVHSMEGDAWgBQ9WhDmqMRx2Ym0IuBzzmSfn8Ua +mzA8BgNVHR8ENTAzMDGgL6AthitodHRwOi8vcGtpLmFkLmFuYWxvZy5jb20vcGtp +L0FOQUxPRy1FQ0EuY3JsMIGoBggrBgEFBQcBAQSBmzCBmDBrBggrBgEFBQcwAoZf +aHR0cDovL3BraS5hZC5hbmFsb2cuY29tL3BraS9BTkFMT0ctRUNBQW5hbG9nJTIw +U0hBMiUyMEVudGVycHJpc2UlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eS5jcnQw +KQYIKwYBBQUHMAGGHWh0dHA6Ly9wa2kuYWQuYW5hbG9nLmNvbS9vY3NwMAsGA1Ud +DwQEAwIFoDA9BgkrBgEEAYI3FQcEMDAuBiYrBgEEAYI3FQiBor5hhtuiNumdHobF +1xKBybIugQGEvMpthObkdgIBZAIBDjATBgNVHSUEDDAKBggrBgEFBQcDATAbBgkr +BgEEAYI3FQoEDjAMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4ICAQCNtPnP +Xf4liCjaEh/Opdj1qzG7371vSSFpVdX63Njj06qtZwG2mMOx9efkvYJC2GIDn3Yn +SbwnPZo/JDoviYjTqsE0MpJUbq9XFwpBTKD6iLNWelbrmlcUztmXOGrCvAUYhRmC +1RmVCqcThdj1+J1LdIEGUT1rq6MW0X90DQ0EngAxuEgPP+xebDY6aZu9tN82PD0k +jqox6yTDw5sZeKKH14QkQaZVx/qKw744v70lvwaTfkOXQveR2S2kbOSqW8GP8vrj +AsGL2ZHR4bOoRNS2tsu2mfcTGhjDXDFpAsG2oAgV7a87/QzAgD6oW4Af7l2i3xb5 +zLcrsS7iqb7ASAtolHhyqrWPtaZCQDoR3bT0o5YJIdmip0BBQy4MBIdrsZmBjAd6 +/R5Jc5t2YTDm0nSU7BYHYrthP+WIIgJtZyU0k53TCoQqjS1tSKwfUlRF2ZXLIeCU +3x+U4no5G9DVxWTMhnqLx7WzIkLkPCrxaGCumN5L69y6d60U0qtdPxurXJokT6d0 +3HkUrMSi3SIbhLichSr8Q5XWlgvDSsykpvdHUNfrvAOOZINOZg+m33yiHcQ7u+OI +nE7u5uJ8AjkSoA2k/zXZtLHlG4oGmXcgjndbqcudo7o9LxodO3V/S3o4/m2LwAh8 +rshBGgsCRVmAf5wSkWItcieRncM/3ABUu685gA== +-----END CERTIFICATE----- diff --git a/ssl/cos_analog_com.key b/ssl/cos_analog_com.key new file mode 100644 index 0000000..51051d3 --- /dev/null +++ b/ssl/cos_analog_com.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCxHQe0bN9MycHf +ssCBlFelfjNMZjBh7NrV0qqC33D7bmnXURm0HlcR2xBDZCYe9jYg4MfYfCXGE2kN +izXBK7ZfuAWpBaZKVZnZO7kxrIO9WnErw0Jj4WqK7Ko0L+DboQWqZfp4NpyvK+Eb +icutWrDgqLx6kH8Un6WTq0K/upIXTvBs+zI0h2N+4b3KCqIKOb57BHny1cQ4PWcS +UaGt2OnBVqeWS/m3WtLOX5XZDxLmbf+KRLXwCAkIwGF2V6xWyDMifdFeNS3auVx0 +k7r6hF2il2MPmUqNQRXEF88MHjN1Zz59OTtFTP75WRRjEq7C58tUWJzzQI2cmb42 +Jc0IIONHAgMBAAECggEATY9sbdcVjH93/rm9MqGfJjJXTZgcjO2XwXZhRDGMPRcT +k36I9oco0wFvJEvpo7pnZst4yLVJJ24dnZg+YIr/cPhZxjRap4fH+Uj9pyKoiFXg +ZG08GBhBO3g7auIioptnq0DASD+GKvHYwOH9hztFZQSPkU7Qz9u/uySO9P5Ddp/Y +PxQ1IFAxrb6IvruN2/ICzyr8IcWeiOv0Ass4+jEVGdrPU+lKQxBsIEFzTOd4zPBa +7DRGAiFHmNpRv4d3PmZXIwV6OsOVF6f6urYXOWMF3Rym8bQ5Jy33Z9Q6en4TEZS2 +QbC6LTo7XvMnwCus13NJ7R2mcP6kWUD+vjCUqjJNvQKBgQDplAqydB3KHS5NoFxg +hYBNkaiynZwGzfAAmHpTIwGY1/a6fbEW0SI8dGHVHys7DtbP+opv30A850dyLelg +q14RNpJwuemV5XQFolWf4c2HMgNats0fdZot1gruM/qPOnrEx0k4IfngBIwPQcXm +94xRgkV4exPkGt+/ZzQ6eHg/FQKBgQDCHWs4AfsNr5IeFTlzs9UHRSyP9IV7QnPI +olFn8V8lv4uLHLq/QHMniV1f+fpXkG8okCrcOLQxkWftg39NuhLpihRIT26TIDKi +iFwWKx5TUHdPRW0dC1LNh0k7m6JgZqbPwi0LUEcmPgZo3cfQahjF6MDT+nbEPa+h +XFKwwwnP6wKBgAyhjNKJpPLBETfxbA1sKrwHHHBMRZu4lznxBOxqADQbuaPsGB97 +v7Y1NPUpclUHQGaOzd2u3PJuL1blVLF9kuCras/dvdv1RIjpdmfm9g5RjgzhxcXl +viisYnrvJKWKLAloHXWDoNeUZ16L1//dcyEVQlx5i2HScjcPhauDyDzhAoGBAI1D +NXy7zESoaVBlJ7swuq2gxI46Z01NDc+LeGyJNjHVVCq3jJuTvnmeOIqY83r3zD0b +tWUwCsorxBMP5/vbltnHt3zr+U8uVkr7qvAjDt2YqErS/lXtoKObeUrctu0qpuh4 +qakbEbwd1TJJe5kLLN4RxQo+smGbdo2aDz89oI1jAoGBAMsb9SKsS5gDfptkJ/bE ++40qkzGZC5C5Bza55hzgzJZZdgygCYBD5JhovwD/adFEDNUUyYqaRTvNP+/03QYr +AKlrySB7Fk79HlQf38McbmsJOd+9vytW1uwSPGQcqu0wrPQxmNLJMfZN8hkvJXQW +Oly/6TeqYav+EBmD+ECE8vMM +-----END PRIVATE KEY-----