{"configuration":{},"description":"Intelligent all-season road maintenance platform","documentation":{},"id":13,"lastModifiedAgent":"structurizr-onpremises/dsl-editor/00411e44-981a-48c8-a808-c99778cccb2e","lastModifiedDate":"2025-09-18T08:11:12Z","lastModifiedUser":"lauma.jokste","model":{"people":[{"group":"Municipality","id":"1","location":"Unspecified","name":"Responsible for financial resources","properties":{"structurizr.dsl.identifier":"financialresponsible"},"relationships":[{"description":"uses the platform","destinationId":"10","id":"67","sourceId":"1","tags":"Relationship"},{"description":"uses the system","destinationId":"7","id":"69","sourceId":"1","tags":"Relationship"}],"tags":"Element,Person"},{"group":"Municipality","id":"2","location":"Unspecified","name":"Responsible for road maintenance","properties":{"structurizr.dsl.identifier":"roadresponsible"},"relationships":[{"description":"uses the platform","destinationId":"10","id":"68","sourceId":"2","tags":"Relationship"}],"tags":"Element,Person"},{"group":"Road Maintenance","id":"3","location":"Unspecified","name":"Road Maintenance","properties":{"structurizr.dsl.identifier":"roadmaintainer"},"relationships":[{"description":"uses to survey the road condition","destinationId":"8","id":"71","sourceId":"3","tags":"Relationship"},{"description":"sends or retrieves data","destinationId":"9","id":"72","sourceId":"3","tags":"Relationship"}],"tags":"Element,Person"},{"group":"Road Maintenance","id":"4","location":"Unspecified","name":"Latvian State Roads","properties":{"structurizr.dsl.identifier":"lvc"},"tags":"Element,Person"},{"id":"5","location":"Unspecified","name":"Maintenance Recommendations Analyst","properties":{"structurizr.dsl.identifier":"roadexpert"},"relationships":[{"description":"manages road maintenance recommendations","destinationId":"29","id":"74","sourceId":"5","tags":"Relationship"},{"description":"manages road maintenance recommendations","destinationId":"10","id":"75","linkedRelationshipId":"74","sourceId":"5"}],"tags":"Element,Person"},{"id":"6","location":"Unspecified","name":"User","properties":{"structurizr.dsl.identifier":"user"},"relationships":[{"description":"Uses visualization tools for report visualization","destinationId":"26","id":"119","sourceId":"6","tags":"Relationship"},{"description":"Uses visualization tools for report visualization","destinationId":"25","id":"120","linkedRelationshipId":"119","sourceId":"6"},{"description":"Uses visualization tools for report visualization","destinationId":"10","id":"121","linkedRelationshipId":"119","sourceId":"6"}],"tags":"Element,Person"}],"properties":{"structurizr.groupSeparator":"."},"softwareSystems":[{"description":"Municipal Resource Management System","documentation":{},"id":"7","location":"Unspecified","name":"ERP Module","properties":{"structurizr.dsl.identifier":"erpsystem","nfr":"ERP-NF-01","fr":"ERP-F-01,ERP-F-02,ERP-F-03"},"relationships":[{"description":"requests data for work planning","destinationId":"55","id":"87","sourceId":"7","tags":"Relationship"},{"description":"requests data for work planning","destinationId":"10","id":"88","linkedRelationshipId":"87","sourceId":"7"},{"description":"Requests data","destinationId":"56","id":"115","sourceId":"7","tags":"Relationship"}],"tags":"Element,Software System,external"},{"description":"Films the roadway and sends video streams to the platform","documentation":{},"id":"8","location":"Unspecified","name":"Mobile Application","properties":{"structurizr.dsl.identifier":"mobileapplication"},"relationships":[{"description":"sends video stream data","destinationId":"10","id":"70","sourceId":"8","tags":"Relationship"},{"description":"sends data","destinationId":"43","id":"84","sourceId":"8","tags":"Relationship"},{"description":"Sends data","destinationId":"44","id":"111","sourceId":"8","tags":"Relationship"}],"tags":"Element,Software System,external"},{"description":"Sends or retrieves data from the platform","documentation":{},"id":"9","location":"Unspecified","name":"External System","properties":{"structurizr.dsl.identifier":"externalsystem","fr":"ERP-NF-01"},"relationships":[{"description":"retrieves data via API","destinationId":"4","id":"73","sourceId":"9","tags":"Relationship"},{"description":"requests and/or sends data","destinationId":"50","id":"82","sourceId":"9","tags":"Relationship"},{"description":"requests and/or sends data","destinationId":"10","id":"83","linkedRelationshipId":"82","sourceId":"9"},{"description":"sends data","destinationId":"43","id":"85","sourceId":"9","tags":"Relationship"},{"description":"Sends data","destinationId":"44","id":"110","sourceId":"9","tags":"Relationship"}],"tags":"Element,Software System,external"},{"containers":[{"components":[{"description":"Provides KPI report generation for visualization","documentation":{},"id":"12","name":"KPI management service","properties":{"structurizr.dsl.identifier":"iromplatform.optimizationservice.kpireportingservice"},"tags":"Element,Component"},{"description":"Provides KPI calculation","documentation":{},"id":"13","name":"KPI calculation service","properties":{"structurizr.dsl.identifier":"iromplatform.optimizationservice.kpicalculationservice"},"relationships":[{"description":"uses predefined formulas and calculates KPI","destinationId":"14","id":"128","sourceId":"13","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores KPI calculation formulas, calculated KPIs and reports","documentation":{},"id":"14","name":"KPI database","properties":{"structurizr.dsl.identifier":"iromplatform.optimizationservice.kpidatabase"},"relationships":[{"description":"retrieves calculated KPIs and generates reports for visualization","destinationId":"12","id":"127","sourceId":"14","tags":"Relationship"}],"tags":"Element,Component,DB","technology":"Postgres SQL"}],"documentation":{},"id":"11","name":"Optimization service (KPI calculations)","properties":{"structurizr.dsl.identifier":"iromplatform.optimizationservice"},"relationships":[{"description":"requests data for KPI calculations","destinationId":"15","id":"89","sourceId":"11","tags":"Relationship"}],"tags":"Element,Container"},{"components":[{"description":"Provides request services and secure, centralized access to system components","documentation":{},"id":"16","name":"Load balancer and proxy","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.loadbalancer","fr":"SA-F-01"},"tags":"Element,Component","technology":"Traefik Ingress"},{"description":"Provides storage and reading of data flow","documentation":{},"id":"17","name":"Data flow queue","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.datapipeline"},"tags":"Element,Component,Pipeline","technology":"Apache Kafka"},{"description":"Provides data storage","documentation":{},"id":"18","name":"Database","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.database"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Provides platform monitoring","documentation":{},"id":"19","name":"Monitoring system","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.monitoring","fr":"SA-F-03"},"tags":"Element,Component","technology":"Zabbix"},{"description":"Provides user creation, roles and access","documentation":{},"id":"20","name":"Security Management","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.securitymanagement"},"tags":"Element,Component","technology":"Keycloak"},{"description":"Provides container deployment and scaling","documentation":{},"id":"21","name":"Container Orchestrator","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.containermanager","nfr":"SA-NF-01,SA-NF-02","fr":"SA-F-01,SA-F-02,SA-F-03,SA-F-04"},"tags":"Element,Component","technology":"Docker Swarm + Portainer"},{"description":"Anonymizes sensitive data","documentation":{},"id":"22","name":"Anonymization Service","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.anonymizationservice"},"tags":"Element,Component"},{"description":"Ensures secure storage, access, and secure management of secret data","documentation":{},"id":"23","name":"Secret Data Management Service","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.secretdatamanager","nfr":"DP-NF-03"},"tags":"Element,Component","technology":"HashiCorp Vault"},{"description":"Saves data submitted by data providers from the queue","documentation":{},"id":"24","name":"Data Archiving Service","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices.dataarchiver"},"tags":"Element,Component"}],"description":"Services that ensure the operation of the platform","documentation":{},"id":"15","name":"Platform services","properties":{"structurizr.dsl.identifier":"iromplatform.platformservices","fr":"SA-F-03"},"tags":"Element,Container,MainContainer"},{"components":[{"description":"Enables internal users to visualize data.","documentation":{},"id":"26","name":"Data Visualization Service","properties":{"structurizr.dsl.identifier":"iromplatform.datavisualizationservice.datavisualizationservicemodel"},"relationships":[{"description":"Requests road condition data","destinationId":"27","id":"117","sourceId":"26","tags":"Relationship"},{"description":"Checks permissions","destinationId":"28","id":"118","sourceId":"26","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores data about road conditions","documentation":{},"id":"27","name":"Road condition data","properties":{"structurizr.dsl.identifier":"iromplatform.datavisualizationservice.datavisualizationservicedatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Verifies user rights to access data","documentation":{},"id":"28","name":"Access control module","properties":{"structurizr.dsl.identifier":"iromplatform.datavisualizationservice.datavisualizationserviceaccesscontrol"},"tags":"Element,Component","technology":"Keycloak"}],"description":"Enables data visualization","documentation":{},"id":"25","name":"Data Visualization Service","properties":{"structurizr.dsl.identifier":"iromplatform.datavisualizationservice"},"relationships":[{"description":"requests data for maps, reports, layers","destinationId":"15","id":"76","sourceId":"25","tags":"Relationship"}],"tags":"Element,Container"},{"components":[{"description":"Selects law(s) (recommendations) appropriate to the input data","documentation":{},"group":"Law engine","id":"30","name":"Law engine","properties":{"structurizr.dsl.identifier":"iromplatform.decisionmakingmodule.decisionmakingmoduleframework"},"relationships":[{"description":"Reads data","destinationId":"32","id":"122","sourceId":"30","tags":"Relationship"},{"description":"Sends data","destinationId":"33","id":"124","sourceId":"30","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Web page allows the user to view/define decisions.","documentation":{},"group":"Law engine","id":"31","name":"Law definition website","properties":{"structurizr.dsl.identifier":"iromplatform.decisionmakingmodule.decisionmakingmoduleweb"},"relationships":[{"description":"Monitors laws","destinationId":"30","id":"123","sourceId":"31","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores information about the condition of identified roads","documentation":{},"id":"32","name":"Road condition data queue","properties":{"structurizr.dsl.identifier":"iromplatform.decisionmakingmodule.decisionmakingmoduleroadpipeline"},"tags":"Element,Component,Pipeline","technology":"Kafka"},{"description":"Stores recommendations generated by the rule engine","documentation":{},"id":"33","name":"Recommendation data queue","properties":{"structurizr.dsl.identifier":"iromplatform.decisionmakingmodule.decisionmakingmodulerecomendationpipeline"},"tags":"Element,Component,Pipeline","technology":"Kafka"},{"description":"Reads recommendations obtained by the decision engine from the data queue","documentation":{},"id":"34","name":"Recommendation management service","properties":{"structurizr.dsl.identifier":"iromplatform.decisionmakingmodule.decisionmakingmodulearchivator"},"relationships":[{"description":"Reads data","destinationId":"33","id":"125","sourceId":"34","tags":"Relationship"},{"description":"Saves data","destinationId":"35","id":"126","sourceId":"34","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores recommendations obtained by the decision engine","documentation":{},"id":"35","name":"Recommendation database","properties":{"structurizr.dsl.identifier":"iromplatform.decisionmakingmodule.decisionmakingmoduledatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"}],"description":"Generates road maintenance recommendations","documentation":{},"id":"29","name":"Decision support module","properties":{"structurizr.dsl.identifier":"iromplatform.decisionmakingmodule"},"relationships":[{"description":"requests data and sends the generated recommendations","destinationId":"15","id":"81","sourceId":"29","tags":"Relationship"}],"tags":"Element,Container"},{"components":[{"description":"Cleans and prepares input data for models","documentation":{},"id":"37","name":"Data Preprocessing Service","properties":{"structurizr.dsl.identifier":"iromplatform.analysismodule.datapreprocessingcomponent"},"relationships":[{"description":"transfers cleaned and prepared data for further analysis and processing","destinationId":"39","id":"93","sourceId":"37","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Manages model versions, loading, configuration","documentation":{},"id":"38","name":"Model Management Component","properties":{"structurizr.dsl.identifier":"iromplatform.analysismodule.modelmanager","hint":"ML models can be defined in code or a repository of ML models can be created and model execution can be initiated from the repository. If models are run from code, this component is not needed."},"relationships":[{"description":"loads ML models","destinationId":"39","id":"90","sourceId":"38","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Performs model execution and results classification","documentation":{},"id":"39","name":"Machine Learning Model Execution Engine","properties":{"structurizr.dsl.identifier":"iromplatform.analysismodule.mlmodel","nfr":"DP-NF-01"},"relationships":[{"description":"sends results","destinationId":"41","id":"91","sourceId":"39","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores road images","documentation":{},"id":"40","name":"Road Image Queue","properties":{"structurizr.dsl.identifier":"iromplatform.analysismodule.analysismoduleroaddatapipeline","fr":"M-F-01"},"relationships":[{"description":"receives road images for preprocessing","destinationId":"37","id":"92","sourceId":"40","tags":"Relationship"}],"tags":"Element,Component,Pipeline","technology":"Kafka"},{"description":"Stores information about the state of identified roads","documentation":{},"id":"41","name":"Model Result Queue","properties":{"structurizr.dsl.identifier":"iromplatform.analysismodule.analysismoduleroadresultpipeline"},"tags":"Element,Component,Pipeline","technology":"Kafka"},{"description":"Stores information about available ML models","documentation":{},"id":"42","name":"ML Model Data","properties":{"structurizr.dsl.identifier":"iromplatform.analysismodule.analysismodulemanagerloaderdb"},"relationships":[{"description":"loads models","destinationId":"38","id":"94","sourceId":"42","tags":"Relationship"}],"tags":"Element,Component,DB","technology":"Postgres SQL"}],"description":"Analyzes and interprets road conditions and hazards","documentation":{},"id":"36","name":"Analysis and Classification Module","properties":{"structurizr.dsl.identifier":"iromplatform.analysismodule"},"relationships":[{"description":"requests data and sends the obtained results","destinationId":"15","id":"80","sourceId":"36","tags":"Relationship"}],"tags":"Element,Container"},{"components":[{"description":"Ensures data ingest from various sources","documentation":{},"id":"44","name":"Data Ingestion Module","properties":{"structurizr.dsl.identifier":"iromplatform.dataingestionservice.dataingestionservicemodel","nfr":"DP-NF-01"},"relationships":[{"description":"Sends data","destinationId":"45","id":"105","sourceId":"44","tags":"Relationship"},{"description":"Checks permissions","destinationId":"48","id":"109","sourceId":"44","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Anonymizes incoming sensitive data","documentation":{},"id":"45","name":"Data Anonymizer","properties":{"structurizr.dsl.identifier":"iromplatform.dataingestionservice.dataingestionserviceanonymization"},"relationships":[{"description":"Sends data to a queue","destinationId":"47","id":"108","sourceId":"45","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores incoming, anonymized data","documentation":{},"id":"46","name":"Anonymized data","properties":{"structurizr.dsl.identifier":"iromplatform.dataingestionservice.dataingestionservicedatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Stores information for further processing about the current road state","documentation":{},"id":"47","name":"Road state data queue","properties":{"structurizr.dsl.identifier":"iromplatform.dataingestionservice.dataingestionservicedatapipeline"},"tags":"Element,Component,Pipeline","technology":"Kafka"},{"description":"Checks user rights to access data","documentation":{},"id":"48","name":"Access control module","properties":{"structurizr.dsl.identifier":"iromplatform.dataingestionservice.dataingestionserviceaccesscontrol"},"tags":"Element,Component","technology":"Keycloak"},{"description":"Reads data from the queue and stores it in the database.","documentation":{},"id":"49","name":"Data archiver","properties":{"structurizr.dsl.identifier":"iromplatform.dataingestionservice.dataingestionservicedataarchiver"},"relationships":[{"description":"Saves data","destinationId":"46","id":"106","sourceId":"49","tags":"Relationship"},{"description":"Reads data from a queue","destinationId":"47","id":"107","sourceId":"49","tags":"Relationship"}],"tags":"Element,Component","technology":"NodeJs"}],"description":"Enables external systems to transfer data to the platform","documentation":{},"id":"43","name":"Data Ingestion Service","properties":{"structurizr.dsl.identifier":"iromplatform.dataingestionservice"},"relationships":[{"description":"sends data for analysis","destinationId":"15","id":"86","sourceId":"43","tags":"Relationship"}],"tags":"Element,Container"},{"components":[{"description":"Enables access to data and checks data access rights for external users","documentation":{},"id":"51","name":"Data Sharing Component","properties":{"structurizr.dsl.identifier":"iromplatform.datasharingservice.datasharingmodule","hint":"reactive delivery - data by query or pull principle"},"relationships":[{"description":"Requests path state data","destinationId":"52","id":"102","sourceId":"51","tags":"Relationship"},{"description":"Requests saved notification data","destinationId":"53","id":"103","sourceId":"51","tags":"Relationship"},{"description":"Checks permissions","destinationId":"54","id":"104","sourceId":"51","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores information about road conditions","documentation":{},"id":"52","name":"Road condition data","properties":{"structurizr.dsl.identifier":"iromplatform.datasharingservice.datasharingservicedatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Enables storage of notifications generated by the service","documentation":{},"id":"53","name":"Notification database","properties":{"structurizr.dsl.identifier":"iromplatform.datasharingservice.datasharingservicenotificationdatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Checks user rights to access data","documentation":{},"id":"54","name":"Access Management Module","properties":{"structurizr.dsl.identifier":"iromplatform.datasharingservice.datasharingaccesscontrol"},"tags":"Element,Component","technology":"Keycloak"}],"description":"Enables external systems to request data from the platform","documentation":{},"id":"50","name":"Data sharing service","properties":{"structurizr.dsl.identifier":"iromplatform.datasharingservice"},"relationships":[{"description":"uses platform services to share data with external systems","destinationId":"15","id":"78","sourceId":"50","tags":"Relationship"}],"tags":"Element,Container"},{"components":[{"description":"Provides access to data and checks data access rights for ERP system users","documentation":{},"id":"56","name":"ERP integration module","properties":{"structurizr.dsl.identifier":"iromplatform.erpintegrationmodule.erpintegrationmodulecomponent"},"relationships":[{"description":"Requests path state data","destinationId":"57","id":"112","sourceId":"56","tags":"Relationship"},{"description":"Requests saved notification data","destinationId":"58","id":"113","sourceId":"56","tags":"Relationship"},{"description":"Checks permissions","destinationId":"59","id":"114","sourceId":"56","tags":"Relationship"},{"description":"Requests data for KPI calculations from the ERP system","destinationId":"60","id":"116","sourceId":"56","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores information about road conditions","documentation":{},"id":"57","name":"Road condition data","properties":{"structurizr.dsl.identifier":"iromplatform.erpintegrationmodule.erpintegrationmoduledatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Provides storage of service-generated notifications","documentation":{},"id":"58","name":"Notification database","properties":{"structurizr.dsl.identifier":"iromplatform.erpintegrationmodule.erpintegrationmodulenotificationdatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Checks user rights to access data","documentation":{},"id":"59","name":"Access management module","properties":{"structurizr.dsl.identifier":"iromplatform.erpintegrationmodule.erpintegrationmoduleaccesscontrol"},"tags":"Element,Component","technology":"Keycloak"},{"description":"Work management database for KPI calculations","documentation":{},"id":"60","name":"KPI database","properties":{"structurizr.dsl.identifier":"iromplatform.erpintegrationmodule.kpidataexchangedb"},"tags":"Element,Component,DB","technology":"Postgres SQL"}],"description":"Enables data exchange with the ERP system","documentation":{},"id":"55","name":"ERP Integration Module","properties":{"structurizr.dsl.identifier":"iromplatform.erpintegrationmodule","fr":"SA-F-05,DP-F-01"},"relationships":[{"description":"uses platform services to exchange data with ERP system","destinationId":"15","id":"79","sourceId":"55","tags":"Relationship"}],"tags":"Element,Container"},{"components":[{"description":"Generates notifications using templates and recipients","documentation":{},"id":"62","name":"Notification Generator","properties":{"structurizr.dsl.identifier":"iromplatform.notificationservice.notificationgenerator"},"relationships":[{"description":"Reads current road condition","destinationId":"63","id":"95","sourceId":"62","tags":"Relationship"},{"description":"Saves generated notifications","destinationId":"64","id":"96","sourceId":"62","tags":"Relationship"},{"description":"Requests notification templates","destinationId":"65","id":"97","sourceId":"62","tags":"Relationship"},{"description":"Sends notifications","destinationId":"9","id":"98","sourceId":"62","tags":"Relationship"},{"description":"Checks external system access rights","destinationId":"66","id":"101","sourceId":"62","tags":"Relationship"}],"tags":"Element,Component"},{"description":"Stores information about the condition of identified roads","documentation":{},"id":"63","name":"Road Condition Data Queue","properties":{"structurizr.dsl.identifier":"iromplatform.notificationservice.roadconditionpipeline"},"tags":"Element,Component,Pipeline","technology":"Kafka"},{"description":"Provides storage of service-generated notifications","documentation":{},"id":"64","name":"Notification Database","properties":{"structurizr.dsl.identifier":"iromplatform.notificationservice.notificationdatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Provides storage of service notification templates","documentation":{},"id":"65","name":"Notification template database","properties":{"structurizr.dsl.identifier":"iromplatform.notificationservice.notificationtemplatedatabase"},"tags":"Element,Component,DB","technology":"Postgres SQL"},{"description":"Verifies user rights to receive notifications","documentation":{},"id":"66","name":"Access management module","properties":{"structurizr.dsl.identifier":"iromplatform.notificationservice.notificationserviceintegrationmoduleaccesscontrol"},"tags":"Element,Component","technology":"Keycloak"}],"description":"Provides creation of notifications","documentation":{},"id":"61","name":"Notification service","properties":{"structurizr.dsl.identifier":"iromplatform.notificationservice"},"relationships":[{"description":"uses platform services to store data","destinationId":"15","id":"77","sourceId":"61","tags":"Relationship"},{"description":"Sends notifications","destinationId":"9","id":"99","linkedRelationshipId":"98","sourceId":"61"}],"tags":"Element,Container"}],"description":"Intelligent all-season road maintenance platform","documentation":{},"id":"10","location":"Unspecified","name":"IRoM platform","properties":{"structurizr.dsl.identifier":"iromplatform"},"relationships":[{"description":"Sends notifications","destinationId":"9","id":"100","linkedRelationshipId":"98","sourceId":"10"}],"tags":"Element,Software System"}]},"name":"IRoM architecture","properties":{"structurizr.dsl":"d29ya3NwYWNlICJJUm9NIGFyY2hpdGVjdHVyZSIgIkludGVsbGlnZW50IGFsbC1zZWFzb24gcm9hZCBtYWludGVuYW5jZSBwbGF0Zm9ybSIgewoKIWlkZW50aWZpZXJzIGhpZXJhcmNoaWNhbAoKbW9kZWwgewpwcm9wZXJ0aWVzIHsKInN0cnVjdHVyaXpyLmdyb3VwU2VwYXJhdG9yIiAiLiIKfQpncm91cCAiTXVuaWNpcGFsaXR5IiB7CmZpbmFuY2lhbFJlc3BvbnNpYmxlID0gcGVyc29uICJSZXNwb25zaWJsZSBmb3IgZmluYW5jaWFsIHJlc291cmNlcyIKcm9hZFJlc3BvbnNpYmxlID0gcGVyc29uICJSZXNwb25zaWJsZSBmb3Igcm9hZCBtYWludGVuYW5jZSIKfQpncm91cCAiUm9hZCBNYWludGVuYW5jZSIgewpyb2FkTWFpbnRhaW5lciA9IHBlcnNvbiAiUm9hZCBNYWludGVuYW5jZSIKbHZjID0gcGVyc29uICJMYXR2aWFuIFN0YXRlIFJvYWRzIgp9CnJvYWRFeHBlcnQgPSBwZXJzb24gIk1haW50ZW5hbmNlIFJlY29tbWVuZGF0aW9ucyBBbmFseXN0Igp1c2VyID0gcGVyc29uICJVc2VyIgoKZXJwU3lzdGVtID0gc29mdHdhcmVTeXN0ZW0gIkVSUCBNb2R1bGUiICJNdW5pY2lwYWwgUmVzb3VyY2UgTWFuYWdlbWVudCBTeXN0ZW0iIHsKcHJvcGVydGllcyB7CiJmciIgIkVSUC1GLTAxLEVSUC1GLTAyLEVSUC1GLTAzIgoibmZyIiAiRVJQLU5GLTAxIgp9CnRhZ3MgImV4dGVybmFsIgoKfQptb2JpbGVBcHBsaWNhdGlvbiA9IHNvZnR3YXJlU3lzdGVtICJNb2JpbGUgQXBwbGljYXRpb24iICJGaWxtcyB0aGUgcm9hZHdheSBhbmQgc2VuZHMgdmlkZW8gc3RyZWFtcyB0byB0aGUgcGxhdGZvcm0iIHsKdGFncyAiZXh0ZXJuYWwiCn0KZXh0ZXJuYWxTeXN0ZW0gPSBzb2Z0d2FyZVN5c3RlbSAiRXh0ZXJuYWwgU3lzdGVtIiAiU2VuZHMgb3IgcmV0cmlldmVzIGRhdGEgZnJvbSB0aGUgcGxhdGZvcm0iIHsKcHJvcGVydGllcyB7CiJmciIiRVJQLU5GLTAxIgp9CnRhZ3MgImV4dGVybmFsIgp9CgovLyBDT05UQUlORVIgRElBR1JBTQppcm9tUGxhdGZvcm0gPSBzb2Z0d2FyZVN5c3RlbSAiSVJvTSBwbGF0Zm9ybSIgIkludGVsbGlnZW50IGFsbC1zZWFzb24gcm9hZCBtYWludGVuYW5jZSBwbGF0Zm9ybSIgewpvcHRpbWl6YXRpb25TZXJ2aWNlID0gY29udGFpbmVyICJPcHRpbWl6YXRpb24gc2VydmljZSAoS1BJIGNhbGN1bGF0aW9ucykiIHsKa3BpUmVwb3J0aW5nU2VydmljZSA9IGNvbXBvbmVudCAiS1BJIG1hbmFnZW1lbnQgc2VydmljZSIgIlByb3ZpZGVzIEtQSSByZXBvcnQgZ2VuZXJhdGlvbiBmb3IgdmlzdWFsaXphdGlvbiIKa3BpQ2FsY3VsYXRpb25TZXJ2aWNlID0gY29tcG9uZW50ICJLUEkgY2FsY3VsYXRpb24gc2VydmljZSIgIlByb3ZpZGVzIEtQSSBjYWxjdWxhdGlvbiIKa3BpRGF0YUJhc2UgPSBjb21wb25lbnQgIktQSSBkYXRhYmFzZSIgIlN0b3JlcyBLUEkgY2FsY3VsYXRpb24gZm9ybXVsYXMsIGNhbGN1bGF0ZWQgS1BJcyBhbmQgcmVwb3J0cyIgewp0YWdzICJEQiIKdGVjaG5vbG9neSAiUG9zdGdyZXMgU1FMIgp9Cn0KcGxhdGZvcm1TZXJ2aWNlcyA9IGNvbnRhaW5lciAiUGxhdGZvcm0gc2VydmljZXMiICJTZXJ2aWNlcyB0aGF0IGVuc3VyZSB0aGUgb3BlcmF0aW9uIG9mIHRoZSBwbGF0Zm9ybSIgewp0YWdzICJNYWluQ29udGFpbmVyIgpwcm9wZXJ0aWVzIHsKImZyIiAiU0EtRi0wMyIKfQpsb2FkQmFsYW5jZXIgPSBjb21wb25lbnQgIkxvYWQgYmFsYW5jZXIgYW5kIHByb3h5IiAiUHJvdmlkZXMgcmVxdWVzdCBzZXJ2aWNlcyBhbmQgc2VjdXJlLCBjZW50cmFsaXplZCBhY2Nlc3MgdG8gc3lzdGVtIGNvbXBvbmVudHMiIHsKdGVjaG5vbG9neSAiVHJhZWZpayBJbmdyZXNzIgpwcm9wZXJ0aWVzIHsKImZyIiAiU0EtRi0wMSIKfQp9CmRhdGFQaXBlbGluZSA9IGNvbXBvbmVudCAiRGF0YSBmbG93IHF1ZXVlIiAiUHJvdmlkZXMgc3RvcmFnZSBhbmQgcmVhZGluZyBvZiBkYXRhIGZsb3ciIHsKdGVjaG5vbG9neSAiQXBhY2hlIEthZmthIgp0YWdzICJQaXBlbGluZSIKfQpkYXRhYmFzZSA9IGNvbXBvbmVudCAiRGF0YWJhc2UiICJQcm92aWRlcyBkYXRhIHN0b3JhZ2UiIHsKdGVjaG5vbG9neSAiUG9zdGdyZXMgU1FMIgp0YWdzICJEQiIKfQptb25pdG9yaW5nID0gY29tcG9uZW50ICJNb25pdG9yaW5nIHN5c3RlbSIgIlByb3ZpZGVzIHBsYXRmb3JtIG1vbml0b3JpbmciIHsKdGVjaG5vbG9neSAiWmFiYml4Igpwcm9wZXJ0aWVzIHsKImZyIiAiU0EtRi0wMyIKfQp9CnNlY3VyaXR5TWFuYWdlbWVudCA9IGNvbXBvbmVudCAiU2VjdXJpdHkgTWFuYWdlbWVudCIgIlByb3ZpZGVzIHVzZXIgY3JlYXRpb24sIHJvbGVzIGFuZCBhY2Nlc3MiIHsKdGVjaG5vbG9neSAiS2V5Y2xvYWsiCn0KY29udGFpbmVyTWFuYWdlciA9IGNvbXBvbmVudCAiQ29udGFpbmVyIE9yY2hlc3RyYXRvciIgIlByb3ZpZGVzIGNvbnRhaW5lciBkZXBsb3ltZW50IGFuZCBzY2FsaW5nInsKdGVjaG5vbG9neSAiRG9ja2VyIFN3YXJtICsgUG9ydGFpbmVyIgpwcm9wZXJ0aWVzIHsKImZyIiAiU0EtRi0wMSxTQS1GLTAyLFNBLUYtMDMsU0EtRi0wNCIKIm5mciIgIlNBLU5GLTAxLFNBLU5GLTAyIgp9Cn0KYW5vbnltaXphdGlvblNlcnZpY2UgPSBjb21wb25lbnQgIkFub255bWl6YXRpb24gU2VydmljZSIgIkFub255bWl6ZXMgc2Vuc2l0aXZlIGRhdGEiCnNlY3JldERhdGFNYW5hZ2VyID0gY29tcG9uZW50ICJTZWNyZXQgRGF0YSBNYW5hZ2VtZW50IFNlcnZpY2UiICJFbnN1cmVzIHNlY3VyZSBzdG9yYWdlLCBhY2Nlc3MsIGFuZCBzZWN1cmUgbWFuYWdlbWVudCBvZiBzZWNyZXQgZGF0YSIgewp0ZWNobm9sb2d5ICJIYXNoaUNvcnAgVmF1bHQiCnByb3BlcnRpZXMgewoibmZyIiAiRFAtTkYtMDMiCn0KfQpkYXRhQXJjaGl2ZXIgPSBjb21wb25lbnQgIkRhdGEgQXJjaGl2aW5nIFNlcnZpY2UiICJTYXZlcyBkYXRhIHN1Ym1pdHRlZCBieSBkYXRhIHByb3ZpZGVycyBmcm9tIHRoZSBxdWV1ZSIKfQpkYXRhVmlzdWFsaXphdGlvblNlcnZpY2UgPSBjb250YWluZXIgIkRhdGEgVmlzdWFsaXphdGlvbiBTZXJ2aWNlIiAiRW5hYmxlcyBkYXRhIHZpc3VhbGl6YXRpb24iewpkYXRhVmlzdWFsaXphdGlvblNlcnZpY2VNb2RlbCA9IGNvbXBvbmVudCAiRGF0YSBWaXN1YWxpemF0aW9uIFNlcnZpY2UiICJFbmFibGVzIGludGVybmFsIHVzZXJzIHRvIHZpc3VhbGl6ZSBkYXRhLiIKZGF0YVZpc3VhbGl6YXRpb25TZXJ2aWNlRGF0YWJhc2UgPSBjb21wb25lbnQgIlJvYWQgY29uZGl0aW9uIGRhdGEiICJTdG9yZXMgZGF0YSBhYm91dCByb2FkIGNvbmRpdGlvbnMiIHsKdGVjaG5vbG9neSAiUG9zdGdyZXMgU1FMIgp0YWdzICJEQiIKfQpkYXRhVmlzdWFsaXphdGlvblNlcnZpY2VBY2Nlc3NDb250cm9sID0gY29tcG9uZW50ICJBY2Nlc3MgY29udHJvbCBtb2R1bGUiICJWZXJpZmllcyB1c2VyIHJpZ2h0cyB0byBhY2Nlc3MgZGF0YSJ7CnRlY2hub2xvZ3kgIktleWNsb2FrIgp9Cn0KZGVjaXNpb25NYWtpbmdNb2R1bGUgPSBjb250YWluZXIgIkRlY2lzaW9uIHN1cHBvcnQgbW9kdWxlIiAiR2VuZXJhdGVzIHJvYWQgbWFpbnRlbmFuY2UgcmVjb21tZW5kYXRpb25zInsKZ3JvdXAgIkxhdyBlbmdpbmUiIHsKZGVjaXNpb25NYWtpbmdNb2R1bGVGcmFtZXdvcmsgPSBjb21wb25lbnQgIkxhdyBlbmdpbmUiICJTZWxlY3RzIGxhdyhzKSAocmVjb21tZW5kYXRpb25zKSBhcHByb3ByaWF0ZSB0byB0aGUgaW5wdXQgZGF0YSIKZGVjaXNpb25NYWtpbmdNb2R1bGVXZWIgPSBjb21wb25lbnQgIkxhdyBkZWZpbml0aW9uIHdlYnNpdGUiICJXZWIgcGFnZSBhbGxvd3MgdGhlIHVzZXIgdG8gdmlldy9kZWZpbmUgZGVjaXNpb25zLiIKfQpkZWNpc2lvbk1ha2luZ01vZHVsZVJvYWRQaXBlbGluZSA9IGNvbXBvbmVudCAiUm9hZCBjb25kaXRpb24gZGF0YSBxdWV1ZSIgIlN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZGl0aW9uIG9mIGlkZW50aWZpZWQgcm9hZHMiewp0ZWNobm9sb2d5ICJLYWZrYSIKdGFncyAiUGlwZWxpbmUiCn0KZGVjaXNpb25NYWtpbmdNb2R1bGVSZWNvbWVuZGF0aW9uUGlwZWxpbmUgPSBjb21wb25lbnQgIlJlY29tbWVuZGF0aW9uIGRhdGEgcXVldWUiICJTdG9yZXMgcmVjb21tZW5kYXRpb25zIGdlbmVyYXRlZCBieSB0aGUgcnVsZSBlbmdpbmUiewp0ZWNobm9sb2d5ICJLYWZrYSIKdGFncyAiUGlwZWxpbmUiCn0KZGVjaXNpb25NYWtpbmdNb2R1bGVBcmNoaXZhdG9yID0gY29tcG9uZW50ICJSZWNvbW1lbmRhdGlvbiBtYW5hZ2VtZW50IHNlcnZpY2UiICJSZWFkcyByZWNvbW1lbmRhdGlvbnMgb2J0YWluZWQgYnkgdGhlIGRlY2lzaW9uIGVuZ2luZSBmcm9tIHRoZSBkYXRhIHF1ZXVlIgpkZWNpc2lvbk1ha2luZ01vZHVsZURhdGFiYXNlID0gY29tcG9uZW50ICJSZWNvbW1lbmRhdGlvbiBkYXRhYmFzZSIgIlN0b3JlcyByZWNvbW1lbmRhdGlvbnMgb2J0YWluZWQgYnkgdGhlIGRlY2lzaW9uIGVuZ2luZSIgewp0ZWNobm9sb2d5ICJQb3N0Z3JlcyBTUUwiCnRhZ3MgIkRCIgp9Cgp9CmFuYWx5c2lzTW9kdWxlID0gY29udGFpbmVyICJBbmFseXNpcyBhbmQgQ2xhc3NpZmljYXRpb24gTW9kdWxlIiAiQW5hbHl6ZXMgYW5kIGludGVycHJldHMgcm9hZCBjb25kaXRpb25zIGFuZCBoYXphcmRzIiB7CmRhdGFQcmVwcm9jZXNzaW5nQ29tcG9uZW50ID0gY29tcG9uZW50ICJEYXRhIFByZXByb2Nlc3NpbmcgU2VydmljZSIgIkNsZWFucyBhbmQgcHJlcGFyZXMgaW5wdXQgZGF0YSBmb3IgbW9kZWxzIgptb2RlbE1hbmFnZXIgPSBjb21wb25lbnQgIk1vZGVsIE1hbmFnZW1lbnQgQ29tcG9uZW50IiAiTWFuYWdlcyBtb2RlbCB2ZXJzaW9ucywgbG9hZGluZywgY29uZmlndXJhdGlvbiIgewpwcm9wZXJ0aWVzIHsKImhpbnQiICJNTCBtb2RlbHMgY2FuIGJlIGRlZmluZWQgaW4gY29kZSBvciBhIHJlcG9zaXRvcnkgb2YgTUwgbW9kZWxzIGNhbiBiZSBjcmVhdGVkIGFuZCBtb2RlbCBleGVjdXRpb24gY2FuIGJlIGluaXRpYXRlZCBmcm9tIHRoZSByZXBvc2l0b3J5LiBJZiBtb2RlbHMgYXJlIHJ1biBmcm9tIGNvZGUsIHRoaXMgY29tcG9uZW50IGlzIG5vdCBuZWVkZWQuIgp9Cn0KbWxNb2RlbCA9IGNvbXBvbmVudCAiTWFjaGluZSBMZWFybmluZyBNb2RlbCBFeGVjdXRpb24gRW5naW5lIiAiUGVyZm9ybXMgbW9kZWwgZXhlY3V0aW9uIGFuZCByZXN1bHRzIGNsYXNzaWZpY2F0aW9uIiB7CnByb3BlcnRpZXMgewoibmZyIiAiRFAtTkYtMDEiCn0KfQphbmFseXNpc01vZHVsZVJvYWREYXRhUGlwZWxpbmUgPSBjb21wb25lbnQgIlJvYWQgSW1hZ2UgUXVldWUiICJTdG9yZXMgcm9hZCBpbWFnZXMiewp0ZWNobm9sb2d5ICJLYWZrYSIKdGFncyAiUGlwZWxpbmUiCnByb3BlcnRpZXMgewoiZnIiICJNLUYtMDEiCn0KfQphbmFseXNpc01vZHVsZVJvYWRSZXN1bHRQaXBlbGluZSA9IGNvbXBvbmVudCAiTW9kZWwgUmVzdWx0IFF1ZXVlIiAiU3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiBpZGVudGlmaWVkIHJvYWRzIiB7CnRlY2hub2xvZ3kgIkthZmthIgp0YWdzICJQaXBlbGluZSIKfQphbmFseXNpc01vZHVsZU1hbmFnZXJMb2FkZXJEYiA9IGNvbXBvbmVudCAiTUwgTW9kZWwgRGF0YSIgIlN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhdmFpbGFibGUgTUwgbW9kZWxzIiB7CnRlY2hub2xvZ3kgIlBvc3RncmVzIFNRTCIKdGFncyAiREIiCn0KfQpkYXRhSW5nZXN0aW9uU2VydmljZSA9IGNvbnRhaW5lciAiRGF0YSBJbmdlc3Rpb24gU2VydmljZSIgIkVuYWJsZXMgZXh0ZXJuYWwgc3lzdGVtcyB0byB0cmFuc2ZlciBkYXRhIHRvIHRoZSBwbGF0Zm9ybSJ7CmRhdGFJbmdlc3Rpb25TZXJ2aWNlTW9kZWwgPSBjb21wb25lbnQgIkRhdGEgSW5nZXN0aW9uIE1vZHVsZSIgIkVuc3VyZXMgZGF0YSBpbmdlc3QgZnJvbSB2YXJpb3VzIHNvdXJjZXMiIHsKcHJvcGVydGllcyB7CiJuZnIiICJEUC1ORi0wMSIKfQp9CmRhdGFJbmdlc3Rpb25TZXJ2aWNlQW5vbnltaXphdGlvbiA9IGNvbXBvbmVudCAiRGF0YSBBbm9ueW1pemVyIiAiQW5vbnltaXplcyBpbmNvbWluZyBzZW5zaXRpdmUgZGF0YSIKZGF0YUluZ2VzdGlvblNlcnZpY2VEYXRhYmFzZSA9IGNvbXBvbmVudCAiQW5vbnltaXplZCBkYXRhIiAiU3RvcmVzIGluY29taW5nLCBhbm9ueW1pemVkIGRhdGEiIHsKdGVjaG5vbG9neSAiUG9zdGdyZXMgU1FMIgp0YWdzICJEQiIKfQpkYXRhSW5nZXN0aW9uU2VydmljZURhdGFQaXBlbGluZSA9IGNvbXBvbmVudCAiUm9hZCBzdGF0ZSBkYXRhIHF1ZXVlIiAiU3RvcmVzIGluZm9ybWF0aW9uIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgYWJvdXQgdGhlIGN1cnJlbnQgcm9hZCBzdGF0ZSJ7CnRlY2hub2xvZ3kgIkthZmthIgp0YWdzICJQaXBlbGluZSIKfQpkYXRhSW5nZXN0aW9uU2VydmljZUFjY2Vzc0NvbnRyb2wgPSBjb21wb25lbnQgIkFjY2VzcyBjb250cm9sIG1vZHVsZSIgIkNoZWNrcyB1c2VyIHJpZ2h0cyB0byBhY2Nlc3MgZGF0YSJ7CnRlY2hub2xvZ3kgIktleWNsb2FrIgp9CmRhdGFJbmdlc3Rpb25TZXJ2aWNlRGF0YUFyY2hpdmVyID0gY29tcG9uZW50ICJEYXRhIGFyY2hpdmVyIiAiUmVhZHMgZGF0YSBmcm9tIHRoZSBxdWV1ZSBhbmQgc3RvcmVzIGl0IGluIHRoZSBkYXRhYmFzZS4iewp0ZWNobm9sb2d5ICJOb2RlSnMiCn0KfQpkYXRhU2hhcmluZ1NlcnZpY2UgPSBjb250YWluZXIgIkRhdGEgc2hhcmluZyBzZXJ2aWNlIiAiRW5hYmxlcyBleHRlcm5hbCBzeXN0ZW1zIHRvIHJlcXVlc3QgZGF0YSBmcm9tIHRoZSBwbGF0Zm9ybSJ7CmRhdGFTaGFyaW5nTW9kdWxlID0gY29tcG9uZW50ICJEYXRhIFNoYXJpbmcgQ29tcG9uZW50IiAiRW5hYmxlcyBhY2Nlc3MgdG8gZGF0YSBhbmQgY2hlY2tzIGRhdGEgYWNjZXNzIHJpZ2h0cyBmb3IgZXh0ZXJuYWwgdXNlcnMiIHsKcHJvcGVydGllcyB7CmhpbnQgInJlYWN0aXZlIGRlbGl2ZXJ5IC0gZGF0YSBieSBxdWVyeSBvciBwdWxsIHByaW5jaXBsZSIKfQp9CmRhdGFTaGFyaW5nU2VydmljZURhdGFiYXNlID0gY29tcG9uZW50ICJSb2FkIGNvbmRpdGlvbiBkYXRhIiAiU3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHJvYWQgY29uZGl0aW9ucyIgewp0ZWNobm9sb2d5ICJQb3N0Z3JlcyBTUUwiCnRhZ3MgIkRCIgp9CmRhdGFTaGFyaW5nU2VydmljZU5vdGlmaWNhdGlvbkRhdGFiYXNlID0gY29tcG9uZW50ICJOb3RpZmljYXRpb24gZGF0YWJhc2UiICJFbmFibGVzIHN0b3JhZ2Ugb2Ygbm90aWZpY2F0aW9ucyBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZpY2UiIHsKdGVjaG5vbG9neSAiUG9zdGdyZXMgU1FMIgp0YWdzICJEQiIKfQpkYXRhU2hhcmluZ0FjY2Vzc0NvbnRyb2wgPSBjb21wb25lbnQgIkFjY2VzcyBNYW5hZ2VtZW50IE1vZHVsZSIgIkNoZWNrcyB1c2VyIHJpZ2h0cyB0byBhY2Nlc3MgZGF0YSJ7CnRlY2hub2xvZ3kgIktleWNsb2FrIgp9Cn0KZXJwSW50ZWdyYXRpb25Nb2R1bGUgPSBjb250YWluZXIgIkVSUCBJbnRlZ3JhdGlvbiBNb2R1bGUiICJFbmFibGVzIGRhdGEgZXhjaGFuZ2Ugd2l0aCB0aGUgRVJQIHN5c3RlbSJ7CnByb3BlcnRpZXMgewoiZnIiICJTQS1GLTA1LERQLUYtMDEiCn0KZXJwSW50ZWdyYXRpb25Nb2R1bGVDb21wb25lbnQgPSBjb21wb25lbnQgIkVSUCBpbnRlZ3JhdGlvbiBtb2R1bGUiICJQcm92aWRlcyBhY2Nlc3MgdG8gZGF0YSBhbmQgY2hlY2tzIGRhdGEgYWNjZXNzIHJpZ2h0cyBmb3IgRVJQIHN5c3RlbSB1c2VycyIKZXJwSW50ZWdyYXRpb25Nb2R1bGVEYXRhYmFzZSA9IGNvbXBvbmVudCAiUm9hZCBjb25kaXRpb24gZGF0YSIgIlN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCByb2FkIGNvbmRpdGlvbnMiIHsKdGVjaG5vbG9neSAiUG9zdGdyZXMgU1FMIgp0YWdzICJEQiIKfQplcnBJbnRlZ3JhdGlvbk1vZHVsZU5vdGlmaWNhdGlvbkRhdGFiYXNlID0gY29tcG9uZW50ICJOb3RpZmljYXRpb24gZGF0YWJhc2UiICJQcm92aWRlcyBzdG9yYWdlIG9mIHNlcnZpY2UtZ2VuZXJhdGVkIG5vdGlmaWNhdGlvbnMiIHsKdGVjaG5vbG9neSAiUG9zdGdyZXMgU1FMIgp0YWdzICJEQiIKfQplcnBJbnRlZ3JhdGlvbk1vZHVsZUFjY2Vzc0NvbnRyb2wgPSBjb21wb25lbnQgIkFjY2VzcyBtYW5hZ2VtZW50IG1vZHVsZSIgIkNoZWNrcyB1c2VyIHJpZ2h0cyB0byBhY2Nlc3MgZGF0YSJ7CnRlY2hub2xvZ3kgIktleWNsb2FrIgp9CmtwaURhdGFFeGNoYW5nZURiID0gY29tcG9uZW50ICJLUEkgZGF0YWJhc2UiICJXb3JrIG1hbmFnZW1lbnQgZGF0YWJhc2UgZm9yIEtQSSBjYWxjdWxhdGlvbnMiIHsKdGVjaG5vbG9neSAiUG9zdGdyZXMgU1FMIgp0YWdzICJEQiIKfQp9Cm5vdGlmaWNhdGlvblNlcnZpY2UgPSBjb250YWluZXIgIk5vdGlmaWNhdGlvbiBzZXJ2aWNlIiAiUHJvdmlkZXMgY3JlYXRpb24gb2Ygbm90aWZpY2F0aW9ucyIgewpub3RpZmljYXRpb25HZW5lcmF0b3IgPSBjb21wb25lbnQgIk5vdGlmaWNhdGlvbiBHZW5lcmF0b3IiICJHZW5lcmF0ZXMgbm90aWZpY2F0aW9ucyB1c2luZyB0ZW1wbGF0ZXMgYW5kIHJlY2lwaWVudHMiCi8vID8/IG5vdGlmaWNhdGlvblBlcm1pc3Nvbk1hbmFnZXIgPSBjb21wb25lbnQgIk5vdGlmaWNhdGlvbiBSaWdodHMgTWFuYWdlciIgIk1hbmFnZXMgcmVjaXBpZW50cywgcmlnaHRzLCB0b3BpY3MsIGV0Yy4iCnJvYWRDb25kaXRpb25QaXBlbGluZSA9IGNvbXBvbmVudCAiUm9hZCBDb25kaXRpb24gRGF0YSBRdWV1ZSIgIlN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZGl0aW9uIG9mIGlkZW50aWZpZWQgcm9hZHMiewp0ZWNobm9sb2d5ICJLYWZrYSIKdGFncyAiUGlwZWxpbmUiCn0Kbm90aWZpY2F0aW9uRGF0YWJhc2UgPSBjb21wb25lbnQgIk5vdGlmaWNhdGlvbiBEYXRhYmFzZSIgIlByb3ZpZGVzIHN0b3JhZ2Ugb2Ygc2VydmljZS1nZW5lcmF0ZWQgbm90aWZpY2F0aW9ucyIgewp0ZWNobm9sb2d5ICJQb3N0Z3JlcyBTUUwiCnRhZ3MgIkRCIgp9Cm5vdGlmaWNhdGlvblRlbXBsYXRlRGF0YWJhc2UgPSBjb21wb25lbnQgIk5vdGlmaWNhdGlvbiB0ZW1wbGF0ZSBkYXRhYmFzZSIgIlByb3ZpZGVzIHN0b3JhZ2Ugb2Ygc2VydmljZSBub3RpZmljYXRpb24gdGVtcGxhdGVzIiB7CnRlY2hub2xvZ3kgIlBvc3RncmVzIFNRTCIKdGFncyAiREIiCn0Kbm90aWZpY2F0aW9uU2VydmljZUludGVncmF0aW9uTW9kdWxlQWNjZXNzQ29udHJvbCA9IGNvbXBvbmVudCAiQWNjZXNzIG1hbmFnZW1lbnQgbW9kdWxlIiAiVmVyaWZpZXMgdXNlciByaWdodHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zInsKdGVjaG5vbG9neSAiS2V5Y2xvYWsiCn0KfQp9CgovLyAtLS0tLS0tLS0tLS0tIENvbnRleHQgbGV2ZWwgcmVsYXRpb25zaGlwcyAtLS0tLS0tLS0tLS0tLS0tCgpmaW5hbmNpYWxSZXNwb25zaWJsZSAtPiBpcm9tUGxhdGZvcm0gInVzZXMgdGhlIHBsYXRmb3JtIgpyb2FkUmVzcG9uc2libGUgLT4gaXJvbVBsYXRmb3JtICJ1c2VzIHRoZSBwbGF0Zm9ybSIKZmluYW5jaWFsUmVzcG9uc2libGUgLT4gZXJwU3lzdGVtICJ1c2VzIHRoZSBzeXN0ZW0iCi8vZXJwU3lzdGVtIC0+IGlyb21QbGF0Zm9ybSAicmVjZWl2ZXMgZGF0YSBmb3IgcmVwYWlyIHBsYW5uaW5nIgovL2V4dGVybmFsU3lzdGVtUHVsbCAtPiBkYXRhU2hhcmluZ1NlcnZpY2UgInJldHJpZXZlcyBkYXRhIHZpYSBBUEkiCi8vZGF0YUluZ2VzdGlvblNlcnZpY2UgLT4gZXh0ZXJuYWxTeXN0ZW1QdXNoICJzZW5kcyBkYXRhIgptb2JpbGVBcHBsaWNhdGlvbiAtPiBpcm9tUGxhdGZvcm0gInNlbmRzIHZpZGVvIHN0cmVhbSBkYXRhIgpyb2FkTWFpbnRhaW5lciAtPiBtb2JpbGVBcHBsaWNhdGlvbiAidXNlcyB0byBzdXJ2ZXkgdGhlIHJvYWQgY29uZGl0aW9uIgpyb2FkTWFpbnRhaW5lciAtPiBleHRlcm5hbFN5c3RlbSAic2VuZHMgb3IgcmV0cmlldmVzIGRhdGEiCmV4dGVybmFsU3lzdGVtIC0+IGx2YyAicmV0cmlldmVzIGRhdGEgdmlhIEFQSSIKcm9hZEV4cGVydCAtPiBpcm9tUGxhdGZvcm0uZGVjaXNpb25NYWtpbmdNb2R1bGUgIm1hbmFnZXMgcm9hZCBtYWludGVuYW5jZSByZWNvbW1lbmRhdGlvbnMiCi8vIC0tLS0tLS0tLS0tQ29udGFpbmVyIGxldmVsIHJlbGF0aW9uc2hpcHMtLS0tLS0tLQoKaXJvbVBsYXRmb3JtLmRhdGFWaXN1YWxpemF0aW9uU2VydmljZSAtPiBpcm9tUGxhdGZvcm0ucGxhdGZvcm1TZXJ2aWNlcyAicmVxdWVzdHMgZGF0YSBmb3IgbWFwcywgcmVwb3J0cywgbGF5ZXJzIgppcm9tUGxhdGZvcm0ubm90aWZpY2F0aW9uU2VydmljZSAtPiBpcm9tUGxhdGZvcm0ucGxhdGZvcm1TZXJ2aWNlcyAidXNlcyBwbGF0Zm9ybSBzZXJ2aWNlcyB0byBzdG9yZSBkYXRhIgppcm9tUGxhdGZvcm0uZGF0YVNoYXJpbmdTZXJ2aWNlIC0+IGlyb21QbGF0Zm9ybS5wbGF0Zm9ybVNlcnZpY2VzICJ1c2VzIHBsYXRmb3JtIHNlcnZpY2VzIHRvIHNoYXJlIGRhdGEgd2l0aCBleHRlcm5hbCBzeXN0ZW1zIgppcm9tUGxhdGZvcm0uZXJwSW50ZWdyYXRpb25Nb2R1bGUgLT4gaXJvbVBsYXRmb3JtLnBsYXRmb3JtU2VydmljZXMgInVzZXMgcGxhdGZvcm0gc2VydmljZXMgdG8gZXhjaGFuZ2UgZGF0YSB3aXRoIEVSUCBzeXN0ZW0iCmlyb21QbGF0Zm9ybS5hbmFseXNpc01vZHVsZSAtPiBpcm9tUGxhdGZvcm0ucGxhdGZvcm1TZXJ2aWNlcyAicmVxdWVzdHMgZGF0YSBhbmQgc2VuZHMgdGhlIG9idGFpbmVkIHJlc3VsdHMiCmlyb21QbGF0Zm9ybS5kZWNpc2lvbk1ha2luZ01vZHVsZSAtPiBpcm9tUGxhdGZvcm0ucGxhdGZvcm1TZXJ2aWNlcyAicmVxdWVzdHMgZGF0YSBhbmQgc2VuZHMgdGhlIGdlbmVyYXRlZCByZWNvbW1lbmRhdGlvbnMiCi8vaXJvbVBsYXRmb3JtLm5vdGlmaWNhdGlvblNlcnZpY2UgLT4gZXh0ZXJuYWxTeXN0ZW0gInByZXBhcmVzIGRhdGEgZm9yIHJldHJpZXZhbCIKZXh0ZXJuYWxTeXN0ZW0gLT4gaXJvbVBsYXRmb3JtLmRhdGFTaGFyaW5nU2VydmljZSAicmVxdWVzdHMgYW5kL29yIHNlbmRzIGRhdGEiCm1vYmlsZUFwcGxpY2F0aW9uIC0+IGlyb21QbGF0Zm9ybS5kYXRhSW5nZXN0aW9uU2VydmljZSAic2VuZHMgZGF0YSIKZXh0ZXJuYWxTeXN0ZW0gLT4gaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlICJzZW5kcyBkYXRhIgppcm9tUGxhdGZvcm0uZGF0YUluZ2VzdGlvblNlcnZpY2UgLT4gaXJvbVBsYXRmb3JtLnBsYXRmb3JtU2VydmljZXMgInNlbmRzIGRhdGEgZm9yIGFuYWx5c2lzIgplcnBTeXN0ZW0gLT4gaXJvbVBsYXRmb3JtLmVycEludGVncmF0aW9uTW9kdWxlICJyZXF1ZXN0cyBkYXRhIGZvciB3b3JrIHBsYW5uaW5nIgovL2lyb21QbGF0Zm9ybS5vcHRpbWl6YXRpb25TZXJ2aWNlIC0+IGlyb21QbGF0Zm9ybS5lcnBJbnRlZ3JhdGlvbk1vZHVsZSAicmVxdWVzdHMgZGF0YSBmb3IgS1BJIGNhbGN1bGF0aW9ucyIKaXJvbVBsYXRmb3JtLm9wdGltaXphdGlvblNlcnZpY2UgLT4gaXJvbVBsYXRmb3JtLnBsYXRmb3JtU2VydmljZXMgInJlcXVlc3RzIGRhdGEgZm9yIEtQSSBjYWxjdWxhdGlvbnMiCi8vaXJvbVBsYXRmb3JtLmRhdGFWaXN1YWxpemF0aW9uU2VydmljZSAtPiBpcm9tUGxhdGZvcm0ub3B0aW1pemF0aW9uU2VydmljZSAicmVxdWVzdHMgS1BJIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24iCgovLyAtLS0tLS0tLSBDb21wb25lbnQgIkFuYWx5c2lzIGFuZCBDbGFzc2lmaWNhdGlvbiBNb2R1bGUiIHJlbGF0aW9uc2hpcHMgLS0tLS0tLS0tLS0tCgppcm9tUGxhdGZvcm0uYW5hbHlzaXNNb2R1bGUubW9kZWxNYW5hZ2VyIC0+IGlyb21QbGF0Zm9ybS5hbmFseXNpc01vZHVsZS5tbE1vZGVsICJsb2FkcyBNTCBtb2RlbHMiCmlyb21QbGF0Zm9ybS5hbmFseXNpc01vZHVsZS5tbE1vZGVsIC0+IGlyb21QbGF0Zm9ybS5hbmFseXNpc01vZHVsZS5hbmFseXNpc01vZHVsZVJvYWRSZXN1bHRQaXBlbGluZSAic2VuZHMgcmVzdWx0cyIKaXJvbVBsYXRmb3JtLmFuYWx5c2lzTW9kdWxlLmFuYWx5c2lzTW9kdWxlUm9hZERhdGFQaXBlbGluZSAtPiBpcm9tUGxhdGZvcm0uYW5hbHlzaXNNb2R1bGUuZGF0YVByZXByb2Nlc3NpbmdDb21wb25lbnQgInJlY2VpdmVzIHJvYWQgaW1hZ2VzIGZvciBwcmVwcm9jZXNzaW5nIgppcm9tUGxhdGZvcm0uYW5hbHlzaXNNb2R1bGUuZGF0YVByZXByb2Nlc3NpbmdDb21wb25lbnQgLT4gaXJvbVBsYXRmb3JtLmFuYWx5c2lzTW9kdWxlLm1sTW9kZWwgInRyYW5zZmVycyBjbGVhbmVkIGFuZCBwcmVwYXJlZCBkYXRhIGZvciBmdXJ0aGVyIGFuYWx5c2lzIGFuZCBwcm9jZXNzaW5nIgppcm9tUGxhdGZvcm0uYW5hbHlzaXNNb2R1bGUuYW5hbHlzaXNNb2R1bGVNYW5hZ2VyTG9hZGVyRGIgLT4gaXJvbVBsYXRmb3JtLmFuYWx5c2lzTW9kdWxlLm1vZGVsTWFuYWdlciAibG9hZHMgbW9kZWxzIgoKLy8gLS0tLS0tLS0tLS0tIENvbXBvbmVudCAiTm90aWZpY2F0aW9uIFNlcnZpY2UiIHJlbGF0aW9uc2hpcHMgLS0tLS0tLS0tLS0tLS0tCmlyb21QbGF0Zm9ybS5ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmaWNhdGlvbkdlbmVyYXRvciAtPiBpcm9tUGxhdGZvcm0ubm90aWZpY2F0aW9uU2VydmljZS5yb2FkQ29uZGl0aW9uUGlwZWxpbmUgIlJlYWRzIGN1cnJlbnQgcm9hZCBjb25kaXRpb24iCmlyb21QbGF0Zm9ybS5ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmaWNhdGlvbkdlbmVyYXRvciAtPiBpcm9tUGxhdGZvcm0ubm90aWZpY2F0aW9uU2VydmljZS5ub3RpZmljYXRpb25EYXRhYmFzZSAiU2F2ZXMgZ2VuZXJhdGVkIG5vdGlmaWNhdGlvbnMiCmlyb21QbGF0Zm9ybS5ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmaWNhdGlvbkdlbmVyYXRvciAtPiBpcm9tUGxhdGZvcm0ubm90aWZpY2F0aW9uU2VydmljZS5ub3RpZmljYXRpb25UZW1wbGF0ZURhdGFiYXNlICJSZXF1ZXN0cyBub3RpZmljYXRpb24gdGVtcGxhdGVzIgppcm9tUGxhdGZvcm0ubm90aWZpY2F0aW9uU2VydmljZS5ub3RpZmljYXRpb25HZW5lcmF0b3IgLT4gZXh0ZXJuYWxTeXN0ZW0gIlNlbmRzIG5vdGlmaWNhdGlvbnMiCmlyb21QbGF0Zm9ybS5ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmaWNhdGlvbkdlbmVyYXRvciAtPiBpcm9tUGxhdGZvcm0ubm90aWZpY2F0aW9uU2VydmljZS5ub3RpZmljYXRpb25TZXJ2aWNlSW50ZWdyYXRpb25Nb2R1bGVBY2Nlc3NDb250cm9sICJDaGVja3MgZXh0ZXJuYWwgc3lzdGVtIGFjY2VzcyByaWdodHMiCgovLyAtLS0tLS0tLS0tLS0gQ29tcG9uZW50ICJEYXRhIFNoYXJpbmcgU2VydmljZSIgcmVsYXRpb25zaGlwcyAtLS0tLS0tLS0tLS0tLS0KaXJvbVBsYXRmb3JtLmRhdGFTaGFyaW5nU2VydmljZS5kYXRhU2hhcmluZ01vZHVsZSAtPiBpcm9tUGxhdGZvcm0uZGF0YVNoYXJpbmdTZXJ2aWNlLmRhdGFTaGFyaW5nU2VydmljZURhdGFiYXNlICJSZXF1ZXN0cyBwYXRoIHN0YXRlIGRhdGEiCmlyb21QbGF0Zm9ybS5kYXRhU2hhcmluZ1NlcnZpY2UuZGF0YVNoYXJpbmdNb2R1bGUgLT4gaXJvbVBsYXRmb3JtLmRhdGFTaGFyaW5nU2VydmljZS5kYXRhU2hhcmluZ1NlcnZpY2VOb3RpZmljYXRpb25EYXRhYmFzZSAiUmVxdWVzdHMgc2F2ZWQgbm90aWZpY2F0aW9uIGRhdGEiCmlyb21QbGF0Zm9ybS5kYXRhU2hhcmluZ1NlcnZpY2UuZGF0YVNoYXJpbmdNb2R1bGUgLT4gaXJvbVBsYXRmb3JtLmRhdGFTaGFyaW5nU2VydmljZS5kYXRhU2hhcmluZ0FjY2Vzc0NvbnRyb2wgIkNoZWNrcyBwZXJtaXNzaW9ucyIKLy9leHRlcm5hbFN5c3RlbVB1bGwgLT4gaXJvbVBsYXRmb3JtLmRhdGFTaGFyaW5nU2VydmljZS5kYXRhU2hhcmluZ01vZHVsZSAiUmVxdWVzdHMgZGF0YSIKCi8vIC0tLS0tLS0tLS0tLSBDb21wb25lbnQgIkRhdGEgSW5nZXN0aW9uIFNlcnZpY2UiIHJlbGF0aW9uc2hpcHMgLS0tLS0tLS0tLS0tLS0KaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlLmRhdGFJbmdlc3Rpb25TZXJ2aWNlTW9kZWwgLT4gaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlLmRhdGFJbmdlc3Rpb25TZXJ2aWNlQW5vbnltaXphdGlvbiAiU2VuZHMgZGF0YSIKaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlLmRhdGFJbmdlc3Rpb25TZXJ2aWNlRGF0YUFyY2hpdmVyIC0+IGlyb21QbGF0Zm9ybS5kYXRhSW5nZXN0aW9uU2VydmljZS5kYXRhSW5nZXN0aW9uU2VydmljZURhdGFiYXNlICJTYXZlcyBkYXRhIgppcm9tUGxhdGZvcm0uZGF0YUluZ2VzdGlvblNlcnZpY2UuZGF0YUluZ2VzdGlvblNlcnZpY2VEYXRhQXJjaGl2ZXIgLT4gaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlLmRhdGFJbmdlc3Rpb25TZXJ2aWNlRGF0YVBpcGVsaW5lICJSZWFkcyBkYXRhIGZyb20gYSBxdWV1ZSIKaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlLmRhdGFJbmdlc3Rpb25TZXJ2aWNlQW5vbnltaXphdGlvbiAtPiBpcm9tUGxhdGZvcm0uZGF0YUluZ2VzdGlvblNlcnZpY2UuZGF0YUluZ2VzdGlvblNlcnZpY2VEYXRhUGlwZWxpbmUgIlNlbmRzIGRhdGEgdG8gYSBxdWV1ZSIKaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlLmRhdGFJbmdlc3Rpb25TZXJ2aWNlTW9kZWwgLT4gaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlLmRhdGFJbmdlc3Rpb25TZXJ2aWNlQWNjZXNzQ29udHJvbCAiQ2hlY2tzIHBlcm1pc3Npb25zIgpleHRlcm5hbFN5c3RlbSAtPiBpcm9tUGxhdGZvcm0uZGF0YUluZ2VzdGlvblNlcnZpY2UuZGF0YUluZ2VzdGlvblNlcnZpY2VNb2RlbCAiU2VuZHMgZGF0YSIKbW9iaWxlQXBwbGljYXRpb24gLT4gaXJvbVBsYXRmb3JtLmRhdGFJbmdlc3Rpb25TZXJ2aWNlLmRhdGFJbmdlc3Rpb25TZXJ2aWNlTW9kZWwgIlNlbmRzIGRhdGEiCgovLyAtLS0tLS0tLS0tLS0gQ29tcG9uZW50ICJFUlAgaW50ZWdyYXRpb24gbW9kZWwiIHJlbGF0aW9uc2hpcHMgLS0tLS0tLS0tLS0tLS0tCmlyb21QbGF0Zm9ybS5lcnBJbnRlZ3JhdGlvbk1vZHVsZS5lcnBJbnRlZ3JhdGlvbk1vZHVsZUNvbXBvbmVudCAtPiBpcm9tUGxhdGZvcm0uZXJwSW50ZWdyYXRpb25Nb2R1bGUuZXJwSW50ZWdyYXRpb25Nb2R1bGVEYXRhYmFzZSAiUmVxdWVzdHMgcGF0aCBzdGF0ZSBkYXRhIgppcm9tUGxhdGZvcm0uZXJwSW50ZWdyYXRpb25Nb2R1bGUuZXJwSW50ZWdyYXRpb25Nb2R1bGVDb21wb25lbnQgLT4gaXJvbVBsYXRmb3JtLmVycEludGVncmF0aW9uTW9kdWxlLmVycEludGVncmF0aW9uTW9kdWxlTm90aWZpY2F0aW9uRGF0YWJhc2UgIlJlcXVlc3RzIHNhdmVkIG5vdGlmaWNhdGlvbiBkYXRhIgppcm9tUGxhdGZvcm0uZXJwSW50ZWdyYXRpb25Nb2R1bGUuZXJwSW50ZWdyYXRpb25Nb2R1bGVDb21wb25lbnQgLT4gaXJvbVBsYXRmb3JtLmVycEludGVncmF0aW9uTW9kdWxlLmVycEludGVncmF0aW9uTW9kdWxlQWNjZXNzQ29udHJvbCAiQ2hlY2tzIHBlcm1pc3Npb25zIgplcnBTeXN0ZW0gLT4gaXJvbVBsYXRmb3JtLmVycEludGVncmF0aW9uTW9kdWxlLmVycEludGVncmF0aW9uTW9kdWxlQ29tcG9uZW50ICJSZXF1ZXN0cyBkYXRhIgppcm9tUGxhdGZvcm0uZXJwSW50ZWdyYXRpb25Nb2R1bGUuZXJwSW50ZWdyYXRpb25Nb2R1bGVDb21wb25lbnQgLT4gaXJvbVBsYXRmb3JtLmVycEludGVncmF0aW9uTW9kdWxlLmtwaURhdGFFeGNoYW5nZURiICJSZXF1ZXN0cyBkYXRhIGZvciBLUEkgY2FsY3VsYXRpb25zIGZyb20gdGhlIEVSUCBzeXN0ZW0iCgovLyAtLS0tLS0tLS0tLS0gQ29tcG9uZW50ICJEYXRhIHZpc3VhbGl6YXRpb24gc2VydmljZSIgcmVsYXRpb25zaGlwcyAtLS0tLS0tLS0tLS0tLS0KaXJvbVBsYXRmb3JtLmRhdGFWaXN1YWxpemF0aW9uU2VydmljZS5kYXRhVmlzdWFsaXphdGlvblNlcnZpY2VNb2RlbCAtPiBpcm9tUGxhdGZvcm0uZGF0YVZpc3VhbGl6YXRpb25TZXJ2aWNlLmRhdGFWaXN1YWxpemF0aW9uU2VydmljZURhdGFiYXNlICJSZXF1ZXN0cyByb2FkIGNvbmRpdGlvbiBkYXRhIgppcm9tUGxhdGZvcm0uZGF0YVZpc3VhbGl6YXRpb25TZXJ2aWNlLmRhdGFWaXN1YWxpemF0aW9uU2VydmljZU1vZGVsIC0+IGlyb21QbGF0Zm9ybS5kYXRhVmlzdWFsaXphdGlvblNlcnZpY2UuZGF0YVZpc3VhbGl6YXRpb25TZXJ2aWNlQWNjZXNzQ29udHJvbCAiQ2hlY2tzIHBlcm1pc3Npb25zIgp1c2VyIC0+IGlyb21QbGF0Zm9ybS5kYXRhVmlzdWFsaXphdGlvblNlcnZpY2UuZGF0YVZpc3VhbGl6YXRpb25TZXJ2aWNlTW9kZWwgIlVzZXMgdmlzdWFsaXphdGlvbiB0b29scyBmb3IgcmVwb3J0IHZpc3VhbGl6YXRpb24iCgovLyAtLS0tLS0tLS0tLS0gQ29tcG9uZW50ICJEZWNpc2lvbiBzdXBwb3J0IG1vZGVsIiByZWxhdGlvbnNoaXBzIC0tLS0tLS0tLS0tLS0tLQoKaXJvbVBsYXRmb3JtLmRlY2lzaW9uTWFraW5nTW9kdWxlLmRlY2lzaW9uTWFraW5nTW9kdWxlRnJhbWV3b3JrIC0+IGlyb21QbGF0Zm9ybS5kZWNpc2lvbk1ha2luZ01vZHVsZS5kZWNpc2lvbk1ha2luZ01vZHVsZVJvYWRQaXBlbGluZSAiUmVhZHMgZGF0YSIKaXJvbVBsYXRmb3JtLmRlY2lzaW9uTWFraW5nTW9kdWxlLmRlY2lzaW9uTWFraW5nTW9kdWxlV2ViIC0+IGlyb21QbGF0Zm9ybS5kZWNpc2lvbk1ha2luZ01vZHVsZS5kZWNpc2lvbk1ha2luZ01vZHVsZUZyYW1ld29yayAiTW9uaXRvcnMgbGF3cyIKaXJvbVBsYXRmb3JtLmRlY2lzaW9uTWFraW5nTW9kdWxlLmRlY2lzaW9uTWFraW5nTW9kdWxlRnJhbWV3b3JrIC0+IGlyb21QbGF0Zm9ybS5kZWNpc2lvbk1ha2luZ01vZHVsZS5kZWNpc2lvbk1ha2luZ01vZHVsZVJlY29tZW5kYXRpb25QaXBlbGluZSAiU2VuZHMgZGF0YSIKaXJvbVBsYXRmb3JtLmRlY2lzaW9uTWFraW5nTW9kdWxlLmRlY2lzaW9uTWFraW5nTW9kdWxlQXJjaGl2YXRvciAtPiBpcm9tUGxhdGZvcm0uZGVjaXNpb25NYWtpbmdNb2R1bGUuZGVjaXNpb25NYWtpbmdNb2R1bGVSZWNvbWVuZGF0aW9uUGlwZWxpbmUgIlJlYWRzIGRhdGEiCmlyb21QbGF0Zm9ybS5kZWNpc2lvbk1ha2luZ01vZHVsZS5kZWNpc2lvbk1ha2luZ01vZHVsZUFyY2hpdmF0b3IgLT4gaXJvbVBsYXRmb3JtLmRlY2lzaW9uTWFraW5nTW9kdWxlLmRlY2lzaW9uTWFraW5nTW9kdWxlRGF0YWJhc2UgIlNhdmVzIGRhdGEiCgovLyAtLS0tLS0tLS0tIENvbXBvbmVudCAiT3B0aW1pemF0aW9uIFNlcnZpY2UiIHJlbGF0aW9uc2ppcHMgLS0tLS0tLS0tLS0tLS0tLQppcm9tUGxhdGZvcm0ub3B0aW1pemF0aW9uU2VydmljZS5rcGlEYXRhQmFzZSAtPiBpcm9tUGxhdGZvcm0ub3B0aW1pemF0aW9uU2VydmljZS5rcGlSZXBvcnRpbmdTZXJ2aWNlICJyZXRyaWV2ZXMgY2FsY3VsYXRlZCBLUElzIGFuZCBnZW5lcmF0ZXMgcmVwb3J0cyBmb3IgdmlzdWFsaXphdGlvbiIKaXJvbVBsYXRmb3JtLm9wdGltaXphdGlvblNlcnZpY2Uua3BpQ2FsY3VsYXRpb25TZXJ2aWNlIC0+IGlyb21QbGF0Zm9ybS5vcHRpbWl6YXRpb25TZXJ2aWNlLmtwaURhdGFCYXNlICJ1c2VzIHByZWRlZmluZWQgZm9ybXVsYXMgYW5kIGNhbGN1bGF0ZXMgS1BJIiAKLy9pcm9tUGxhdGZvcm0uZGF0YVZpc3VhbGl6YXRpb25TZXJ2aWNlIC0+IGlyb21QbGF0Zm9ybS5vcHRpbWl6YXRpb25TZXJ2aWNlLmtwaURhdGFCYXNlICJnZXRzIEtQSSByZXBvcnRzIGZvciB2aXN1YWxpemF0aW9uIiAKfSAKCnZpZXdzIHsKCiAgc3lzdGVtQ29udGV4dCBpcm9tUGxhdGZvcm0gewogICAgaW5jbHVkZSAqCiAgICBpbmNsdWRlIGlyb21QbGF0Zm9ybQogICAgZXhjbHVkZSB1c2VyCiAgICAvL2F1dG9sYXlvdXQgbm8KICB9CgogIHN5c3RlbUxhbmRzY2FwZSAiU3lzdGVtTGFuZHNjYXBlIiB7CiAgICBpbmNsdWRlIGVycFN5c3RlbQogICAgaW5jbHVkZSBtb2JpbGVBcHBsaWNhdGlvbgogICAgaW5jbHVkZSBleHRlcm5hbFN5c3RlbQogICAgaW5jbHVkZSBpcm9tUGxhdGZvcm0KICAgIGluY2x1ZGUgbHZjCiAgICBpbmNsdWRlIHJvYWRNYWludGFpbmVyCiAgICBpbmNsdWRlIGZpbmFuY2lhbFJlc3BvbnNpYmxlCiAgICBpbmNsdWRlIHJvYWRSZXNwb25zaWJsZQogICAgaW5jbHVkZSByb2FkRXhwZXJ0CiAgICBleGNsdWRlIHVzZXIKICB9CgogIGNvbnRhaW5lciBpcm9tUGxhdGZvcm0gewogICAgaW5jbHVkZSAqCiAgICBpbmNsdWRlIGVycFN5c3RlbQogICAgaW5jbHVkZSBleHRlcm5hbFN5c3RlbQogICAgaW5jbHVkZSBtb2JpbGVBcHBsaWNhdGlvbgogICAgaW5jbHVkZSBpcm9tUGxhdGZvcm0ub3B0aW1pemF0aW9uU2VydmljZQogICAgZXhjbHVkZSByb2FkRXhwZXJ0CiAgICBleGNsdWRlIHVzZXIKICAgIC8vYXV0b2xheW91dCB0YgogIH0KCiAgY29tcG9uZW50IGlyb21QbGF0Zm9ybS5wbGF0Zm9ybVNlcnZpY2VzICJQbGF0Zm9ybS1TZXJ2aWNlcy12aWV3IiB7CiAgICBpbmNsdWRlICoKICAgIC8vYXV0b0xheW91dCBscgogIH0KCiAgY29tcG9uZW50IGlyb21QbGF0Zm9ybS5hbmFseXNpc01vZHVsZSAiQW5hbHlzaXMtYW5kLWNsYXNzaWZpY2F0aW9uLW1vZGVsLWNvbnRhaW5lcnMiIHsKICAgIGluY2x1ZGUgKgogICAgLy9hdXRvTGF5b3V0IG5vCiAgfQoKICBjb21wb25lbnQgaXJvbVBsYXRmb3JtLm5vdGlmaWNhdGlvblNlcnZpY2UgIm5vdGlmaWNhdGluLXNlcnZpY2UtdmlldyIgewogICAgaW5jbHVkZSAqCiAgICAvL2F1dG9MYXlvdXQgbHIKICB9CgogIGNvbXBvbmVudCBpcm9tUGxhdGZvcm0uZGF0YVNoYXJpbmdTZXJ2aWNlICJEYXRhLVNoYXJpbmctU2VydmljZS12aWV3IiB7CiAgICBpbmNsdWRlICoKICAgIC8vYXV0b0xheW91dCBubwogIH0KCiAgY29tcG9uZW50IGlyb21QbGF0Zm9ybS5kYXRhSW5nZXN0aW9uU2VydmljZSAiRGF0YS1Jbmdlc3Rpb24tU2VydmljZS12aWV3IiB7CiAgICBpbmNsdWRlICoKICAgIC8vYXV0b0xheW91dCBubwogIH0KCiAgY29tcG9uZW50IGlyb21QbGF0Zm9ybS5lcnBJbnRlZ3JhdGlvbk1vZHVsZSAiRVJQLUludGVncmF0aW9uLU1vZGVsLXZpZXciIHsKICAgIGluY2x1ZGUgKgogICAgLy9hdXRvTGF5b3V0IGxyCiAgfQoKICBjb21wb25lbnQgaXJvbVBsYXRmb3JtLmRhdGFWaXN1YWxpemF0aW9uU2VydmljZSAiRGF0YS1WaXN1YWxpemF0aW9uLVNlcnZpY2UtdmlldyIgewogICAgaW5jbHVkZSAqCiAgICAvL2F1dG9MYXlvdXQgbm8KICB9CgogIGNvbXBvbmVudCBpcm9tUGxhdGZvcm0uZGVjaXNpb25NYWtpbmdNb2R1bGUgIkRlY2lzaW9uLU1ha2luZy1Nb2R1bGUtdmlldyIgewogICAgaW5jbHVkZSAqCiAgICAvL2F1dG9MYXlvdXQgbm8KICB9CgogIGNvbXBvbmVudCBpcm9tUGxhdGZvcm0ub3B0aW1pemF0aW9uU2VydmljZSAiT3B0aW1pemF0aW9uLU1vZHVsZS12aWV3IiB7CiAgICBpbmNsdWRlICoKICAgIC8vYXV0b0xheW91dCBubwogIH0KCiAgdGVybWlub2xvZ3kgewogICAgcGVyc29uICJQZXJzb24iCiAgICBzb2Z0d2FyZVN5c3RlbSAiU3lzdGVtIgogICAgY29udGFpbmVyICJDb250YWluZXIiCiAgICBjb21wb25lbnQgIkNvbXBvbmVudCIKICAgIHJlbGF0aW9uc2hpcCAiTGluayIKICB9CgogIHN0eWxlcyB7CiAgICAvLyBOb2tsdXPEk2p1bWEgdGVrc3RzIHZpc2llbSBlbGVtZW50aWVtCiAgICBlbGVtZW50ICJFbGVtZW50IiB7CiAgICAgIGNvbG9yICIjMDAwMDAwIgogICAgfQogICAgCiAgICBlbGVtZW50ICJTeXN0ZW0iIHsKICAgICAgICBjb2xvciBibGFjawogICAgfQogICAgCiAgICBlbGVtZW50ICJHcm91cCIgewogICAgICAgIGNvbG9yIGJsYWNrCiAgICB9CiAgICAKICAgIGVsZW1lbnQgIk5vZGUiIHsKICAgICAgICBjb2xvciBibGFjawogICAgfQogICAgLy8gTm9rbHVzxJNqdW1hIHRla3N0cyB2aXPEgW0gYXR0aWVjxKtixIFtIChidWx0acWGdSBldGnEt2V0xJNtKQogICAgcmVsYXRpb25zaGlwICJSZWxhdGlvbnNoaXAiIHsKICAgICAgY29sb3IgIiMwMDAwMDAiCiAgICB9CgogICAgLy8gS29udGVpbmVyaSAoaWV0ZWttxJMgYXLEqyBrb21wb25lbnR1IHNrYXRhIGFwYWvFocSTam8gY2FwdGlvbikKICAgIGVsZW1lbnQgIkNvbnRhaW5lciIgewogICAgICBiYWNrZ3JvdW5kICIjMjNkOThkIgogICAgICBzdHJva2UgIiM2NjY2NjYiCiAgICAgIGNvbG9yICIjMDAwMDAwIgogICAgfQoKICAgIC8vIEphIG1vZGVsxKsgcGlldmllbm9zaSDFoWltIGtvbnRlaW5lcmFtIHRhZ3UgIkFuYWx5c2lzQ29udGFpbmVyIiwKICAgIC8vIMWhaXMgbm90ZWlrdW1zIHBpZXNwaWVkxKtzIG1lbG51IHRla3N0dSBhcsSrIGNhcHRpb25hbQogICAgZWxlbWVudCAiQW5hbHlzaXNDb250YWluZXIiIHsKICAgICAgY29sb3IgIiMwMDAwMDAiCiAgICB9CgogICAgZWxlbWVudCAiUGVyc29uIiB7CiAgICAgIGJhY2tncm91bmQgIiNkNDZhNmEiCiAgICAgIHNoYXBlIHBlcnNvbgogICAgfQoKICAgIGVsZW1lbnQgIlNvZnR3YXJlU3lzdGVtIiB7CiAgICAgIGJhY2tncm91bmQgIiM4MkE3N0QiCiAgICAgIHN0cm9rZSAiIzY2NjY2NiIKICAgIH0KCiAgICBlbGVtZW50ICJNYWluQ29udGFpbmVyIiB7CiAgICAgIGJhY2tncm91bmQgIiNDNDFFM0EiCiAgICAgIHN0cm9rZSAiIzY2NjY2NiIKICAgIH0KCiAgICBlbGVtZW50ICJQaXBlbGluZSIgewogICAgICBiYWNrZ3JvdW5kICIjNzc3RjhDIgogICAgICBzaGFwZSBwaXBlCiAgICAgIHN0cm9rZSAiIzY2NjY2NiIKICAgIH0KCiAgICBlbGVtZW50ICJleHRlcm5hbCIgewogICAgICBiYWNrZ3JvdW5kICIjODEzRUI1IgogICAgICBzdHJva2UgIiM2NjY2NjYiCiAgICB9CgogICAgZWxlbWVudCAiQ29tcG9uZW50IiB7CiAgICAgIGJhY2tncm91bmQgIiM1OEJERDYiCiAgICAgIHN0cm9rZSAiIzY2NjY2NiIKICAgICAgY29sb3IgIiMwMDAwMDAiCiAgICB9CgogICAgZWxlbWVudCAiREIiIHsKICAgICAgYmFja2dyb3VuZCAiIzc3N0Y4QyIKICAgICAgc2hhcGUgQ3lsaW5kZXIKICAgICAgc3Ryb2tlICIjNjY2NjY2IgogICAgICBjb2xvciAiIzAwMDAwMCIKICAgIH0KICB9Cn0gICAvLyA8LS0gYmVpZHphcyB2aWV3cwp9ICAgICAvLyA8LS0gYmVpZHphcyB3b3Jrc3BhY2U="},"views":{"componentViews":[{"containerId":"15","dimensions":{"height":958,"width":7108},"elements":[{"id":"16","x":850,"y":445},{"id":"17","x":1480,"y":455},{"id":"18","x":2080,"y":465},{"id":"19","x":2315,"y":110},{"id":"20","x":360,"y":450},{"id":"21","x":1830,"y":110},{"id":"22","x":1345,"y":110},{"id":"23","x":855,"y":110},{"id":"24","x":365,"y":115}],"externalContainerBoundariesVisible":false,"key":"Platform-Services-view","order":4,"paperSize":"A1_Landscape"},{"containerId":"36","dimensions":{"height":1558,"width":3358},"elements":[{"id":"37","x":1079,"y":329},{"id":"38","x":1079,"y":929},{"id":"39","x":1829,"y":629},{"id":"40","x":329,"y":329},{"id":"41","x":2579,"y":629},{"id":"42","x":329,"y":929}],"externalContainerBoundariesVisible":false,"key":"Analysis-and-classification-model-containers","order":5,"paperSize":"A4_Landscape","relationships":[{"id":"90"},{"id":"91"},{"id":"92"},{"id":"93"},{"id":"94"}]},{"containerId":"61","elements":[{"id":"9","x":0,"y":0},{"id":"62","x":0,"y":0},{"id":"63","x":0,"y":0},{"id":"64","x":0,"y":0},{"id":"65","x":0,"y":0},{"id":"66","x":0,"y":0}],"externalContainerBoundariesVisible":false,"key":"notificatin-service-view","order":6,"relationships":[{"id":"101"},{"id":"95"},{"id":"96"},{"id":"97"},{"id":"98"}]},{"containerId":"50","elements":[{"id":"51","x":0,"y":0},{"id":"52","x":0,"y":0},{"id":"53","x":0,"y":0},{"id":"54","x":0,"y":0}],"externalContainerBoundariesVisible":false,"key":"Data-Sharing-Service-view","order":7,"relationships":[{"id":"102"},{"id":"103"},{"id":"104"}]},{"containerId":"43","dimensions":{"height":2158,"width":3220},"elements":[{"id":"8","x":208,"y":329},{"id":"9","x":208,"y":929},{"id":"44","x":958,"y":629},{"id":"45","x":1708,"y":929},{"id":"46","x":2458,"y":1529},{"id":"47","x":2458,"y":929},{"id":"48","x":1708,"y":329},{"id":"49","x":1708,"y":1529}],"externalContainerBoundariesVisible":false,"key":"Data-Ingestion-Service-view","order":8,"paperSize":"A4_Landscape","relationships":[{"id":"105"},{"id":"106"},{"id":"107"},{"id":"108"},{"id":"109"},{"id":"110"},{"id":"111"}]},{"containerId":"55","elements":[{"id":"7","x":0,"y":0},{"id":"56","x":0,"y":0},{"id":"57","x":0,"y":0},{"id":"58","x":0,"y":0},{"id":"59","x":0,"y":0},{"id":"60","x":0,"y":0}],"externalContainerBoundariesVisible":false,"key":"ERP-Integration-Model-view","order":9,"relationships":[{"id":"112"},{"id":"113"},{"id":"114"},{"id":"115"},{"id":"116"}]},{"containerId":"25","elements":[{"id":"6","x":0,"y":0},{"id":"26","x":0,"y":0},{"id":"27","x":0,"y":0},{"id":"28","x":0,"y":0}],"externalContainerBoundariesVisible":false,"key":"Data-Visualization-Service-view","order":10,"relationships":[{"id":"117"},{"id":"118"},{"id":"119"}]},{"containerId":"29","elements":[{"id":"30","x":0,"y":0},{"id":"31","x":0,"y":0},{"id":"32","x":0,"y":0},{"id":"33","x":0,"y":0},{"id":"34","x":0,"y":0},{"id":"35","x":0,"y":0}],"externalContainerBoundariesVisible":false,"key":"Decision-Making-Module-view","order":11,"relationships":[{"id":"122"},{"id":"123"},{"id":"124"},{"id":"125"},{"id":"126"}]},{"containerId":"11","elements":[{"id":"12","x":0,"y":0},{"id":"13","x":0,"y":0},{"id":"14","x":0,"y":0}],"externalContainerBoundariesVisible":false,"key":"Optimization-Module-view","order":12,"relationships":[{"id":"127"},{"id":"128"}]}],"configuration":{"branding":{},"lastSavedView":"SystemLandscape","metadataSymbols":"SquareBrackets","styles":{"elements":[{"color":"#000000","tag":"Element"},{"color":"#000000","tag":"System"},{"color":"#000000","tag":"Group"},{"color":"#000000","tag":"Node"},{"background":"#23d98d","color":"#000000","stroke":"#666666","tag":"Container"},{"color":"#000000","tag":"AnalysisContainer"},{"background":"#d46a6a","shape":"Person","tag":"Person"},{"background":"#82a77d","stroke":"#666666","tag":"SoftwareSystem"},{"background":"#c41e3a","stroke":"#666666","tag":"MainContainer"},{"background":"#777f8c","shape":"Pipe","stroke":"#666666","tag":"Pipeline"},{"background":"#813eb5","stroke":"#666666","tag":"external"},{"background":"#58bdd6","color":"#000000","stroke":"#666666","tag":"Component"},{"background":"#777f8c","color":"#000000","shape":"Cylinder","stroke":"#666666","tag":"DB"}],"relationships":[{"color":"#000000","tag":"Relationship"}]},"terminology":{"component":"Component","container":"Container","person":"Person","relationship":"Link","softwareSystem":"System"}},"containerViews":[{"dimensions":{"height":2016,"width":3930},"elements":[{"id":"7","x":3280,"y":1345},{"id":"8","x":3230,"y":165},{"id":"9","x":3240,"y":615},{"id":"11","x":1120,"y":1390},{"id":"15","x":1295,"y":650},{"id":"25","x":270,"y":1180},{"id":"29","x":230,"y":705},{"id":"36","x":220,"y":205},{"id":"43","x":2325,"y":195},{"id":"50","x":2350,"y":635},{"id":"55","x":1710,"y":1370},{"id":"61","x":2370,"y":1050}],"externalSoftwareSystemBoundariesVisible":false,"generatedKey":true,"key":"Container-001","order":3,"relationships":[{"id":"76"},{"id":"77"},{"id":"78"},{"id":"79"},{"id":"80"},{"id":"81"},{"id":"82"},{"id":"84"},{"id":"85"},{"id":"86"},{"id":"87"},{"id":"89"},{"id":"99"}],"softwareSystemId":"10"}],"systemContextViews":[{"dimensions":{"height":2854,"width":3075},"elements":[{"id":"1","x":362,"y":329},{"id":"2","x":1062,"y":329},{"id":"5","x":1717,"y":1029},{"id":"7","x":358,"y":1079},{"id":"8","x":2417,"y":1079},{"id":"9","x":1037,"y":2329},{"id":"10","x":1037,"y":1729}],"enterpriseBoundaryVisible":true,"generatedKey":true,"key":"SystemContext-001","order":1,"paperSize":"A3_Landscape","relationships":[{"id":"100","vertices":[{"x":1112,"y":2179}]},{"id":"67","vertices":[{"x":208,"y":1029},{"x":208,"y":1429}]},{"id":"68"},{"id":"69"},{"id":"70","vertices":[{"x":2267,"y":1429}]},{"id":"75"},{"id":"83","vertices":[{"x":1412,"y":2179}]},{"id":"88"}],"softwareSystemId":"10"}],"systemLandscapeViews":[{"dimensions":{"height":2954,"width":3187},"elements":[{"id":"1","x":2175,"y":1185},{"id":"2","x":2190,"y":1675},{"id":"3","x":180,"y":505},{"id":"4","x":1120,"y":500},{"id":"5","x":190,"y":1650},{"id":"7","x":2145,"y":645},{"id":"8","x":160,"y":1240},{"id":"9","x":1095,"y":1050},{"id":"10","x":1095,"y":1550}],"enterpriseBoundaryVisible":true,"key":"SystemLandscape","order":2,"paperSize":"A3_Landscape","relationships":[{"id":"100","vertices":[{"x":1467,"y":1386}]},{"id":"67"},{"id":"68"},{"id":"69"},{"id":"70"},{"id":"71"},{"id":"72"},{"id":"73"},{"id":"75"},{"id":"83","vertices":[{"x":1167,"y":1388}]},{"id":"88"}]}]}}