{"configuration":{},"description":"backend","documentation":{},"id":5,"lastModifiedAgent":"structurizr-onpremises/dsl-editor/98a95685-fadd-4b16-9f64-d50a670e3c51","lastModifiedDate":"2026-03-13T16:05:11Z","lastModifiedUser":"meandair","model":{"deploymentNodes":[{"children":[{"children":[{"containerInstances":[{"containerId":"5","deploymentGroups":["primary1"],"environment":"Primary","id":"172","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.617e5262-14c6-4165-a214-5a22f0aecd4e.920c1940-32db-403c-848b-8da5efcf6b69.cb525639-f5b1-48f4-b7b2-943b5ad5c2c6"},"relationships":[{"description":"Routes weather API requests to","destinationId":"174","id":"175","linkedRelationshipId":"64","sourceId":"172","technology":"HTTP"}],"tags":"Container Instance"}],"environment":"Primary","id":"171","instances":"1","name":"apigateway","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.617e5262-14c6-4165-a214-5a22f0aecd4e.920c1940-32db-403c-848b-8da5efcf6b69"},"tags":"Element,Deployment Node","technology":"Kubernetes DaemonSet"},{"containerInstances":[{"containerId":"9","deploymentGroups":["primary1"],"environment":"Primary","id":"174","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.617e5262-14c6-4165-a214-5a22f0aecd4e.e99d4698-e763-464b-9660-f6783061d8aa.85980a94-149d-44e9-ad40-19dee7119f5e"},"tags":"Container Instance"}],"environment":"Primary","id":"173","instances":"1","name":"airserver","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.617e5262-14c6-4165-a214-5a22f0aecd4e.e99d4698-e763-464b-9660-f6783061d8aa"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"153","deploymentGroups":["primary1"],"environment":"Primary","id":"177","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.617e5262-14c6-4165-a214-5a22f0aecd4e.ff8b2a39-82d5-4743-be65-62da750b1ecc.e79d3472-3a9b-4a83-8264-5ba7cc59a3f4"},"tags":"Container Instance"}],"environment":"Primary","id":"176","instances":"1","name":"nodeexporter","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.617e5262-14c6-4165-a214-5a22f0aecd4e.ff8b2a39-82d5-4743-be65-62da750b1ecc"},"tags":"Element,Deployment Node","technology":"System package"}],"environment":"Primary","id":"170","instances":"1","name":"primary1","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.617e5262-14c6-4165-a214-5a22f0aecd4e"},"tags":"Element,Deployment Node","technology":"AX102, Debian 12"},{"children":[{"containerInstances":[{"containerId":"5","deploymentGroups":["primary2"],"environment":"Primary","id":"180","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.f032b88e-298e-446e-be2f-60af662420a1.f8b73bb9-f992-4466-84a0-14eae1369312"},"tags":"Container Instance"}],"environment":"Primary","id":"179","instances":"1","name":"apigateway","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.f032b88e-298e-446e-be2f-60af662420a1"},"tags":"Element,Deployment Node","technology":"Kubernetes DaemonSet"},{"containerInstances":[{"containerId":"14","deploymentGroups":["primary2"],"environment":"Primary","id":"182","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.5e69dd5c-1de8-4d8e-852b-698ddc90859a.e3ca2142-d928-4495-8f54-577737a6f7ba"},"tags":"Container Instance"}],"environment":"Primary","id":"181","instances":"1","name":"wxprocessor-aux2","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.5e69dd5c-1de8-4d8e-852b-698ddc90859a"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"37","deploymentGroups":["primary2"],"environment":"Primary","id":"184","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.bb8fd56a-3284-48b8-915c-5466913d22ff.431e7ba7-b7bb-4e9d-b9d9-9a01d050ee99"},"relationships":[{"description":"Gets data from","destinationId":"182","id":"185","linkedRelationshipId":"77","sourceId":"184"}],"tags":"Container Instance"}],"environment":"Primary","id":"183","instances":"1","name":"wxprocessor-af1","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.bb8fd56a-3284-48b8-915c-5466913d22ff"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"37","deploymentGroups":["primary2"],"environment":"Primary","id":"187","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.9ed3292f-c7b9-4ef5-8865-23cb360b57aa.0b3e66bf-7ed9-45ee-b44f-d2f45680dd0e"},"relationships":[{"description":"Gets data from","destinationId":"182","id":"188","linkedRelationshipId":"77","sourceId":"187"}],"tags":"Container Instance"}],"environment":"Primary","id":"186","instances":"1","name":"wxprocessor-in1","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.9ed3292f-c7b9-4ef5-8865-23cb360b57aa"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"153","deploymentGroups":["primary2"],"environment":"Primary","id":"190","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.8ebeb096-c324-466c-a336-f1bccf7d67bf.ea87a43d-eb64-42c5-b305-6e997148ff03"},"tags":"Container Instance"}],"environment":"Primary","id":"189","instances":"1","name":"nodeexporter","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e.8ebeb096-c324-466c-a336-f1bccf7d67bf"},"tags":"Element,Deployment Node","technology":"System package"}],"environment":"Primary","id":"178","instances":"1","name":"primary2","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.224989e4-394b-42ad-bf45-f52c0995af6e"},"tags":"Element,Deployment Node","technology":"AX102, Debian 12"},{"children":[{"containerInstances":[{"containerId":"5","deploymentGroups":["primary3"],"environment":"Primary","id":"193","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.247505aa-3e37-4af6-ae91-44f905458e14.930f81c2-fdf8-4dcb-ab43-984c007ca889"},"tags":"Container Instance"}],"environment":"Primary","id":"192","instances":"1","name":"apigateway","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.247505aa-3e37-4af6-ae91-44f905458e14"},"tags":"Element,Deployment Node","technology":"Kubernetes DaemonSet"},{"containerInstances":[{"containerId":"14","deploymentGroups":["primary3"],"environment":"Primary","id":"195","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.9323daf6-3c0d-421c-90db-76d5507198b7.a4ca202d-e2c6-4719-a28b-bf4d451a3d46"},"tags":"Container Instance"}],"environment":"Primary","id":"194","instances":"1","name":"wxprocessor-aux3","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.9323daf6-3c0d-421c-90db-76d5507198b7"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"25","deploymentGroups":["primary3"],"environment":"Primary","id":"197","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.fde9b315-077d-4cf2-9fd0-99590f020815.871c8b69-b9d3-41b1-8788-db8979582471"},"relationships":[{"description":"Gets data from","destinationId":"195","id":"198","linkedRelationshipId":"76","sourceId":"197"}],"tags":"Container Instance"}],"environment":"Primary","id":"196","instances":"1","name":"wxprocessor-glb","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.fde9b315-077d-4cf2-9fd0-99590f020815"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"37","deploymentGroups":["primary3"],"environment":"Primary","id":"200","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.961a986b-26bb-4bfb-a1f6-fb253564a36a.fe7cf56b-47c7-4e1a-a114-3203011e06f9"},"relationships":[{"description":"Gets data from","destinationId":"195","id":"201","linkedRelationshipId":"77","sourceId":"200"}],"tags":"Container Instance"}],"environment":"Primary","id":"199","instances":"1","name":"wxprocessor-sa1","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.961a986b-26bb-4bfb-a1f6-fb253564a36a"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"153","deploymentGroups":["primary3"],"environment":"Primary","id":"203","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.751890b0-c6d0-4c25-a086-64e748a62dca.21b09454-3c70-4040-9b37-3744f94d0ecc"},"tags":"Container Instance"}],"environment":"Primary","id":"202","instances":"1","name":"nodeexporter","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3.751890b0-c6d0-4c25-a086-64e748a62dca"},"tags":"Element,Deployment Node","technology":"System package"}],"environment":"Primary","id":"191","instances":"1","name":"primary3","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.30aa9ebf-0b4f-46ca-9d54-26e80f805cc3"},"tags":"Element,Deployment Node","technology":"AX101, Debian 12"},{"children":[{"containerInstances":[{"containerId":"5","deploymentGroups":["primary4"],"environment":"Primary","id":"206","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.eb787652-624f-4c66-8625-0328ade06090.08c122d1-c394-411b-9d8f-d09e355a7a09"},"tags":"Container Instance"}],"environment":"Primary","id":"205","instances":"1","name":"apigateway","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.eb787652-624f-4c66-8625-0328ade06090"},"tags":"Element,Deployment Node","technology":"Kubernetes DaemonSet"},{"containerInstances":[{"containerId":"14","deploymentGroups":["primary4"],"environment":"Primary","id":"208","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.87ed5cf6-57d6-444c-961a-b669151974d9.7e47f9c9-b344-4e0f-9779-309cb30aa4ca"},"tags":"Container Instance"}],"environment":"Primary","id":"207","instances":"1","name":"wxprocessor-aux4","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.87ed5cf6-57d6-444c-961a-b669151974d9"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"37","deploymentGroups":["primary4"],"environment":"Primary","id":"210","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.4af876f0-004f-4500-91f0-2f92e97156f2.036369f7-72c7-4e9e-80b7-3015ee29d2ab"},"relationships":[{"description":"Gets data from","destinationId":"208","id":"211","linkedRelationshipId":"77","sourceId":"210"}],"tags":"Container Instance"}],"environment":"Primary","id":"209","instances":"1","name":"wxprocessor-eu1","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.4af876f0-004f-4500-91f0-2f92e97156f2"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"37","deploymentGroups":["primary4"],"environment":"Primary","id":"213","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.bbaf6b89-e055-4e9c-a8d5-b3802eda4da8.9a41038a-1b13-4224-93ce-d7adf65e607b"},"relationships":[{"description":"Gets data from","destinationId":"208","id":"214","linkedRelationshipId":"77","sourceId":"213"}],"tags":"Container Instance"}],"environment":"Primary","id":"212","instances":"1","name":"wxprocessor-oc2","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.bbaf6b89-e055-4e9c-a8d5-b3802eda4da8"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"153","deploymentGroups":["primary4"],"environment":"Primary","id":"216","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.4b56d6e0-3320-4672-bb9d-ac15a89b1256.c41f366a-a5bc-49aa-9c94-a91888c2dc41"},"tags":"Container Instance"}],"environment":"Primary","id":"215","instances":"1","name":"nodeexporter","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e.4b56d6e0-3320-4672-bb9d-ac15a89b1256"},"tags":"Element,Deployment Node","technology":"System package"}],"environment":"Primary","id":"204","instances":"1","name":"primary4","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.fecbf604-a5e3-4851-9d64-e93827a57a2e"},"tags":"Element,Deployment Node","technology":"AX102, Debian 12"},{"children":[{"containerInstances":[{"containerId":"5","deploymentGroups":["primary5"],"environment":"Primary","id":"219","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685.cd4d9f9a-e7a0-4c57-86b5-100e9e4ea85d.c1d969fc-5d3d-4550-8fc6-b52184c6ab70"},"tags":"Container Instance"}],"environment":"Primary","id":"218","instances":"1","name":"apigateway","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685.cd4d9f9a-e7a0-4c57-86b5-100e9e4ea85d"},"tags":"Element,Deployment Node","technology":"Kubernetes DaemonSet"},{"containerInstances":[{"containerId":"14","deploymentGroups":["primary5"],"environment":"Primary","id":"221","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685.72b303b3-8299-4b78-a58d-83c53e040d15.5cbe7195-e499-4a85-83d4-172dd42fccff"},"tags":"Container Instance"}],"environment":"Primary","id":"220","instances":"1","name":"wxprocessor-aux1","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685.72b303b3-8299-4b78-a58d-83c53e040d15"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"37","deploymentGroups":["primary5"],"environment":"Primary","id":"223","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685.1b6a3d62-cca9-456b-946b-3a4627445326.104ba40b-700d-4768-9d96-0127a26cc1c0"},"relationships":[{"description":"Gets data from","destinationId":"221","id":"224","linkedRelationshipId":"77","sourceId":"223"}],"tags":"Container Instance"}],"environment":"Primary","id":"222","instances":"1","name":"wxprocessor-na1","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685.1b6a3d62-cca9-456b-946b-3a4627445326"},"tags":"Element,Deployment Node","technology":"Kubernetes Deployment"},{"containerInstances":[{"containerId":"153","deploymentGroups":["primary5"],"environment":"Primary","id":"226","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685.3cd16a05-c91a-4eb0-9832-4b1466419deb.0646dd75-0bd7-4e36-93d0-412688105ed7"},"tags":"Container Instance"}],"environment":"Primary","id":"225","instances":"1","name":"nodeexporter","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685.3cd16a05-c91a-4eb0-9832-4b1466419deb"},"tags":"Element,Deployment Node","technology":"System package"}],"environment":"Primary","id":"217","instances":"1","name":"primary5","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.e7020be1-33d7-489f-b387-d314dcc5e685"},"tags":"Element,Deployment Node","technology":"AX102, Debian 12"}],"containerInstances":[{"containerId":"12","deploymentGroups":["primary"],"environment":"Primary","id":"166","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.edba95b5-57fd-42bf-b64a-8a592efc631d"},"tags":"Container Instance"},{"containerId":"62","deploymentGroups":["primary"],"environment":"Primary","id":"167","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.9dc5db71-c148-40a6-bdc5-eadc4515537c"},"tags":"Container Instance"},{"containerId":"6","deploymentGroups":["primary"],"environment":"Primary","id":"168","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.19c9b0e6-1f5d-41a2-a782-2861e68d10a2"},"tags":"Container Instance"},{"containerId":"149","deploymentGroups":["primary"],"environment":"Primary","id":"169","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525.2cfa0508-6d32-43cc-a949-ba4c583586cc"},"tags":"Container Instance"}],"environment":"Primary","id":"165","instances":"1","name":"primary","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.d39d46a3-f679-4bb9-a506-0c94756d4525"},"tags":"Element,Deployment Node","technology":"Hetzner, k0s"},{"containerInstances":[{"containerId":"11","deploymentGroups":["nwcgeo1"],"environment":"Primary","id":"228","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.90cce211-92d5-47c4-aab9-878930d471bb.a8ae93f7-ace3-403d-98db-c9e9e862ad69"},"tags":"Container Instance"},{"containerId":"10","deploymentGroups":["nwcgeo1"],"environment":"Primary","id":"229","instanceId":1,"properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.90cce211-92d5-47c4-aab9-878930d471bb.0fcffbb4-1700-4212-92ad-775630db7414"},"relationships":[{"description":"Gets data from","destinationId":"228","id":"230","linkedRelationshipId":"72","sourceId":"229"}],"tags":"Container Instance"}],"environment":"Primary","id":"227","instances":"1","name":"nwcgeo1","properties":{"structurizr.dsl.identifier":"43832825-0edc-4033-9b90-0e87f2e6e0b6.90cce211-92d5-47c4-aab9-878930d471bb"},"tags":"Element,Deployment Node","technology":"Single-node cluster"}],"people":[{"description":"DevOps staff within Meandair.","id":"1","location":"Unspecified","name":"DevOps Staff","properties":{"structurizr.dsl.identifier":"devopsstaff"},"tags":"Element,Person"},{"description":"A customer of Meandair.","id":"2","location":"Unspecified","name":"Customer","properties":{"structurizr.dsl.identifier":"user"},"relationships":[{"description":"Sends requests to","destinationId":"5","id":"131","sourceId":"2","tags":"Relationship","technology":"HTTPS"},{"description":"Sends requests to","destinationId":"4","id":"132","linkedRelationshipId":"131","sourceId":"2","technology":"HTTPS"}],"tags":"Element,Person"}],"softwareSystems":[{"description":"External providers of NWP, observation, forecast, and satellite-derived source data used by the processing pipelines.","documentation":{},"id":"3","location":"Unspecified","name":"Weather Data Providers","properties":{"structurizr.dsl.identifier":"weatherdataproviders"},"tags":"Element,Software System,External"},{"containers":[{"description":"Provides a centralized API, authentication, authorization, and documentation.","documentation":{},"id":"5","name":"apigateway","properties":{"structurizr.dsl.identifier":"apisystem.apigateway"},"relationships":[{"description":"Routes weather API requests to","destinationId":"9","id":"64","sourceId":"5","tags":"Relationship","technology":"HTTP"},{"description":"Routes weather API requests to","destinationId":"8","id":"65","linkedRelationshipId":"64","sourceId":"5","technology":"HTTP"},{"description":"Exposes exported NWC/GEO products from","destinationId":"10","id":"68","sourceId":"5","tags":"Relationship","technology":"HTTP, files"},{"description":"Sends logs to","destinationId":"140","id":"143","sourceId":"5","tags":"Relationship","technology":"Filebeat"},{"description":"Sends logs to","destinationId":"139","id":"144","linkedRelationshipId":"143","sourceId":"5","technology":"Filebeat"}],"tags":"Element,Container,Runtime","technology":"OpenResty, Lua, Redocly"},{"description":"Renews TLS certificates for Kubernetes ingress and updates the TLS secret used by the API entrypoints.","documentation":{},"id":"6","name":"tlscontroller","properties":{"structurizr.dsl.identifier":"apisystem.tlscontroller"},"relationships":[{"description":"Renews TLS material for","destinationId":"5","id":"7","sourceId":"6","tags":"Relationship","technology":"Kubernetes secret"}],"tags":"Element,Container,Infrastructure","technology":"Kubernetes CronJob, certbot, lexicon"}],"description":"Manages centralized access via REST API.","documentation":{},"id":"4","location":"Unspecified","name":"API System","properties":{"structurizr.dsl.identifier":"apisystem"},"relationships":[{"description":"Routes weather API requests to","destinationId":"9","id":"66","linkedRelationshipId":"64","sourceId":"4","technology":"HTTP"},{"description":"Routes weather API requests to","destinationId":"8","id":"67","linkedRelationshipId":"64","sourceId":"4","technology":"HTTP"},{"description":"Exposes exported NWC/GEO products from","destinationId":"10","id":"69","linkedRelationshipId":"68","sourceId":"4","technology":"HTTP, files"},{"description":"Sends logs to","destinationId":"140","id":"145","linkedRelationshipId":"143","sourceId":"4","technology":"Filebeat"},{"description":"Sends logs to","destinationId":"139","id":"146","linkedRelationshipId":"143","sourceId":"4","technology":"Filebeat"}],"tags":"Element,Software System"},{"containers":[{"description":"Provides a centralized access to weather data (map, tile, coverage, spot, METAR, AW-METAR, TAF, AW-TAF).","documentation":{},"id":"9","name":"airserver","properties":{"structurizr.dsl.identifier":"weathersystem.airserver"},"relationships":[{"description":"Gets data from","destinationId":"25","id":"70","sourceId":"9","tags":"Relationship","technology":"via apigateway"},{"description":"Gets data from","destinationId":"37","id":"71","sourceId":"9","tags":"Relationship","technology":"via apigateway"}],"tags":"Element,Container,Runtime","technology":"Actix Web"},{"description":"Generates regional meteorological products from geostationary satellite data.","documentation":{},"id":"10","name":"nwcgeo","properties":{"structurizr.dsl.identifier":"weathersystem.nwcgeo"},"relationships":[{"description":"Gets data from","destinationId":"11","id":"72","sourceId":"10","tags":"Relationship"},{"description":"Processes satellite-derived source inputs from","destinationId":"3","id":"88","sourceId":"10","tags":"Relationship"}],"tags":"Element,Container,Runtime","technology":"Ansible-managed NWC/GEO"},{"description":"Downloads and prepares auxiliary inputs for NWC/GEO.","documentation":{},"id":"11","name":"nwcgeo_aux","properties":{"structurizr.dsl.identifier":"weathersystem.nwcgeo_aux"},"relationships":[{"description":"Downloads auxiliary weather inputs from","destinationId":"3","id":"87","sourceId":"11","tags":"Relationship"}],"tags":"Element,Container,Runtime","technology":"Ansible-managed Python, Airflow-era tooling"},{"description":"Processes NWP datasets and publishes outputs for downstream services.","documentation":{},"id":"12","name":"nwpprocessor","properties":{"structurizr.dsl.identifier":"weathersystem.nwpprocessor"},"relationships":[{"description":"Publishes datasets to","destinationId":"9","id":"73","sourceId":"12","tags":"Relationship"},{"description":"Downloads forecast source datasets from","destinationId":"3","id":"84","sourceId":"12","tags":"Relationship"},{"description":"Stores datasets in","destinationId":"130","id":"133","sourceId":"12","tags":"Relationship","technology":"S3"},{"description":"Stores datasets in","destinationId":"129","id":"134","linkedRelationshipId":"133","sourceId":"12","technology":"S3"}],"tags":"Element,Container,Runtime","technology":"Python, Argo Workflows"},{"description":"Processes nowcast datasets and publishes outputs for downstream services.","documentation":{},"id":"13","name":"nwcprocessor","properties":{"structurizr.dsl.identifier":"weathersystem.nwcprocessor"},"relationships":[{"description":"Publishes datasets to","destinationId":"9","id":"74","sourceId":"13","tags":"Relationship"},{"description":"Reads NWP datasets from","destinationId":"12","id":"75","sourceId":"13","tags":"Relationship","technology":"S3"},{"description":"Stores datasets in","destinationId":"130","id":"137","sourceId":"13","tags":"Relationship","technology":"S3"},{"description":"Stores datasets in","destinationId":"129","id":"138","linkedRelationshipId":"137","sourceId":"13","technology":"S3"}],"tags":"Element,Container,Runtime","technology":"Python, Argo Workflows"},{"components":[{"description":"Downloads GFS source files.","documentation":{},"id":"15","name":"download_gfs","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.download_gfs"},"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Prepares downloaded GFS source files for downstream processing.","documentation":{},"id":"16","name":"prepare_gfs","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.prepare_gfs"},"relationships":[{"description":"Gets source data from","destinationId":"15","id":"24","sourceId":"16","tags":"Relationship"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Downloads GTG turbulence source files.","documentation":{},"id":"17","name":"download_gtg","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.download_gtg"},"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Downloads ICON-EU source files.","documentation":{},"id":"18","name":"download_icon_eu","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.download_icon_eu"},"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Downloads and stores METAR observations.","documentation":{},"id":"19","name":"download_metar","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.download_metar"},"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Downloads and prepares NWC/GEO source files.","documentation":{},"id":"20","name":"download_nwcgeo","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.download_nwcgeo"},"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Downloads and stores SYNOP observations.","documentation":{},"id":"21","name":"download_synop","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.download_synop"},"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Downloads and stores TAF forecasts.","documentation":{},"id":"22","name":"download_taf","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.download_taf"},"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Performs recurring cleanup and maintenance work.","documentation":{},"id":"23","name":"maintenance","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux.maintenance"},"tags":"Element,Component","technology":"Airflow DAG"}],"description":"Runs the auxiliary wxprocessor deployments with region=aux.","documentation":{},"id":"14","name":"wxprocessor_aux","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_aux"},"relationships":[{"description":"Reads and writes metadata in","destinationId":"62","id":"79","sourceId":"14","tags":"Relationship","technology":"PostgreSQL"},{"description":"Downloads NWP and observation source datasets from","destinationId":"3","id":"86","sourceId":"14","tags":"Relationship"}],"tags":"Element,Container,Runtime","technology":"Python, Airflow"},{"components":[{"description":"Builds airport-focused products and layers for the global deployment.","documentation":{},"id":"26","name":"airports","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_glb.airports"},"relationships":[{"description":"Gets data from","destinationId":"27","id":"32","sourceId":"26","tags":"Relationship"},{"description":"Gets data from","destinationId":"28","id":"33","sourceId":"26","tags":"Relationship"},{"description":"Gets data from","destinationId":"29","id":"34","sourceId":"26","tags":"Relationship"},{"description":"Gets data from","destinationId":"30","id":"35","sourceId":"26","tags":"Relationship"},{"description":"Gets data from","destinationId":"31","id":"36","sourceId":"26","tags":"Relationship"},{"description":"Gets observation data from","destinationId":"19","id":"100","sourceId":"26","tags":"Relationship"},{"description":"Gets observation data from","destinationId":"14","id":"101","linkedRelationshipId":"100","sourceId":"26"},{"description":"Gets forecast data from","destinationId":"22","id":"103","sourceId":"26","tags":"Relationship"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds global QNH pressure products.","documentation":{},"id":"27","name":"air_pressure_qnh_glb","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_glb.air_pressure_qnh_glb"},"relationships":[{"description":"Gets data from","destinationId":"16","id":"89","sourceId":"27","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"90","linkedRelationshipId":"89","sourceId":"27"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds global temperature and dew point products.","documentation":{},"id":"28","name":"temperature_2m_agl_glb","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_glb.temperature_2m_agl_glb"},"relationships":[{"description":"Gets data from","destinationId":"16","id":"92","sourceId":"28","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"93","linkedRelationshipId":"92","sourceId":"28"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds global visibility products.","documentation":{},"id":"29","name":"visibility_glb","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_glb.visibility_glb"},"relationships":[{"description":"Gets data from","destinationId":"16","id":"94","sourceId":"29","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"95","linkedRelationshipId":"94","sourceId":"29"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds global cloud cover and cloud ceiling products.","documentation":{},"id":"30","name":"clouds","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_glb.clouds"},"relationships":[{"description":"Gets data from","destinationId":"16","id":"96","sourceId":"30","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"97","linkedRelationshipId":"96","sourceId":"30"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds global wind and wind gust products.","documentation":{},"id":"31","name":"wind","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_glb.wind"},"relationships":[{"description":"Gets data from","destinationId":"16","id":"98","sourceId":"31","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"99","linkedRelationshipId":"98","sourceId":"31"}],"tags":"Element,Component","technology":"Airflow DAG"}],"description":"Runs the global wxprocessor deployments with region=glb.","documentation":{},"id":"25","name":"wxprocessor_glb","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor_glb"},"relationships":[{"description":"Gets data from","destinationId":"14","id":"76","sourceId":"25","tags":"Relationship"},{"description":"Reads and writes metadata in","destinationId":"62","id":"80","sourceId":"25","tags":"Relationship","technology":"PostgreSQL"},{"description":"Gets data from","destinationId":"16","id":"91","linkedRelationshipId":"89","sourceId":"25"},{"description":"Gets observation data from","destinationId":"19","id":"102","linkedRelationshipId":"100","sourceId":"25"},{"description":"Gets forecast data from","destinationId":"22","id":"104","linkedRelationshipId":"103","sourceId":"25"}],"tags":"Element,Container,Runtime","technology":"Python, Airflow"},{"components":[{"description":"Builds airport-focused products and layers for regional deployments.","documentation":{},"id":"38","name":"airports","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.airports"},"relationships":[{"description":"Gets data from","destinationId":"46","id":"50","sourceId":"38","tags":"Relationship"},{"description":"Gets data from","destinationId":"47","id":"51","sourceId":"38","tags":"Relationship"},{"description":"Gets data from","destinationId":"39","id":"52","sourceId":"38","tags":"Relationship"},{"description":"Gets data from","destinationId":"40","id":"53","sourceId":"38","tags":"Relationship"},{"description":"Gets data from","destinationId":"41","id":"54","sourceId":"38","tags":"Relationship"},{"description":"Gets data from","destinationId":"48","id":"55","sourceId":"38","tags":"Relationship"},{"description":"Gets data from","destinationId":"49","id":"56","sourceId":"38","tags":"Relationship"},{"description":"Gets observation data from","destinationId":"19","id":"116","sourceId":"38","tags":"Relationship"},{"description":"Gets observation data from","destinationId":"14","id":"117","linkedRelationshipId":"116","sourceId":"38"},{"description":"Gets forecast data from","destinationId":"22","id":"119","sourceId":"38","tags":"Relationship"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds cloud ceiling, cloud top, and related regional cloud products.","documentation":{},"id":"39","name":"cloud","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.cloud"},"relationships":[{"description":"Gets data from","destinationId":"41","id":"57","sourceId":"39","tags":"Relationship"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Processes NWC/GEO nowcast products.","documentation":{},"id":"40","name":"nowcast","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.nowcast"},"relationships":[{"description":"Gets data from","destinationId":"42","id":"58","sourceId":"40","tags":"Relationship"},{"description":"Gets data from","destinationId":"20","id":"111","sourceId":"40","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"112","linkedRelationshipId":"111","sourceId":"40"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds regional NWP cloud products from GFS and ICON-EU inputs.","documentation":{},"id":"41","name":"nwp_cloud","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.nwp_cloud"},"relationships":[{"description":"Gets data from","destinationId":"42","id":"59","sourceId":"41","tags":"Relationship"},{"description":"Gets data from","destinationId":"44","id":"60","sourceId":"41","tags":"Relationship"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Processes prepared GFS inputs into regional NWP products.","documentation":{},"id":"42","name":"process_gfs","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.process_gfs"},"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Processes GTG turbulence inputs.","documentation":{},"id":"43","name":"process_gtg","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.process_gtg"},"relationships":[{"description":"Gets data from","destinationId":"17","id":"108","sourceId":"43","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"109","linkedRelationshipId":"108","sourceId":"43"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Processes ICON-EU inputs for regional products.","documentation":{},"id":"44","name":"process_icon_eu","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.process_icon_eu"},"relationships":[{"description":"Gets data from","destinationId":"18","id":"105","sourceId":"44","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"106","linkedRelationshipId":"105","sourceId":"44"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Processes NWC/GEO thunderstorm products.","documentation":{},"id":"45","name":"rdt","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.rdt"},"relationships":[{"description":"Gets data from","destinationId":"42","id":"61","sourceId":"45","tags":"Relationship"},{"description":"Gets data from","destinationId":"20","id":"114","sourceId":"45","tags":"Relationship"},{"description":"Gets data from","destinationId":"14","id":"115","linkedRelationshipId":"114","sourceId":"45"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds regional QNH pressure products.","documentation":{},"id":"46","name":"air_pressure_qnh","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.air_pressure_qnh"},"relationships":[{"description":"Gets observation data from","destinationId":"19","id":"121","sourceId":"46","tags":"Relationship"},{"description":"Gets observation data from","destinationId":"14","id":"122","linkedRelationshipId":"121","sourceId":"46"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds regional temperature and dew point products.","documentation":{},"id":"47","name":"air_temperature_2m_agl","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.air_temperature_2m_agl"},"relationships":[{"description":"Gets observation data from","destinationId":"19","id":"123","sourceId":"47","tags":"Relationship"},{"description":"Gets observation data from","destinationId":"14","id":"124","linkedRelationshipId":"123","sourceId":"47"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds regional surface visibility products.","documentation":{},"id":"48","name":"surface_visibility","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.surface_visibility"},"relationships":[{"description":"Gets observation data from","destinationId":"19","id":"125","sourceId":"48","tags":"Relationship"},{"description":"Gets observation data from","destinationId":"14","id":"126","linkedRelationshipId":"125","sourceId":"48"}],"tags":"Element,Component","technology":"Airflow DAG"},{"description":"Builds regional wind and wind gust products.","documentation":{},"id":"49","name":"wind_agl","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor.wind_agl"},"relationships":[{"description":"Gets observation data from","destinationId":"19","id":"127","sourceId":"49","tags":"Relationship"},{"description":"Gets observation data from","destinationId":"14","id":"128","linkedRelationshipId":"127","sourceId":"49"}],"tags":"Element,Component","technology":"Airflow DAG"}],"description":"Runs the regional wxprocessor deployments for non-aux, non-glb regions.","documentation":{},"id":"37","name":"wxprocessor","properties":{"structurizr.dsl.identifier":"weathersystem.wxprocessor"},"relationships":[{"description":"Gets data from","destinationId":"14","id":"77","sourceId":"37","tags":"Relationship"},{"description":"Gets data from","destinationId":"10","id":"78","sourceId":"37","tags":"Relationship","technology":"via apigateway; netCDF"},{"description":"Reads and writes metadata in","destinationId":"62","id":"81","sourceId":"37","tags":"Relationship","technology":"PostgreSQL"},{"description":"Gets data from","destinationId":"18","id":"107","linkedRelationshipId":"105","sourceId":"37"},{"description":"Gets data from","destinationId":"17","id":"110","linkedRelationshipId":"108","sourceId":"37"},{"description":"Gets data from","destinationId":"20","id":"113","linkedRelationshipId":"111","sourceId":"37"},{"description":"Gets observation data from","destinationId":"19","id":"118","linkedRelationshipId":"116","sourceId":"37"},{"description":"Gets forecast data from","destinationId":"22","id":"120","linkedRelationshipId":"119","sourceId":"37"}],"tags":"Element,Container,Runtime","technology":"Python, Airflow"},{"description":"Stores weather-processing metadata used by wxprocessor deployments.","documentation":{},"id":"62","name":"wxdb","properties":{"structurizr.dsl.identifier":"weathersystem.wxdb"},"tags":"Element,Container,Database,DataStore","technology":"PostgreSQL"},{"description":"Provides artifact repository and workflow infrastructure used by the processor charts.","documentation":{},"id":"63","name":"argoworkflows","properties":{"structurizr.dsl.identifier":"weathersystem.argoworkflows"},"relationships":[{"description":"Runs scheduled workflows for","destinationId":"12","id":"82","sourceId":"63","tags":"Relationship"},{"description":"Runs scheduled workflows for","destinationId":"13","id":"83","sourceId":"63","tags":"Relationship"}],"tags":"Element,Container,Infrastructure,Orchestration","technology":"Argo Workflows"}],"description":"Processes weather data.","documentation":{},"id":"8","location":"Unspecified","name":"Weather Processing System","properties":{"structurizr.dsl.identifier":"weathersystem"},"relationships":[{"description":"Downloads forecast source datasets from","destinationId":"3","id":"85","linkedRelationshipId":"84","sourceId":"8"},{"description":"Stores datasets in","destinationId":"130","id":"135","linkedRelationshipId":"133","sourceId":"8","technology":"S3"},{"description":"Stores datasets in","destinationId":"129","id":"136","linkedRelationshipId":"133","sourceId":"8","technology":"S3"}],"tags":"Element,Software System"},{"containers":[{"description":"Short-term and long-term object storage archive.","documentation":{},"id":"130","name":"minio","properties":{"structurizr.dsl.identifier":"archivesystem.minio"},"tags":"Element,Container,FileSystem,DataStore","technology":"MinIO"}],"description":"Archives weather data.","documentation":{},"id":"129","location":"Unspecified","name":"Archive System","properties":{"structurizr.dsl.identifier":"archivesystem"},"tags":"Element,Software System"},{"containers":[{"description":"Transforms logs via ingestion pipelines and stores them.","documentation":{},"id":"140","name":"elastic","properties":{"structurizr.dsl.identifier":"logsystem.elastic"},"tags":"Element,Container,Infrastructure,Database","technology":"Elasticsearch"},{"description":"Allows logs analysis and advanced visualization.","documentation":{},"id":"141","name":"kibana","properties":{"structurizr.dsl.identifier":"logsystem.kibana"},"relationships":[{"description":"Gets logs from","destinationId":"140","id":"142","sourceId":"141","tags":"Relationship"}],"tags":"Element,Container,Infrastructure","technology":"Kibana"}],"description":"Collects, transforms and stores logs.","documentation":{},"id":"139","location":"Unspecified","name":"Log System","properties":{"structurizr.dsl.identifier":"logsystem"},"tags":"Element,Software System"},{"containers":[{"description":"Handles alerts sent by other applications.","documentation":{},"id":"148","name":"alertmanager","properties":{"structurizr.dsl.identifier":"monitoringsystem.alertmanager"},"relationships":[{"description":"Sends alerts to","destinationId":"1","id":"154","sourceId":"148","tags":"Relationship"}],"tags":"Element,Container,Infrastructure","technology":"Alertmanager"},{"description":"Collects logs and is the current best match for the historical API exporter role.","documentation":{},"id":"149","name":"logshipper","properties":{"structurizr.dsl.identifier":"monitoringsystem.logshipper"},"relationships":[{"description":"Checks API status","destinationId":"9","id":"161","sourceId":"149","tags":"Relationship","technology":"via apigateway"},{"description":"Checks API status","destinationId":"8","id":"162","linkedRelationshipId":"161","sourceId":"149","technology":"via apigateway"}],"tags":"Element,Container,Infrastructure","technology":"Helm deployment"},{"description":"Collects and monitors various metrics in real-time.","documentation":{},"id":"150","name":"prometheus","properties":{"structurizr.dsl.identifier":"monitoringsystem.prometheus"},"relationships":[{"description":"Sends alerts to","destinationId":"148","id":"157","sourceId":"150","tags":"Relationship"},{"description":"Gets metrics from","destinationId":"149","id":"158","sourceId":"150","tags":"Relationship"},{"description":"Stores metrics to","destinationId":"151","id":"159","sourceId":"150","tags":"Relationship"},{"description":"Gets metrics from","destinationId":"153","id":"160","sourceId":"150","tags":"Relationship"}],"tags":"Element,Container,Infrastructure","technology":"Prometheus"},{"description":"Long-term metrics storage.","documentation":{},"id":"151","name":"victoriametrics","properties":{"structurizr.dsl.identifier":"monitoringsystem.victoriametrics"},"tags":"Element,Container,Database,DataStore","technology":"VictoriaMetrics"},{"description":"Allows metrics visualization.","documentation":{},"id":"152","name":"grafana","properties":{"structurizr.dsl.identifier":"monitoringsystem.grafana"},"relationships":[{"description":"Gets metrics from","destinationId":"150","id":"156","sourceId":"152","tags":"Relationship"}],"tags":"Element,Container,Infrastructure","technology":"Grafana"},{"description":"Provides hardware and OS metrics on each node.","documentation":{},"id":"153","name":"nodeexporter","properties":{"structurizr.dsl.identifier":"monitoringsystem.nodeexporter"},"tags":"Element,Container,Infrastructure","technology":"prometheus-node-exporter"}],"description":"Monitors the infrastructure.","documentation":{},"id":"147","location":"Unspecified","name":"Monitoring System","properties":{"structurizr.dsl.identifier":"monitoringsystem"},"relationships":[{"description":"Sends alerts to","destinationId":"1","id":"155","linkedRelationshipId":"154","sourceId":"147"},{"description":"Checks API status","destinationId":"9","id":"163","linkedRelationshipId":"161","sourceId":"147","technology":"via apigateway"},{"description":"Checks API status","destinationId":"8","id":"164","linkedRelationshipId":"161","sourceId":"147","technology":"via apigateway"}],"tags":"Element,Software System"}]},"name":"product","properties":{"structurizr.dsl":"d29ya3NwYWNlICJwcm9kdWN0IiAiYmFja2VuZCIgewoKICAgICFpZGVudGlmaWVycyBoaWVyYXJjaGljYWwKCiAgICBtb2RlbCB7CiAgICAgICAgZGV2b3BzU3RhZmYgPSBwZXJzb24gIkRldk9wcyBTdGFmZiIgIkRldk9wcyBzdGFmZiB3aXRoaW4gTWVhbmRhaXIuIgogICAgICAgIHVzZXIgPSBwZXJzb24gIkN1c3RvbWVyIiAiQSBjdXN0b21lciBvZiBNZWFuZGFpci4iCiAgICAgICAgd2VhdGhlckRhdGFQcm92aWRlcnMgPSBzb2Z0d2FyZVN5c3RlbSAiV2VhdGhlciBEYXRhIFByb3ZpZGVycyIgIkV4dGVybmFsIHByb3ZpZGVycyBvZiBOV1AsIG9ic2VydmF0aW9uLCBmb3JlY2FzdCwgYW5kIHNhdGVsbGl0ZS1kZXJpdmVkIHNvdXJjZSBkYXRhIHVzZWQgYnkgdGhlIHByb2Nlc3NpbmcgcGlwZWxpbmVzLiIgIkV4dGVybmFsIgoKICAgICAgICBhcGlTeXN0ZW0gPSBzb2Z0d2FyZVN5c3RlbSAiQVBJIFN5c3RlbSIgIk1hbmFnZXMgY2VudHJhbGl6ZWQgYWNjZXNzIHZpYSBSRVNUIEFQSS4iIHsKICAgICAgICAgICAgYXBpZ2F0ZXdheSA9IGNvbnRhaW5lciAiYXBpZ2F0ZXdheSIgIlByb3ZpZGVzIGEgY2VudHJhbGl6ZWQgQVBJLCBhdXRoZW50aWNhdGlvbiwgYXV0aG9yaXphdGlvbiwgYW5kIGRvY3VtZW50YXRpb24uIiAiT3BlblJlc3R5LCBMdWEsIFJlZG9jbHkiICJSdW50aW1lIgogICAgICAgICAgICB0bHNjb250cm9sbGVyID0gY29udGFpbmVyICJ0bHNjb250cm9sbGVyIiAiUmVuZXdzIFRMUyBjZXJ0aWZpY2F0ZXMgZm9yIEt1YmVybmV0ZXMgaW5ncmVzcyBhbmQgdXBkYXRlcyB0aGUgVExTIHNlY3JldCB1c2VkIGJ5IHRoZSBBUEkgZW50cnlwb2ludHMuIiAiS3ViZXJuZXRlcyBDcm9uSm9iLCBjZXJ0Ym90LCBsZXhpY29uIiAiSW5mcmFzdHJ1Y3R1cmUiCiAgICAgICAgICAgIAogICAgICAgICAgICB0bHNjb250cm9sbGVyIC0+IGFwaWdhdGV3YXkgIlJlbmV3cyBUTFMgbWF0ZXJpYWwgZm9yIiAiS3ViZXJuZXRlcyBzZWNyZXQiCiAgICAgICAgfQoKICAgICAgICB3ZWF0aGVyU3lzdGVtID0gc29mdHdhcmVTeXN0ZW0gIldlYXRoZXIgUHJvY2Vzc2luZyBTeXN0ZW0iICJQcm9jZXNzZXMgd2VhdGhlciBkYXRhLiIgewogICAgICAgICAgICBhaXJzZXJ2ZXIgPSBjb250YWluZXIgImFpcnNlcnZlciIgIlByb3ZpZGVzIGEgY2VudHJhbGl6ZWQgYWNjZXNzIHRvIHdlYXRoZXIgZGF0YSAobWFwLCB0aWxlLCBjb3ZlcmFnZSwgc3BvdCwgTUVUQVIsIEFXLU1FVEFSLCBUQUYsIEFXLVRBRikuIiAiQWN0aXggV2ViIiAiUnVudGltZSIKICAgICAgICAgICAgbndjZ2VvID0gY29udGFpbmVyICJud2NnZW8iICJHZW5lcmF0ZXMgcmVnaW9uYWwgbWV0ZW9yb2xvZ2ljYWwgcHJvZHVjdHMgZnJvbSBnZW9zdGF0aW9uYXJ5IHNhdGVsbGl0ZSBkYXRhLiIgIkFuc2libGUtbWFuYWdlZCBOV0MvR0VPIiAiUnVudGltZSIKICAgICAgICAgICAgbndjZ2VvX2F1eCA9IGNvbnRhaW5lciAibndjZ2VvX2F1eCIgIkRvd25sb2FkcyBhbmQgcHJlcGFyZXMgYXV4aWxpYXJ5IGlucHV0cyBmb3IgTldDL0dFTy4iICJBbnNpYmxlLW1hbmFnZWQgUHl0aG9uLCBBaXJmbG93LWVyYSB0b29saW5nIiAiUnVudGltZSIKICAgICAgICAgICAgbndwcHJvY2Vzc29yID0gY29udGFpbmVyICJud3Bwcm9jZXNzb3IiICJQcm9jZXNzZXMgTldQIGRhdGFzZXRzIGFuZCBwdWJsaXNoZXMgb3V0cHV0cyBmb3IgZG93bnN0cmVhbSBzZXJ2aWNlcy4iICJQeXRob24sIEFyZ28gV29ya2Zsb3dzIiAiUnVudGltZSIKICAgICAgICAgICAgbndjcHJvY2Vzc29yID0gY29udGFpbmVyICJud2Nwcm9jZXNzb3IiICJQcm9jZXNzZXMgbm93Y2FzdCBkYXRhc2V0cyBhbmQgcHVibGlzaGVzIG91dHB1dHMgZm9yIGRvd25zdHJlYW0gc2VydmljZXMuIiAiUHl0aG9uLCBBcmdvIFdvcmtmbG93cyIgIlJ1bnRpbWUiCiAgICAgICAgICAgIHd4cHJvY2Vzc29yX2F1eCA9IGNvbnRhaW5lciAid3hwcm9jZXNzb3JfYXV4IiAiUnVucyB0aGUgYXV4aWxpYXJ5IHd4cHJvY2Vzc29yIGRlcGxveW1lbnRzIHdpdGggcmVnaW9uPWF1eC4iICJQeXRob24sIEFpcmZsb3ciICJSdW50aW1lIiB7CiAgICAgICAgICAgICAgICBkb3dubG9hZF9nZnMgPSBjb21wb25lbnQgImRvd25sb2FkX2dmcyIgIkRvd25sb2FkcyBHRlMgc291cmNlIGZpbGVzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgcHJlcGFyZV9nZnMgPSBjb21wb25lbnQgInByZXBhcmVfZ2ZzIiAiUHJlcGFyZXMgZG93bmxvYWRlZCBHRlMgc291cmNlIGZpbGVzIGZvciBkb3duc3RyZWFtIHByb2Nlc3NpbmcuIiAiQWlyZmxvdyBEQUciCiAgICAgICAgICAgICAgICBkb3dubG9hZF9ndGcgPSBjb21wb25lbnQgImRvd25sb2FkX2d0ZyIgIkRvd25sb2FkcyBHVEcgdHVyYnVsZW5jZSBzb3VyY2UgZmlsZXMuIiAiQWlyZmxvdyBEQUciCiAgICAgICAgICAgICAgICBkb3dubG9hZF9pY29uX2V1ID0gY29tcG9uZW50ICJkb3dubG9hZF9pY29uX2V1IiAiRG93bmxvYWRzIElDT04tRVUgc291cmNlIGZpbGVzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgZG93bmxvYWRfbWV0YXIgPSBjb21wb25lbnQgImRvd25sb2FkX21ldGFyIiAiRG93bmxvYWRzIGFuZCBzdG9yZXMgTUVUQVIgb2JzZXJ2YXRpb25zLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgZG93bmxvYWRfbndjZ2VvID0gY29tcG9uZW50ICJkb3dubG9hZF9ud2NnZW8iICJEb3dubG9hZHMgYW5kIHByZXBhcmVzIE5XQy9HRU8gc291cmNlIGZpbGVzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgZG93bmxvYWRfc3lub3AgPSBjb21wb25lbnQgImRvd25sb2FkX3N5bm9wIiAiRG93bmxvYWRzIGFuZCBzdG9yZXMgU1lOT1Agb2JzZXJ2YXRpb25zLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgZG93bmxvYWRfdGFmID0gY29tcG9uZW50ICJkb3dubG9hZF90YWYiICJEb3dubG9hZHMgYW5kIHN0b3JlcyBUQUYgZm9yZWNhc3RzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgbWFpbnRlbmFuY2UgPSBjb21wb25lbnQgIm1haW50ZW5hbmNlIiAiUGVyZm9ybXMgcmVjdXJyaW5nIGNsZWFudXAgYW5kIG1haW50ZW5hbmNlIHdvcmsuIiAiQWlyZmxvdyBEQUciCgogICAgICAgICAgICAgICAgcHJlcGFyZV9nZnMgLT4gZG93bmxvYWRfZ2ZzICJHZXRzIHNvdXJjZSBkYXRhIGZyb20iCiAgICAgICAgICAgIH0KICAgICAgICAgICAgd3hwcm9jZXNzb3JfZ2xiID0gY29udGFpbmVyICJ3eHByb2Nlc3Nvcl9nbGIiICJSdW5zIHRoZSBnbG9iYWwgd3hwcm9jZXNzb3IgZGVwbG95bWVudHMgd2l0aCByZWdpb249Z2xiLiIgIlB5dGhvbiwgQWlyZmxvdyIgIlJ1bnRpbWUiIHsKICAgICAgICAgICAgICAgIGFpcnBvcnRzID0gY29tcG9uZW50ICJhaXJwb3J0cyIgIkJ1aWxkcyBhaXJwb3J0LWZvY3VzZWQgcHJvZHVjdHMgYW5kIGxheWVycyBmb3IgdGhlIGdsb2JhbCBkZXBsb3ltZW50LiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgYWlyX3ByZXNzdXJlX3FuaF9nbGIgPSBjb21wb25lbnQgImFpcl9wcmVzc3VyZV9xbmhfZ2xiIiAiQnVpbGRzIGdsb2JhbCBRTkggcHJlc3N1cmUgcHJvZHVjdHMuIiAiQWlyZmxvdyBEQUciCiAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZV8ybV9hZ2xfZ2xiID0gY29tcG9uZW50ICJ0ZW1wZXJhdHVyZV8ybV9hZ2xfZ2xiIiAiQnVpbGRzIGdsb2JhbCB0ZW1wZXJhdHVyZSBhbmQgZGV3IHBvaW50IHByb2R1Y3RzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgdmlzaWJpbGl0eV9nbGIgPSBjb21wb25lbnQgInZpc2liaWxpdHlfZ2xiIiAiQnVpbGRzIGdsb2JhbCB2aXNpYmlsaXR5IHByb2R1Y3RzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgY2xvdWRzID0gY29tcG9uZW50ICJjbG91ZHMiICJCdWlsZHMgZ2xvYmFsIGNsb3VkIGNvdmVyIGFuZCBjbG91ZCBjZWlsaW5nIHByb2R1Y3RzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgd2luZCA9IGNvbXBvbmVudCAid2luZCIgIkJ1aWxkcyBnbG9iYWwgd2luZCBhbmQgd2luZCBndXN0IHByb2R1Y3RzLiIgIkFpcmZsb3cgREFHIgoKICAgICAgICAgICAgICAgIGFpcnBvcnRzIC0+IGFpcl9wcmVzc3VyZV9xbmhfZ2xiICJHZXRzIGRhdGEgZnJvbSIKICAgICAgICAgICAgICAgIGFpcnBvcnRzIC0+IHRlbXBlcmF0dXJlXzJtX2FnbF9nbGIgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICAgICAgYWlycG9ydHMgLT4gdmlzaWJpbGl0eV9nbGIgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICAgICAgYWlycG9ydHMgLT4gY2xvdWRzICJHZXRzIGRhdGEgZnJvbSIKICAgICAgICAgICAgICAgIGFpcnBvcnRzIC0+IHdpbmQgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICB9CiAgICAgICAgICAgIHd4cHJvY2Vzc29yID0gY29udGFpbmVyICJ3eHByb2Nlc3NvciIgIlJ1bnMgdGhlIHJlZ2lvbmFsIHd4cHJvY2Vzc29yIGRlcGxveW1lbnRzIGZvciBub24tYXV4LCBub24tZ2xiIHJlZ2lvbnMuIiAiUHl0aG9uLCBBaXJmbG93IiAiUnVudGltZSIgewogICAgICAgICAgICAgICAgYWlycG9ydHMgPSBjb21wb25lbnQgImFpcnBvcnRzIiAiQnVpbGRzIGFpcnBvcnQtZm9jdXNlZCBwcm9kdWN0cyBhbmQgbGF5ZXJzIGZvciByZWdpb25hbCBkZXBsb3ltZW50cy4iICJBaXJmbG93IERBRyIKICAgICAgICAgICAgICAgIGNsb3VkID0gY29tcG9uZW50ICJjbG91ZCIgIkJ1aWxkcyBjbG91ZCBjZWlsaW5nLCBjbG91ZCB0b3AsIGFuZCByZWxhdGVkIHJlZ2lvbmFsIGNsb3VkIHByb2R1Y3RzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgbm93Y2FzdCA9IGNvbXBvbmVudCAibm93Y2FzdCIgIlByb2Nlc3NlcyBOV0MvR0VPIG5vd2Nhc3QgcHJvZHVjdHMuIiAiQWlyZmxvdyBEQUciCiAgICAgICAgICAgICAgICBud3BfY2xvdWQgPSBjb21wb25lbnQgIm53cF9jbG91ZCIgIkJ1aWxkcyByZWdpb25hbCBOV1AgY2xvdWQgcHJvZHVjdHMgZnJvbSBHRlMgYW5kIElDT04tRVUgaW5wdXRzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgcHJvY2Vzc19nZnMgPSBjb21wb25lbnQgInByb2Nlc3NfZ2ZzIiAiUHJvY2Vzc2VzIHByZXBhcmVkIEdGUyBpbnB1dHMgaW50byByZWdpb25hbCBOV1AgcHJvZHVjdHMuIiAiQWlyZmxvdyBEQUciCiAgICAgICAgICAgICAgICBwcm9jZXNzX2d0ZyA9IGNvbXBvbmVudCAicHJvY2Vzc19ndGciICJQcm9jZXNzZXMgR1RHIHR1cmJ1bGVuY2UgaW5wdXRzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgcHJvY2Vzc19pY29uX2V1ID0gY29tcG9uZW50ICJwcm9jZXNzX2ljb25fZXUiICJQcm9jZXNzZXMgSUNPTi1FVSBpbnB1dHMgZm9yIHJlZ2lvbmFsIHByb2R1Y3RzLiIgIkFpcmZsb3cgREFHIgogICAgICAgICAgICAgICAgcmR0ID0gY29tcG9uZW50ICJyZHQiICJQcm9jZXNzZXMgTldDL0dFTyB0aHVuZGVyc3Rvcm0gcHJvZHVjdHMuIiAiQWlyZmxvdyBEQUciCiAgICAgICAgICAgICAgICBhaXJfcHJlc3N1cmVfcW5oID0gY29tcG9uZW50ICJhaXJfcHJlc3N1cmVfcW5oIiAiQnVpbGRzIHJlZ2lvbmFsIFFOSCBwcmVzc3VyZSBwcm9kdWN0cy4iICJBaXJmbG93IERBRyIKICAgICAgICAgICAgICAgIGFpcl90ZW1wZXJhdHVyZV8ybV9hZ2wgPSBjb21wb25lbnQgImFpcl90ZW1wZXJhdHVyZV8ybV9hZ2wiICJCdWlsZHMgcmVnaW9uYWwgdGVtcGVyYXR1cmUgYW5kIGRldyBwb2ludCBwcm9kdWN0cy4iICJBaXJmbG93IERBRyIKICAgICAgICAgICAgICAgIHN1cmZhY2VfdmlzaWJpbGl0eSA9IGNvbXBvbmVudCAic3VyZmFjZV92aXNpYmlsaXR5IiAiQnVpbGRzIHJlZ2lvbmFsIHN1cmZhY2UgdmlzaWJpbGl0eSBwcm9kdWN0cy4iICJBaXJmbG93IERBRyIKICAgICAgICAgICAgICAgIHdpbmRfYWdsID0gY29tcG9uZW50ICJ3aW5kX2FnbCIgIkJ1aWxkcyByZWdpb25hbCB3aW5kIGFuZCB3aW5kIGd1c3QgcHJvZHVjdHMuIiAiQWlyZmxvdyBEQUciCgogICAgICAgICAgICAgICAgYWlycG9ydHMgLT4gYWlyX3ByZXNzdXJlX3FuaCAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgICAgICBhaXJwb3J0cyAtPiBhaXJfdGVtcGVyYXR1cmVfMm1fYWdsICJHZXRzIGRhdGEgZnJvbSIKICAgICAgICAgICAgICAgIGFpcnBvcnRzIC0+IGNsb3VkICJHZXRzIGRhdGEgZnJvbSIKICAgICAgICAgICAgICAgIGFpcnBvcnRzIC0+IG5vd2Nhc3QgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICAgICAgYWlycG9ydHMgLT4gbndwX2Nsb3VkICJHZXRzIGRhdGEgZnJvbSIKICAgICAgICAgICAgICAgIGFpcnBvcnRzIC0+IHN1cmZhY2VfdmlzaWJpbGl0eSAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgICAgICBhaXJwb3J0cyAtPiB3aW5kX2FnbCAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgICAgICBjbG91ZCAtPiBud3BfY2xvdWQgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICAgICAgbm93Y2FzdCAtPiBwcm9jZXNzX2dmcyAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgICAgICBud3BfY2xvdWQgLT4gcHJvY2Vzc19nZnMgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICAgICAgbndwX2Nsb3VkIC0+IHByb2Nlc3NfaWNvbl9ldSAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgICAgICByZHQgLT4gcHJvY2Vzc19nZnMgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICB9CiAgICAgICAgICAgIHd4ZGIgPSBjb250YWluZXIgInd4ZGIiICJTdG9yZXMgd2VhdGhlci1wcm9jZXNzaW5nIG1ldGFkYXRhIHVzZWQgYnkgd3hwcm9jZXNzb3IgZGVwbG95bWVudHMuIiAiUG9zdGdyZVNRTCIgIkRhdGFiYXNlLERhdGFTdG9yZSIKICAgICAgICAgICAgYXJnb3dvcmtmbG93cyA9IGNvbnRhaW5lciAiYXJnb3dvcmtmbG93cyIgIlByb3ZpZGVzIGFydGlmYWN0IHJlcG9zaXRvcnkgYW5kIHdvcmtmbG93IGluZnJhc3RydWN0dXJlIHVzZWQgYnkgdGhlIHByb2Nlc3NvciBjaGFydHMuIiAiQXJnbyBXb3JrZmxvd3MiICJJbmZyYXN0cnVjdHVyZSxPcmNoZXN0cmF0aW9uIgoKICAgICAgICAgICAgYXBpU3lzdGVtLmFwaWdhdGV3YXkgLT4gYWlyc2VydmVyICJSb3V0ZXMgd2VhdGhlciBBUEkgcmVxdWVzdHMgdG8iICJIVFRQIgogICAgICAgICAgICBhcGlTeXN0ZW0uYXBpZ2F0ZXdheSAtPiBud2NnZW8gIkV4cG9zZXMgZXhwb3J0ZWQgTldDL0dFTyBwcm9kdWN0cyBmcm9tIiAiSFRUUCwgZmlsZXMiCiAgICAgICAgICAgIGFpcnNlcnZlciAtPiB3eHByb2Nlc3Nvcl9nbGIgIkdldHMgZGF0YSBmcm9tIiAidmlhIGFwaWdhdGV3YXkiCiAgICAgICAgICAgIGFpcnNlcnZlciAtPiB3eHByb2Nlc3NvciAiR2V0cyBkYXRhIGZyb20iICJ2aWEgYXBpZ2F0ZXdheSIKICAgICAgICAgICAgbndjZ2VvIC0+IG53Y2dlb19hdXggIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICBud3Bwcm9jZXNzb3IgLT4gYWlyc2VydmVyICJQdWJsaXNoZXMgZGF0YXNldHMgdG8iCiAgICAgICAgICAgIG53Y3Byb2Nlc3NvciAtPiBhaXJzZXJ2ZXIgIlB1Ymxpc2hlcyBkYXRhc2V0cyB0byIKICAgICAgICAgICAgbndjcHJvY2Vzc29yIC0+IG53cHByb2Nlc3NvciAiUmVhZHMgTldQIGRhdGFzZXRzIGZyb20iICJTMyIKICAgICAgICAgICAgd3hwcm9jZXNzb3JfZ2xiIC0+IHd4cHJvY2Vzc29yX2F1eCAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgIHd4cHJvY2Vzc29yIC0+IHd4cHJvY2Vzc29yX2F1eCAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgIHd4cHJvY2Vzc29yIC0+IG53Y2dlbyAiR2V0cyBkYXRhIGZyb20iICJ2aWEgYXBpZ2F0ZXdheTsgbmV0Q0RGIgogICAgICAgICAgICB3eHByb2Nlc3Nvcl9hdXggLT4gd3hkYiAiUmVhZHMgYW5kIHdyaXRlcyBtZXRhZGF0YSBpbiIgIlBvc3RncmVTUUwiCiAgICAgICAgICAgIHd4cHJvY2Vzc29yX2dsYiAtPiB3eGRiICJSZWFkcyBhbmQgd3JpdGVzIG1ldGFkYXRhIGluIiAiUG9zdGdyZVNRTCIKICAgICAgICAgICAgd3hwcm9jZXNzb3IgLT4gd3hkYiAiUmVhZHMgYW5kIHdyaXRlcyBtZXRhZGF0YSBpbiIgIlBvc3RncmVTUUwiCiAgICAgICAgICAgIGFyZ293b3JrZmxvd3MgLT4gbndwcHJvY2Vzc29yICJSdW5zIHNjaGVkdWxlZCB3b3JrZmxvd3MgZm9yIgogICAgICAgICAgICBhcmdvd29ya2Zsb3dzIC0+IG53Y3Byb2Nlc3NvciAiUnVucyBzY2hlZHVsZWQgd29ya2Zsb3dzIGZvciIKICAgICAgICAgICAgbndwcHJvY2Vzc29yIC0+IHdlYXRoZXJEYXRhUHJvdmlkZXJzICJEb3dubG9hZHMgZm9yZWNhc3Qgc291cmNlIGRhdGFzZXRzIGZyb20iCiAgICAgICAgICAgIHd4cHJvY2Vzc29yX2F1eCAtPiB3ZWF0aGVyRGF0YVByb3ZpZGVycyAiRG93bmxvYWRzIE5XUCBhbmQgb2JzZXJ2YXRpb24gc291cmNlIGRhdGFzZXRzIGZyb20iCiAgICAgICAgICAgIG53Y2dlb19hdXggLT4gd2VhdGhlckRhdGFQcm92aWRlcnMgIkRvd25sb2FkcyBhdXhpbGlhcnkgd2VhdGhlciBpbnB1dHMgZnJvbSIKICAgICAgICAgICAgbndjZ2VvIC0+IHdlYXRoZXJEYXRhUHJvdmlkZXJzICJQcm9jZXNzZXMgc2F0ZWxsaXRlLWRlcml2ZWQgc291cmNlIGlucHV0cyBmcm9tIgoKICAgICAgICAgICAgd3hwcm9jZXNzb3JfZ2xiLmFpcl9wcmVzc3VyZV9xbmhfZ2xiIC0+IHd4cHJvY2Vzc29yX2F1eC5wcmVwYXJlX2dmcyAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgIHd4cHJvY2Vzc29yX2dsYi50ZW1wZXJhdHVyZV8ybV9hZ2xfZ2xiIC0+IHd4cHJvY2Vzc29yX2F1eC5wcmVwYXJlX2dmcyAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgIHd4cHJvY2Vzc29yX2dsYi52aXNpYmlsaXR5X2dsYiAtPiB3eHByb2Nlc3Nvcl9hdXgucHJlcGFyZV9nZnMgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICB3eHByb2Nlc3Nvcl9nbGIuY2xvdWRzIC0+IHd4cHJvY2Vzc29yX2F1eC5wcmVwYXJlX2dmcyAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgIHd4cHJvY2Vzc29yX2dsYi53aW5kIC0+IHd4cHJvY2Vzc29yX2F1eC5wcmVwYXJlX2dmcyAiR2V0cyBkYXRhIGZyb20iCiAgICAgICAgICAgIHd4cHJvY2Vzc29yX2dsYi5haXJwb3J0cyAtPiB3eHByb2Nlc3Nvcl9hdXguZG93bmxvYWRfbWV0YXIgIkdldHMgb2JzZXJ2YXRpb24gZGF0YSBmcm9tIgogICAgICAgICAgICB3eHByb2Nlc3Nvcl9nbGIuYWlycG9ydHMgLT4gd3hwcm9jZXNzb3JfYXV4LmRvd25sb2FkX3RhZiAiR2V0cyBmb3JlY2FzdCBkYXRhIGZyb20iCgogICAgICAgICAgICB3eHByb2Nlc3Nvci5wcm9jZXNzX2ljb25fZXUgLT4gd3hwcm9jZXNzb3JfYXV4LmRvd25sb2FkX2ljb25fZXUgIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICB3eHByb2Nlc3Nvci5wcm9jZXNzX2d0ZyAtPiB3eHByb2Nlc3Nvcl9hdXguZG93bmxvYWRfZ3RnICJHZXRzIGRhdGEgZnJvbSIKICAgICAgICAgICAgd3hwcm9jZXNzb3Iubm93Y2FzdCAtPiB3eHByb2Nlc3Nvcl9hdXguZG93bmxvYWRfbndjZ2VvICJHZXRzIGRhdGEgZnJvbSIKICAgICAgICAgICAgd3hwcm9jZXNzb3IucmR0IC0+IHd4cHJvY2Vzc29yX2F1eC5kb3dubG9hZF9ud2NnZW8gIkdldHMgZGF0YSBmcm9tIgogICAgICAgICAgICB3eHByb2Nlc3Nvci5haXJwb3J0cyAtPiB3eHByb2Nlc3Nvcl9hdXguZG93bmxvYWRfbWV0YXIgIkdldHMgb2JzZXJ2YXRpb24gZGF0YSBmcm9tIgogICAgICAgICAgICB3eHByb2Nlc3Nvci5haXJwb3J0cyAtPiB3eHByb2Nlc3Nvcl9hdXguZG93bmxvYWRfdGFmICJHZXRzIGZvcmVjYXN0IGRhdGEgZnJvbSIKICAgICAgICAgICAgd3hwcm9jZXNzb3IuYWlyX3ByZXNzdXJlX3FuaCAtPiB3eHByb2Nlc3Nvcl9hdXguZG93bmxvYWRfbWV0YXIgIkdldHMgb2JzZXJ2YXRpb24gZGF0YSBmcm9tIgogICAgICAgICAgICB3eHByb2Nlc3Nvci5haXJfdGVtcGVyYXR1cmVfMm1fYWdsIC0+IHd4cHJvY2Vzc29yX2F1eC5kb3dubG9hZF9tZXRhciAiR2V0cyBvYnNlcnZhdGlvbiBkYXRhIGZyb20iCiAgICAgICAgICAgIHd4cHJvY2Vzc29yLnN1cmZhY2VfdmlzaWJpbGl0eSAtPiB3eHByb2Nlc3Nvcl9hdXguZG93bmxvYWRfbWV0YXIgIkdldHMgb2JzZXJ2YXRpb24gZGF0YSBmcm9tIgogICAgICAgICAgICB3eHByb2Nlc3Nvci53aW5kX2FnbCAtPiB3eHByb2Nlc3Nvcl9hdXguZG93bmxvYWRfbWV0YXIgIkdldHMgb2JzZXJ2YXRpb24gZGF0YSBmcm9tIgogICAgICAgIH0KCiAgICAgICAgYXJjaGl2ZVN5c3RlbSA9IHNvZnR3YXJlU3lzdGVtICJBcmNoaXZlIFN5c3RlbSIgIkFyY2hpdmVzIHdlYXRoZXIgZGF0YS4iIHsKICAgICAgICAgICAgbWluaW8gPSBjb250YWluZXIgIm1pbmlvIiAiU2hvcnQtdGVybSBhbmQgbG9uZy10ZXJtIG9iamVjdCBzdG9yYWdlIGFyY2hpdmUuIiAiTWluSU8iICJGaWxlU3lzdGVtLERhdGFTdG9yZSIKICAgICAgICB9CgogICAgICAgIHVzZXIgLT4gYXBpU3lzdGVtLmFwaWdhdGV3YXkgIlNlbmRzIHJlcXVlc3RzIHRvIiAiSFRUUFMiCiAgICAgICAgd2VhdGhlclN5c3RlbS5ud3Bwcm9jZXNzb3IgLT4gYXJjaGl2ZVN5c3RlbS5taW5pbyAiU3RvcmVzIGRhdGFzZXRzIGluIiAiUzMiCiAgICAgICAgd2VhdGhlclN5c3RlbS5ud2Nwcm9jZXNzb3IgLT4gYXJjaGl2ZVN5c3RlbS5taW5pbyAiU3RvcmVzIGRhdGFzZXRzIGluIiAiUzMiCgogICAgICAgIGxvZ1N5c3RlbSA9IHNvZnR3YXJlU3lzdGVtICJMb2cgU3lzdGVtIiAiQ29sbGVjdHMsIHRyYW5zZm9ybXMgYW5kIHN0b3JlcyBsb2dzLiIgewogICAgICAgICAgICBlbGFzdGljID0gY29udGFpbmVyICJlbGFzdGljIiAiVHJhbnNmb3JtcyBsb2dzIHZpYSBpbmdlc3Rpb24gcGlwZWxpbmVzIGFuZCBzdG9yZXMgdGhlbS4iICJFbGFzdGljc2VhcmNoIiAiSW5mcmFzdHJ1Y3R1cmUsRGF0YWJhc2UiCiAgICAgICAgICAgIGtpYmFuYSA9IGNvbnRhaW5lciAia2liYW5hIiAiQWxsb3dzIGxvZ3MgYW5hbHlzaXMgYW5kIGFkdmFuY2VkIHZpc3VhbGl6YXRpb24uIiAiS2liYW5hIiAiSW5mcmFzdHJ1Y3R1cmUiCiAgICAgICAgICAgIAogICAgICAgICAgICBraWJhbmEgLT4gZWxhc3RpYyAiR2V0cyBsb2dzIGZyb20iCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGFwaVN5c3RlbS5hcGlnYXRld2F5IC0+IGxvZ1N5c3RlbS5lbGFzdGljICJTZW5kcyBsb2dzIHRvIiAiRmlsZWJlYXQiCgogICAgICAgIG1vbml0b3JpbmdTeXN0ZW0gPSBzb2Z0d2FyZVN5c3RlbSAiTW9uaXRvcmluZyBTeXN0ZW0iICJNb25pdG9ycyB0aGUgaW5mcmFzdHJ1Y3R1cmUuIiB7CiAgICAgICAgICAgIGFsZXJ0bWFuYWdlciA9IGNvbnRhaW5lciAiYWxlcnRtYW5hZ2VyIiAiSGFuZGxlcyBhbGVydHMgc2VudCBieSBvdGhlciBhcHBsaWNhdGlvbnMuIiAiQWxlcnRtYW5hZ2VyIiAiSW5mcmFzdHJ1Y3R1cmUiCiAgICAgICAgICAgIGxvZ3NoaXBwZXIgPSBjb250YWluZXIgImxvZ3NoaXBwZXIiICJDb2xsZWN0cyBsb2dzIGFuZCBpcyB0aGUgY3VycmVudCBiZXN0IG1hdGNoIGZvciB0aGUgaGlzdG9yaWNhbCBBUEkgZXhwb3J0ZXIgcm9sZS4iICJIZWxtIGRlcGxveW1lbnQiICJJbmZyYXN0cnVjdHVyZSIKICAgICAgICAgICAgcHJvbWV0aGV1cyA9IGNvbnRhaW5lciAicHJvbWV0aGV1cyIgIkNvbGxlY3RzIGFuZCBtb25pdG9ycyB2YXJpb3VzIG1ldHJpY3MgaW4gcmVhbC10aW1lLiIgIlByb21ldGhldXMiICJJbmZyYXN0cnVjdHVyZSIKICAgICAgICAgICAgdmljdG9yaWFtZXRyaWNzID0gY29udGFpbmVyICJ2aWN0b3JpYW1ldHJpY3MiICJMb25nLXRlcm0gbWV0cmljcyBzdG9yYWdlLiIgIlZpY3RvcmlhTWV0cmljcyIgIkRhdGFiYXNlLERhdGFTdG9yZSIKICAgICAgICAgICAgZ3JhZmFuYSA9IGNvbnRhaW5lciAiZ3JhZmFuYSIgIkFsbG93cyBtZXRyaWNzIHZpc3VhbGl6YXRpb24uIiAiR3JhZmFuYSIgIkluZnJhc3RydWN0dXJlIgogICAgICAgICAgICBub2RlZXhwb3J0ZXIgPSBjb250YWluZXIgIm5vZGVleHBvcnRlciIgIlByb3ZpZGVzIGhhcmR3YXJlIGFuZCBPUyBtZXRyaWNzIG9uIGVhY2ggbm9kZS4iICJwcm9tZXRoZXVzLW5vZGUtZXhwb3J0ZXIiICJJbmZyYXN0cnVjdHVyZSIKCiAgICAgICAgICAgIGFsZXJ0bWFuYWdlciAtPiBkZXZvcHNTdGFmZiAiU2VuZHMgYWxlcnRzIHRvIgogICAgICAgICAgICBncmFmYW5hIC0+IHByb21ldGhldXMgIkdldHMgbWV0cmljcyBmcm9tIgogICAgICAgICAgICBwcm9tZXRoZXVzIC0+IGFsZXJ0bWFuYWdlciAiU2VuZHMgYWxlcnRzIHRvIgogICAgICAgICAgICBwcm9tZXRoZXVzIC0+IGxvZ3NoaXBwZXIgIkdldHMgbWV0cmljcyBmcm9tIgogICAgICAgICAgICBwcm9tZXRoZXVzIC0+IHZpY3RvcmlhbWV0cmljcyAiU3RvcmVzIG1ldHJpY3MgdG8iCiAgICAgICAgICAgIHByb21ldGhldXMgLT4gbm9kZWV4cG9ydGVyICJHZXRzIG1ldHJpY3MgZnJvbSIKICAgICAgICB9CgogICAgICAgIG1vbml0b3JpbmdTeXN0ZW0ubG9nc2hpcHBlciAtPiB3ZWF0aGVyU3lzdGVtLmFpcnNlcnZlciAiQ2hlY2tzIEFQSSBzdGF0dXMiICJ2aWEgYXBpZ2F0ZXdheSIKCiAgICAgICAgZGVwbG95bWVudEVudmlyb25tZW50ICJQcmltYXJ5IiB7CiAgICAgICAgICAgIHByaW1hcnlDbHVzdGVyR3JvdXAgPSBkZXBsb3ltZW50R3JvdXAgInByaW1hcnkiCiAgICAgICAgICAgIHByaW1hcnkxR3JvdXAgPSBkZXBsb3ltZW50R3JvdXAgInByaW1hcnkxIgogICAgICAgICAgICBwcmltYXJ5Mkdyb3VwID0gZGVwbG95bWVudEdyb3VwICJwcmltYXJ5MiIKICAgICAgICAgICAgcHJpbWFyeTNHcm91cCA9IGRlcGxveW1lbnRHcm91cCAicHJpbWFyeTMiCiAgICAgICAgICAgIHByaW1hcnk0R3JvdXAgPSBkZXBsb3ltZW50R3JvdXAgInByaW1hcnk0IgogICAgICAgICAgICBwcmltYXJ5NUdyb3VwID0gZGVwbG95bWVudEdyb3VwICJwcmltYXJ5NSIKICAgICAgICAgICAgbndjZ2VvMUdyb3VwID0gZGVwbG95bWVudEdyb3VwICJud2NnZW8xIgoKICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgInByaW1hcnkiICIiICJIZXR6bmVyLCBrMHMiIHsKICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIHdlYXRoZXJTeXN0ZW0ubndwcHJvY2Vzc29yIHByaW1hcnlDbHVzdGVyR3JvdXAKICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIHdlYXRoZXJTeXN0ZW0ud3hkYiBwcmltYXJ5Q2x1c3Rlckdyb3VwCiAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSBhcGlTeXN0ZW0udGxzY29udHJvbGxlciBwcmltYXJ5Q2x1c3Rlckdyb3VwCiAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSBtb25pdG9yaW5nU3lzdGVtLmxvZ3NoaXBwZXIgcHJpbWFyeUNsdXN0ZXJHcm91cAoKICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJwcmltYXJ5MSIgIiIgIkFYMTAyLCBEZWJpYW4gMTIiIHsKICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiYXBpZ2F0ZXdheSIgIiIgIkt1YmVybmV0ZXMgRGFlbW9uU2V0IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIGFwaVN5c3RlbS5hcGlnYXRld2F5IHByaW1hcnkxR3JvdXAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgImFpcnNlcnZlciIgIiIgIkt1YmVybmV0ZXMgRGVwbG95bWVudCIgewogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSB3ZWF0aGVyU3lzdGVtLmFpcnNlcnZlciBwcmltYXJ5MUdyb3VwCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJub2RlZXhwb3J0ZXIiICIiICJTeXN0ZW0gcGFja2FnZSIgewogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSBtb25pdG9yaW5nU3lzdGVtLm5vZGVleHBvcnRlciBwcmltYXJ5MUdyb3VwCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJwcmltYXJ5MiIgIiIgIkFYMTAyLCBEZWJpYW4gMTIiIHsKICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiYXBpZ2F0ZXdheSIgIiIgIkt1YmVybmV0ZXMgRGFlbW9uU2V0IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIGFwaVN5c3RlbS5hcGlnYXRld2F5IHByaW1hcnkyR3JvdXAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgInd4cHJvY2Vzc29yLWF1eDIiICIiICJLdWJlcm5ldGVzIERlcGxveW1lbnQiIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2Ugd2VhdGhlclN5c3RlbS53eHByb2Nlc3Nvcl9hdXggcHJpbWFyeTJHcm91cAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAid3hwcm9jZXNzb3ItYWYxIiAiIiAiS3ViZXJuZXRlcyBEZXBsb3ltZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIHdlYXRoZXJTeXN0ZW0ud3hwcm9jZXNzb3IgcHJpbWFyeTJHcm91cAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAid3hwcm9jZXNzb3ItaW4xIiAiIiAiS3ViZXJuZXRlcyBEZXBsb3ltZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIHdlYXRoZXJTeXN0ZW0ud3hwcm9jZXNzb3IgcHJpbWFyeTJHcm91cAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAibm9kZWV4cG9ydGVyIiAiIiAiU3lzdGVtIHBhY2thZ2UiIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2UgbW9uaXRvcmluZ1N5c3RlbS5ub2RlZXhwb3J0ZXIgcHJpbWFyeTJHcm91cAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAicHJpbWFyeTMiICIiICJBWDEwMSwgRGViaWFuIDEyIiB7CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgImFwaWdhdGV3YXkiICIiICJLdWJlcm5ldGVzIERhZW1vblNldCIgewogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSBhcGlTeXN0ZW0uYXBpZ2F0ZXdheSBwcmltYXJ5M0dyb3VwCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJ3eHByb2Nlc3Nvci1hdXgzIiAiIiAiS3ViZXJuZXRlcyBEZXBsb3ltZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIHdlYXRoZXJTeXN0ZW0ud3hwcm9jZXNzb3JfYXV4IHByaW1hcnkzR3JvdXAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgInd4cHJvY2Vzc29yLWdsYiIgIiIgIkt1YmVybmV0ZXMgRGVwbG95bWVudCIgewogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSB3ZWF0aGVyU3lzdGVtLnd4cHJvY2Vzc29yX2dsYiBwcmltYXJ5M0dyb3VwCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJ3eHByb2Nlc3Nvci1zYTEiICIiICJLdWJlcm5ldGVzIERlcGxveW1lbnQiIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2Ugd2VhdGhlclN5c3RlbS53eHByb2Nlc3NvciBwcmltYXJ5M0dyb3VwCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJub2RlZXhwb3J0ZXIiICIiICJTeXN0ZW0gcGFja2FnZSIgewogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSBtb25pdG9yaW5nU3lzdGVtLm5vZGVleHBvcnRlciBwcmltYXJ5M0dyb3VwCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJwcmltYXJ5NCIgIiIgIkFYMTAyLCBEZWJpYW4gMTIiIHsKICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiYXBpZ2F0ZXdheSIgIiIgIkt1YmVybmV0ZXMgRGFlbW9uU2V0IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIGFwaVN5c3RlbS5hcGlnYXRld2F5IHByaW1hcnk0R3JvdXAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgInd4cHJvY2Vzc29yLWF1eDQiICIiICJLdWJlcm5ldGVzIERlcGxveW1lbnQiIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2Ugd2VhdGhlclN5c3RlbS53eHByb2Nlc3Nvcl9hdXggcHJpbWFyeTRHcm91cAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAid3hwcm9jZXNzb3ItZXUxIiAiIiAiS3ViZXJuZXRlcyBEZXBsb3ltZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIHdlYXRoZXJTeXN0ZW0ud3hwcm9jZXNzb3IgcHJpbWFyeTRHcm91cAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAid3hwcm9jZXNzb3Itb2MyIiAiIiAiS3ViZXJuZXRlcyBEZXBsb3ltZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIHdlYXRoZXJTeXN0ZW0ud3hwcm9jZXNzb3IgcHJpbWFyeTRHcm91cAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAibm9kZWV4cG9ydGVyIiAiIiAiU3lzdGVtIHBhY2thZ2UiIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2UgbW9uaXRvcmluZ1N5c3RlbS5ub2RlZXhwb3J0ZXIgcHJpbWFyeTRHcm91cAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAicHJpbWFyeTUiICIiICJBWDEwMiwgRGViaWFuIDEyIiB7CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgImFwaWdhdGV3YXkiICIiICJLdWJlcm5ldGVzIERhZW1vblNldCIgewogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSBhcGlTeXN0ZW0uYXBpZ2F0ZXdheSBwcmltYXJ5NUdyb3VwCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJ3eHByb2Nlc3Nvci1hdXgxIiAiIiAiS3ViZXJuZXRlcyBEZXBsb3ltZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIHdlYXRoZXJTeXN0ZW0ud3hwcm9jZXNzb3JfYXV4IHByaW1hcnk1R3JvdXAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgInd4cHJvY2Vzc29yLW5hMSIgIiIgIkt1YmVybmV0ZXMgRGVwbG95bWVudCIgewogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJJbnN0YW5jZSB3ZWF0aGVyU3lzdGVtLnd4cHJvY2Vzc29yIHByaW1hcnk1R3JvdXAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgIm5vZGVleHBvcnRlciIgIiIgIlN5c3RlbSBwYWNrYWdlIiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluc3RhbmNlIG1vbml0b3JpbmdTeXN0ZW0ubm9kZWV4cG9ydGVyIHByaW1hcnk1R3JvdXAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJud2NnZW8xIiAiIiAiU2luZ2xlLW5vZGUgY2x1c3RlciIgewogICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2Ugd2VhdGhlclN5c3RlbS5ud2NnZW9fYXV4IG53Y2dlbzFHcm91cAogICAgICAgICAgICAgICAgY29udGFpbmVySW5zdGFuY2Ugd2VhdGhlclN5c3RlbS5ud2NnZW8gbndjZ2VvMUdyb3VwCiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgfQoKICAgIHZpZXdzIHsKICAgICAgICBzeXN0ZW1sYW5kc2NhcGUgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b0xheW91dAogICAgICAgIH0KICAgICAgICAKICAgICAgICBzeXN0ZW1jb250ZXh0IGFwaVN5c3RlbSB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBhdXRvTGF5b3V0CiAgICAgICAgfQoKICAgICAgICBzeXN0ZW1jb250ZXh0IGFyY2hpdmVTeXN0ZW0gewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b0xheW91dAogICAgICAgIH0KCiAgICAgICAgc3lzdGVtY29udGV4dCBsb2dTeXN0ZW0gewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b0xheW91dAogICAgICAgIH0KCiAgICAgICAgc3lzdGVtY29udGV4dCBtb25pdG9yaW5nU3lzdGVtIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGF1dG9MYXlvdXQKICAgICAgICB9CgogICAgICAgIHN5c3RlbWNvbnRleHQgd2VhdGhlclN5c3RlbSB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBhdXRvTGF5b3V0CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGNvbnRhaW5lciBhcGlTeXN0ZW0gewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b0xheW91dAogICAgICAgIH0KCiAgICAgICAgY29udGFpbmVyIGFyY2hpdmVTeXN0ZW0gewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b0xheW91dAogICAgICAgIH0KCiAgICAgICAgY29udGFpbmVyIGxvZ1N5c3RlbSB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBhdXRvTGF5b3V0CiAgICAgICAgfQoKICAgICAgICBjb250YWluZXIgbW9uaXRvcmluZ1N5c3RlbSB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBhdXRvTGF5b3V0CiAgICAgICAgfQoKICAgICAgICBjb250YWluZXIgd2VhdGhlclN5c3RlbSB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBhdXRvTGF5b3V0CiAgICAgICAgfQoKICAgICAgICBjb21wb25lbnQgd2VhdGhlclN5c3RlbS53eHByb2Nlc3Nvcl9hdXggewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b0xheW91dAogICAgICAgIH0KCiAgICAgICAgY29tcG9uZW50IHdlYXRoZXJTeXN0ZW0ud3hwcm9jZXNzb3JfZ2xiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGF1dG9MYXlvdXQKICAgICAgICB9CgogICAgICAgIGNvbXBvbmVudCB3ZWF0aGVyU3lzdGVtLnd4cHJvY2Vzc29yIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGF1dG9MYXlvdXQKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVwbG95bWVudCAqICJQcmltYXJ5IiB7CiAgICAgICAgICAgIHRpdGxlICJQcmltYXJ5IGRlcGxveW1lbnQgdG9wb2xvZ3kiCgogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b0xheW91dCB0YgogICAgICAgIH0KICAgICAgICAKICAgICAgICBkeW5hbWljIGFwaVN5c3RlbSAicmVxdWVzdEZsb3ciIHsKICAgICAgICAgICAgdGl0bGUgIkN1c3RvbWVyIEFQSSByZXF1ZXN0IGZsb3ciCgogICAgICAgICAgICB1c2VyIC0+IGFwaVN5c3RlbS5hcGlnYXRld2F5ICJSZXF1ZXN0cyB3ZWF0aGVyIGRhdGEgZnJvbSIgIkhUVFBTIgogICAgICAgICAgICBhcGlTeXN0ZW0uYXBpZ2F0ZXdheSAtPiB3ZWF0aGVyU3lzdGVtLmFpcnNlcnZlciAiUm91dGVzIEFQSSByZXF1ZXN0IHRvIiAiSFRUUCIKCiAgICAgICAgICAgIGF1dG9MYXlvdXQKICAgICAgICB9CgogICAgICAgIGR5bmFtaWMgd2VhdGhlclN5c3RlbSAicHJvY2Vzc2luZ0Zsb3ciIHsKICAgICAgICAgICAgdGl0bGUgIkZvcmVjYXN0IGFuZCBub3djYXN0IHB1YmxpY2F0aW9uIGZsb3ciCgogICAgICAgICAgICB3ZWF0aGVyRGF0YVByb3ZpZGVycyAtPiB3ZWF0aGVyU3lzdGVtLm53cHByb2Nlc3NvciAiUHJvdmlkZXMgZm9yZWNhc3Qgc291cmNlIGRhdGFzZXRzIHRvIgogICAgICAgICAgICB3ZWF0aGVyU3lzdGVtLmFyZ293b3JrZmxvd3MgLT4gd2VhdGhlclN5c3RlbS5ud3Bwcm9jZXNzb3IgIlN0YXJ0cyBzY2hlZHVsZWQgd29ya2Zsb3cgZm9yIgogICAgICAgICAgICB3ZWF0aGVyU3lzdGVtLm53cHByb2Nlc3NvciAtPiBhcmNoaXZlU3lzdGVtLm1pbmlvICJTdG9yZXMgcHJvY2Vzc2VkIGZvcmVjYXN0IGRhdGFzZXRzIGluIiAiUzMiCiAgICAgICAgICAgIHdlYXRoZXJTeXN0ZW0ubndwcHJvY2Vzc29yIC0+IHdlYXRoZXJTeXN0ZW0uYWlyc2VydmVyICJQdWJsaXNoZXMgZm9yZWNhc3QgZGF0YXNldHMgdG8iCiAgICAgICAgICAgIHdlYXRoZXJTeXN0ZW0ubndjcHJvY2Vzc29yIC0+IHdlYXRoZXJTeXN0ZW0ubndwcHJvY2Vzc29yICJSZWFkcyBmb3JlY2FzdCBkYXRhc2V0cyBmcm9tIiAiUzMiCiAgICAgICAgICAgIHdlYXRoZXJTeXN0ZW0uYXJnb3dvcmtmbG93cyAtPiB3ZWF0aGVyU3lzdGVtLm53Y3Byb2Nlc3NvciAiU3RhcnRzIHNjaGVkdWxlZCB3b3JrZmxvdyBmb3IiCiAgICAgICAgICAgIHdlYXRoZXJTeXN0ZW0ubndjcHJvY2Vzc29yIC0+IGFyY2hpdmVTeXN0ZW0ubWluaW8gIlN0b3JlcyBwcm9jZXNzZWQgbm93Y2FzdCBkYXRhc2V0cyBpbiIgIlMzIgogICAgICAgICAgICB3ZWF0aGVyU3lzdGVtLm53Y3Byb2Nlc3NvciAtPiB3ZWF0aGVyU3lzdGVtLmFpcnNlcnZlciAiUHVibGlzaGVzIG5vd2Nhc3QgZGF0YXNldHMgdG8iCiAgICAgICAgICAgIHdlYXRoZXJEYXRhUHJvdmlkZXJzIC0+IHdlYXRoZXJTeXN0ZW0ud3hwcm9jZXNzb3JfYXV4ICJQcm92aWRlcyBOV1AgYW5kIG9ic2VydmF0aW9uIGlucHV0cyB0byIKICAgICAgICAgICAgd2VhdGhlclN5c3RlbS53eHByb2Nlc3Nvcl9hdXggLT4gd2VhdGhlclN5c3RlbS53eHByb2Nlc3NvciAiUHJvdmlkZXMgcHJlcGFyZWQgcmVnaW9uYWwgaW5wdXRzIHRvIgogICAgICAgICAgICB3ZWF0aGVyU3lzdGVtLnd4cHJvY2Vzc29yIC0+IHdlYXRoZXJTeXN0ZW0ud3hkYiAiU3RvcmVzIHByb2Nlc3NpbmcgbWV0YWRhdGEgaW4iICJQb3N0Z3JlU1FMIgogICAgICAgICAgICB3ZWF0aGVyU3lzdGVtLmFpcnNlcnZlciAtPiB3ZWF0aGVyU3lzdGVtLnd4cHJvY2Vzc29yICJSZWFkcyByZWdpb25hbCBwcm9kdWN0cyBmcm9tIiAidmlhIGFwaWdhdGV3YXkiCgogICAgICAgICAgICBhdXRvTGF5b3V0CiAgICAgICAgfQoKICAgICAgICB0aGVtZSBkZWZhdWx0CgogICAgICAgIHN0eWxlcyB7CiAgICAgICAgICAgIGVsZW1lbnQgIlJ1bnRpbWUiIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzBCNzI4NQogICAgICAgICAgICAgICAgY29sb3IgI0ZGRkZGRgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJJbmZyYXN0cnVjdHVyZSIgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZCAjNUM2NzdECiAgICAgICAgICAgICAgICBjb2xvciAjRkZGRkZGCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsZW1lbnQgIk9yY2hlc3RyYXRpb24iIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzdDNkY2NAogICAgICAgICAgICAgICAgY29sb3IgI0ZGRkZGRgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJEYXRhU3RvcmUiIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzJGOUU0NAogICAgICAgICAgICAgICAgY29sb3IgI0ZGRkZGRgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJFeHRlcm5hbCIgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZCAjRjFGM0Y1CiAgICAgICAgICAgICAgICBjb2xvciAjMzQzQTQwCiAgICAgICAgICAgICAgICBib3JkZXIgRGFzaGVkCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsZW1lbnQgIkRhdGFiYXNlIiB7CiAgICAgICAgICAgICAgICBzaGFwZSBDeWxpbmRlcgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJGaWxlU3lzdGVtIiB7CiAgICAgICAgICAgICAgICBzaGFwZSBGb2xkZXIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo="},"views":{"componentViews":[{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"containerId":"14","dimensions":{"height":1991,"width":6140},"elements":[{"id":"15","x":969,"y":1400},{"id":"16","x":969,"y":800},{"id":"17","x":5469,"y":800},{"id":"18","x":4719,"y":800},{"id":"19","x":2469,"y":800},{"id":"20","x":3969,"y":800},{"id":"21","x":1719,"y":800},{"id":"22","x":3219,"y":800},{"id":"23","x":219,"y":800},{"id":"25","x":2469,"y":200},{"id":"37","x":3969,"y":200}],"externalContainerBoundariesVisible":false,"generatedKey":true,"key":"Component-001","order":12,"relationships":[{"id":"102"},{"id":"104"},{"id":"107"},{"id":"110","vertices":[{"x":5319,"y":696}]},{"id":"113"},{"id":"118","vertices":[{"x":3069,"y":696}]},{"id":"120"},{"id":"24"},{"id":"91","vertices":[{"x":1569,"y":696}]}]},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"containerId":"25","dimensions":{"height":1920,"width":4115},"elements":[{"id":"14","x":2204,"y":1529},{"id":"26","x":2204,"y":329},{"id":"27","x":329,"y":929},{"id":"28","x":1079,"y":929},{"id":"29","x":1829,"y":929},{"id":"30","x":2579,"y":929},{"id":"31","x":3329,"y":929}],"externalContainerBoundariesVisible":false,"generatedKey":true,"key":"Component-002","order":13,"relationships":[{"id":"101","vertices":[{"x":3929,"y":929},{"x":3929,"y":1333}]},{"id":"32","vertices":[{"x":929,"y":929}]},{"id":"33"},{"id":"34"},{"id":"35"},{"id":"36"},{"id":"90","vertices":[{"x":929,"y":1333}]},{"id":"93","vertices":[{"x":1679,"y":1333}]},{"id":"95"},{"id":"97"},{"id":"99","vertices":[{"x":3179,"y":1333}]}]},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"containerId":"37","dimensions":{"height":3120,"width":6037},"elements":[{"id":"14","x":3583,"y":2729},{"id":"38","x":2070,"y":329},{"id":"39","x":329,"y":929},{"id":"40","x":1166,"y":1529},{"id":"41","x":370,"y":1529},{"id":"42","x":1079,"y":2129},{"id":"43","x":3945,"y":329},{"id":"44","x":329,"y":2129},{"id":"45","x":2108,"y":1529},{"id":"46","x":1695,"y":929},{"id":"47","x":2445,"y":929},{"id":"48","x":3195,"y":929},{"id":"49","x":3945,"y":929}],"externalContainerBoundariesVisible":false,"generatedKey":true,"key":"Component-003","order":14,"relationships":[{"id":"106","vertices":[{"x":929,"y":2533}]},{"id":"109","vertices":[{"x":5862,"y":929},{"x":5862,"y":2533}]},{"id":"112","vertices":[{"x":2595,"y":2533}]},{"id":"115","vertices":[{"x":2970,"y":2533}]},{"id":"117","vertices":[{"x":4545,"y":929},{"x":4875,"y":1529},{"x":4875,"y":2533}]},{"id":"122","vertices":[{"x":2708,"y":1529},{"x":3525,"y":2533}]},{"id":"124","vertices":[{"x":3429,"y":1529}]},{"id":"126","vertices":[{"x":4037,"y":1529},{"x":4037,"y":2533}]},{"id":"128","vertices":[{"x":4645,"y":1529},{"x":4645,"y":2533}]},{"id":"50"},{"id":"51"},{"id":"52"},{"id":"53","vertices":[{"x":1545,"y":929}]},{"id":"54","vertices":[{"x":1408,"y":929}]},{"id":"55"},{"id":"56","vertices":[{"x":3795,"y":929}]},{"id":"57"},{"id":"58"},{"id":"59"},{"id":"60"},{"id":"61"}]}],"configuration":{"branding":{},"lastSavedView":"processingFlow","metadataSymbols":"SquareBrackets","styles":{"elements":[{"background":"#0b7285","color":"#ffffff","tag":"Runtime"},{"background":"#5c677d","color":"#ffffff","tag":"Infrastructure"},{"background":"#7c6f64","color":"#ffffff","tag":"Orchestration"},{"background":"#2f9e44","color":"#ffffff","tag":"DataStore"},{"background":"#f1f3f5","border":"Dashed","color":"#343a40","tag":"External"},{"shape":"Cylinder","tag":"Database"},{"shape":"Folder","tag":"FileSystem"}]},"terminology":{},"themes":["https://static.structurizr.com/themes/default/theme.json"]},"containerViews":[{"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"elements":[{"id":"2","x":0,"y":0},{"id":"5","x":0,"y":0},{"id":"6","x":0,"y":0},{"id":"8","x":0,"y":0},{"id":"139","x":0,"y":0}],"externalSoftwareSystemBoundariesVisible":false,"generatedKey":true,"key":"Container-001","order":7,"relationships":[{"id":"131"},{"id":"144"},{"id":"65"},{"id":"7"}],"softwareSystemId":"4"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":1391,"width":890},"elements":[{"id":"8","x":329,"y":208},{"id":"130","x":329,"y":808}],"externalSoftwareSystemBoundariesVisible":false,"generatedKey":true,"key":"Container-002","order":8,"relationships":[{"id":"135"}],"softwareSystemId":"129"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":1411,"width":1620},"elements":[{"id":"4","x":208,"y":329},{"id":"140","x":958,"y":929},{"id":"141","x":958,"y":329}],"externalSoftwareSystemBoundariesVisible":false,"generatedKey":true,"key":"Container-003","order":9,"relationships":[{"id":"142"},{"id":"145"}],"softwareSystemId":"139"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":2620,"width":3140},"elements":[{"id":"1","x":329,"y":2129},{"id":"8","x":1079,"y":2129},{"id":"148","x":329,"y":1529},{"id":"149","x":1079,"y":1529},{"id":"150","x":1454,"y":929},{"id":"151","x":1829,"y":1529},{"id":"152","x":1454,"y":329},{"id":"153","x":2579,"y":1529}],"externalSoftwareSystemBoundariesVisible":false,"generatedKey":true,"key":"Container-004","order":10,"relationships":[{"id":"154"},{"id":"156"},{"id":"157"},{"id":"158"},{"id":"159"},{"id":"160"},{"id":"162"}],"softwareSystemId":"147"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":4920,"width":5584},"elements":[{"id":"3","x":3350,"y":4529},{"id":"4","x":208,"y":1529},{"id":"9","x":2300,"y":2129},{"id":"10","x":1617,"y":3329},{"id":"11","x":1617,"y":3929},{"id":"12","x":2983,"y":1529},{"id":"13","x":2983,"y":929},{"id":"14","x":2675,"y":3329},{"id":"25","x":2896,"y":2729},{"id":"37","x":2146,"y":2729},{"id":"62","x":2367,"y":3929},{"id":"63","x":2717,"y":329},{"id":"129","x":4942,"y":2129},{"id":"147","x":958,"y":1529}],"externalSoftwareSystemBoundariesVisible":false,"generatedKey":true,"key":"Container-005","order":11,"relationships":[{"id":"134","vertices":[{"x":4717,"y":2129}]},{"id":"138"},{"id":"163","vertices":[{"x":1437,"y":1829}]},{"id":"66","vertices":[{"x":808,"y":1829}]},{"id":"69"},{"id":"70"},{"id":"71"},{"id":"72"},{"id":"73"},{"id":"74","vertices":[{"x":2833,"y":1529}]},{"id":"75"},{"id":"76"},{"id":"77"},{"id":"78"},{"id":"79"},{"id":"80","vertices":[{"x":3275,"y":3329},{"x":3275,"y":3629}]},{"id":"81"},{"id":"82","vertices":[{"x":2833,"y":929},{"x":2833,"y":1229}]},{"id":"83"},{"id":"84","vertices":[{"x":4487,"y":2875},{"x":4487,"y":3483}]},{"id":"86","vertices":[{"x":3500,"y":3929}]},{"id":"87","vertices":[{"x":2217,"y":4333}]},{"id":"88","vertices":[{"x":2967,"y":3929}]}],"softwareSystemId":"8"}],"deploymentViews":[{"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"elements":[{"id":"165","x":0,"y":0},{"id":"166","x":0,"y":0},{"id":"167","x":0,"y":0},{"id":"168","x":0,"y":0},{"id":"169","x":0,"y":0},{"id":"170","x":0,"y":0},{"id":"171","x":0,"y":0},{"id":"172","x":0,"y":0},{"id":"173","x":0,"y":0},{"id":"174","x":0,"y":0},{"id":"176","x":0,"y":0},{"id":"177","x":0,"y":0},{"id":"178","x":0,"y":0},{"id":"179","x":0,"y":0},{"id":"180","x":0,"y":0},{"id":"181","x":0,"y":0},{"id":"182","x":0,"y":0},{"id":"183","x":0,"y":0},{"id":"184","x":0,"y":0},{"id":"186","x":0,"y":0},{"id":"187","x":0,"y":0},{"id":"189","x":0,"y":0},{"id":"190","x":0,"y":0},{"id":"191","x":0,"y":0},{"id":"192","x":0,"y":0},{"id":"193","x":0,"y":0},{"id":"194","x":0,"y":0},{"id":"195","x":0,"y":0},{"id":"196","x":0,"y":0},{"id":"197","x":0,"y":0},{"id":"199","x":0,"y":0},{"id":"200","x":0,"y":0},{"id":"202","x":0,"y":0},{"id":"203","x":0,"y":0},{"id":"204","x":0,"y":0},{"id":"205","x":0,"y":0},{"id":"206","x":0,"y":0},{"id":"207","x":0,"y":0},{"id":"208","x":0,"y":0},{"id":"209","x":0,"y":0},{"id":"210","x":0,"y":0},{"id":"212","x":0,"y":0},{"id":"213","x":0,"y":0},{"id":"215","x":0,"y":0},{"id":"216","x":0,"y":0},{"id":"217","x":0,"y":0},{"id":"218","x":0,"y":0},{"id":"219","x":0,"y":0},{"id":"220","x":0,"y":0},{"id":"221","x":0,"y":0},{"id":"222","x":0,"y":0},{"id":"223","x":0,"y":0},{"id":"225","x":0,"y":0},{"id":"226","x":0,"y":0},{"id":"227","x":0,"y":0},{"id":"228","x":0,"y":0},{"id":"229","x":0,"y":0}],"environment":"Primary","generatedKey":true,"key":"Deployment-001","order":15,"relationships":[{"id":"175"},{"id":"185"},{"id":"188"},{"id":"198"},{"id":"201"},{"id":"211"},{"id":"214"},{"id":"224"},{"id":"230"}],"title":"Primary deployment topology"}],"dynamicViews":[{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":1991,"width":890},"elementId":"4","elements":[{"id":"2","x":329,"y":208},{"id":"5","x":329,"y":808},{"id":"9","x":329,"y":1408}],"externalBoundariesVisible":false,"key":"requestFlow","order":16,"relationships":[{"description":"Requests weather data from","id":"131","order":"1","response":false},{"description":"Routes API request to","id":"64","order":"2","response":false}],"title":"Customer API request flow"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":3811,"width":3028},"elementId":"8","elements":[{"id":"3","x":2487,"y":929},{"id":"9","x":1079,"y":2129},{"id":"12","x":1608,"y":1529},{"id":"13","x":1079,"y":929},{"id":"14","x":1829,"y":2129},{"id":"37","x":1454,"y":2729},{"id":"62","x":1454,"y":3329},{"id":"63","x":1341,"y":329},{"id":"130","x":329,"y":2129}],"externalBoundariesVisible":false,"key":"processingFlow","order":17,"relationships":[{"description":"Provides forecast source datasets to","id":"84","order":"1","response":true},{"description":"Starts scheduled workflow for","id":"82","order":"2","response":false,"vertices":[{"x":1679,"y":929}]},{"description":"Stores processed forecast datasets in","id":"133","order":"3","response":false,"vertices":[{"x":900,"y":2025}]},{"description":"Publishes forecast datasets to","id":"73","order":"4","response":false},{"description":"Reads forecast datasets from","id":"75","order":"5","response":false},{"description":"Starts scheduled workflow for","id":"83","order":"6","response":false},{"description":"Stores processed nowcast datasets in","id":"137","order":"7","response":false},{"description":"Publishes nowcast datasets to","id":"74","order":"8","response":false},{"description":"Provides NWP and observation inputs to","id":"86","order":"9","response":true},{"description":"Provides prepared regional inputs to","id":"77","order":"10","response":true},{"description":"Stores processing metadata in","id":"81","order":"11","response":false},{"description":"Reads regional products from","id":"71","order":"12","response":false}],"title":"Forecast and nowcast publication flow"}],"systemContextViews":[{"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"elements":[{"id":"2","x":0,"y":0},{"id":"4","x":0,"y":0},{"id":"8","x":0,"y":0},{"id":"139","x":0,"y":0}],"enterpriseBoundaryVisible":true,"generatedKey":true,"key":"SystemContext-001","order":2,"relationships":[{"id":"132"},{"id":"146"},{"id":"67"}],"softwareSystemId":"4"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":1300,"width":850},"elements":[{"id":"8","x":208,"y":208},{"id":"129","x":208,"y":808}],"enterpriseBoundaryVisible":true,"generatedKey":true,"key":"SystemContext-002","order":3,"relationships":[{"id":"136"}],"softwareSystemId":"129"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":1300,"width":850},"elements":[{"id":"4","x":208,"y":208},{"id":"139","x":208,"y":808}],"enterpriseBoundaryVisible":true,"generatedKey":true,"key":"SystemContext-003","order":4,"relationships":[{"id":"146"}],"softwareSystemId":"139"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":1400,"width":1600},"elements":[{"id":"1","x":208,"y":808},{"id":"8","x":958,"y":808},{"id":"147","x":583,"y":208}],"enterpriseBoundaryVisible":true,"generatedKey":true,"key":"SystemContext-004","order":5,"relationships":[{"id":"155"},{"id":"164"}],"softwareSystemId":"147"},{"automaticLayout":{"applied":true,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"dimensions":{"height":1900,"width":1600},"elements":[{"id":"3","x":958,"y":1408},{"id":"4","x":958,"y":208},{"id":"8","x":583,"y":808},{"id":"129","x":208,"y":1408},{"id":"147","x":208,"y":208}],"enterpriseBoundaryVisible":true,"generatedKey":true,"key":"SystemContext-005","order":6,"relationships":[{"id":"136"},{"id":"164"},{"id":"67"},{"id":"85"}],"softwareSystemId":"8"}],"systemLandscapeViews":[{"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"elements":[{"id":"1","x":0,"y":0},{"id":"2","x":0,"y":0},{"id":"3","x":0,"y":0},{"id":"4","x":0,"y":0},{"id":"8","x":0,"y":0},{"id":"129","x":0,"y":0},{"id":"139","x":0,"y":0},{"id":"147","x":0,"y":0}],"enterpriseBoundaryVisible":true,"generatedKey":true,"key":"SystemLandscape-001","order":1,"relationships":[{"id":"132"},{"id":"136"},{"id":"146"},{"id":"155"},{"id":"164"},{"id":"67"},{"id":"85"}]}]}}