mirror of
https://github.com/bitwarden/server.git
synced 2026-02-01 14:43:10 +08:00
- Event Integrations Structurizr POC - Diagram updates with PR suggestions - Removed architecture documents and references to them - Added RabbitME detailed view - Added Events component view - Reworked the main server view into two filtered views: Cloud and Self-Hosted. - Added tags "Cloud-Only" and "Self-Hosted-Only" to remove models / relationships that don't apply - Refactored how we build the dynamic views to be more extensible * Re-home event integrations to Dirt; Address Claude feedback / typos * Update diagrams (models/views/relationships) to reflect current state of Event Integrations * Fixed typos and suggestions from Claude * Fixed a few more minor notes from Claude --------- Co-authored-by: Matt Gibson <mgibson@bitwarden.com> Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com> Co-authored-by: Matt Bishop <mbishop@bitwarden.com>
4577 lines
192 KiB
JSON
4577 lines
192 KiB
JSON
{
|
|
"configuration" : { },
|
|
"description" : "Description",
|
|
"documentation" : {
|
|
"sections" : [ {
|
|
"content" : "## File Hierarchy\n",
|
|
"filename" : "file_hierarchy.md",
|
|
"format" : "Markdown",
|
|
"order" : 1,
|
|
"title" : ""
|
|
}, {
|
|
"content" : "## Perspectives\n\n### Security\nHighlights models and relationships identified as a part of [threat modeling](https://www.threatmodelingmanifesto.org/).\n\nIdentified threats are expected to be itemized in the perspective description, tagged with an appropriate `Security: threat` tag, and include a `!docs` property that describes the threat and mitigations. [`-> (relationships)`](https://docs.structurizr.com/dsl/language#relationship) do not allow for a `!docs` property, so a `url` property is used instead, linking to the appropriate section of the published docs.\n\n#### Example Model or Relationship\n\n##### Example Threat\n\n- **Type**: type\n- **Priority**: TBD/Low/Medium/High/Critical\n- **Likelihood**: TBD/Low/Medium/High/Critical\n- **Impact**: TBD/Low/Medium/High/Critical\n\ndescription of the threat.\n\n###### Example Threat Mitigations\ndescribe the mitigations for the threat and whether or not they are complete\n\n\n### SRE\n\nHighlights concerns and requirements for cloud deployments.\n",
|
|
"filename" : "perspectives.md",
|
|
"format" : "Markdown",
|
|
"order" : 2,
|
|
"title" : ""
|
|
}, {
|
|
"content" : "## Tags\n\n### Admin\n### API\n### Auth\n### Azure\n### Billing\n### Bitwarden Employee\n### Browser\n### CLI\n### Cloud Host Requirement\n### Database\n### Desktop\n### Directory\n### Events\n### External\n### HealthCheck\n### Icons\n### LDAP\n### MSP\n### Mobile\n### Queue\n### SCIM\n### Security:Privacy\n### Self-Hosted\n### Web\n",
|
|
"filename" : "tags.md",
|
|
"format" : "Markdown",
|
|
"order" : 3,
|
|
"title" : ""
|
|
} ]
|
|
},
|
|
"id" : 1,
|
|
"lastModifiedAgent" : "structurizr-ui",
|
|
"lastModifiedDate" : "2025-12-29T19:00:21Z",
|
|
"model" : {
|
|
"people" : [ {
|
|
"description" : "An end user of the Bitwarden System",
|
|
"id" : "1",
|
|
"location" : "Unspecified",
|
|
"name" : "Bitwarden User",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "user"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "15",
|
|
"id" : "116",
|
|
"sourceId" : "1",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Uses",
|
|
"destinationId" : "14",
|
|
"id" : "117",
|
|
"linkedRelationshipId" : "116",
|
|
"sourceId" : "1"
|
|
}, {
|
|
"description" : "Uses",
|
|
"destinationId" : "16",
|
|
"id" : "118",
|
|
"sourceId" : "1",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Uses",
|
|
"destinationId" : "17",
|
|
"id" : "119",
|
|
"sourceId" : "1",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Uses",
|
|
"destinationId" : "18",
|
|
"id" : "120",
|
|
"sourceId" : "1",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Uses",
|
|
"destinationId" : "19",
|
|
"id" : "121",
|
|
"sourceId" : "1",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Uses",
|
|
"destinationId" : "20",
|
|
"id" : "122",
|
|
"sourceId" : "1",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Person"
|
|
}, {
|
|
"description" : "Either a Bitwarden site-reliability engineer or administrator of a self-hosted instance",
|
|
"id" : "2",
|
|
"location" : "Unspecified",
|
|
"name" : "System Admin",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "system_admin"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Administers System",
|
|
"destinationId" : "9",
|
|
"id" : "131",
|
|
"sourceId" : "2",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Administers System",
|
|
"destinationId" : "4",
|
|
"id" : "132",
|
|
"linkedRelationshipId" : "131",
|
|
"sourceId" : "2"
|
|
} ],
|
|
"tags" : "Element,Person,Bitwarden Employee,Self-Host Admin"
|
|
}, {
|
|
"description" : "A customer success engineer. Inspects bitwarden state through the admin portal and internal tools",
|
|
"group" : "Bitwarden Controlled",
|
|
"id" : "3",
|
|
"location" : "Unspecified",
|
|
"name" : "Customer Success",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "customer_success"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Inspects and supports",
|
|
"destinationId" : "9",
|
|
"id" : "129",
|
|
"sourceId" : "3",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Inspects and supports",
|
|
"destinationId" : "4",
|
|
"id" : "130",
|
|
"linkedRelationshipId" : "129",
|
|
"sourceId" : "3"
|
|
} ],
|
|
"tags" : "Element,Person,Bitwarden Employee"
|
|
}, {
|
|
"description" : "An administrator of an organization",
|
|
"id" : "24",
|
|
"location" : "Unspecified",
|
|
"name" : "Organization Admin",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "admin"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Administers Organizations",
|
|
"destinationId" : "15",
|
|
"id" : "123",
|
|
"sourceId" : "24",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Administers Organizations",
|
|
"destinationId" : "14",
|
|
"id" : "124",
|
|
"linkedRelationshipId" : "123",
|
|
"sourceId" : "24"
|
|
} ],
|
|
"tags" : "Element,Person,Admin"
|
|
}, {
|
|
"description" : "And employee of a managed service provider",
|
|
"id" : "25",
|
|
"location" : "Unspecified",
|
|
"name" : "MSP",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "provider"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Completes Provider registration with",
|
|
"destinationId" : "9",
|
|
"id" : "125",
|
|
"sourceId" : "25",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Completes Provider registration with",
|
|
"destinationId" : "4",
|
|
"id" : "126",
|
|
"linkedRelationshipId" : "125",
|
|
"sourceId" : "25"
|
|
}, {
|
|
"description" : "Administers Providers and Organizations",
|
|
"destinationId" : "15",
|
|
"id" : "127",
|
|
"sourceId" : "25",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Administers Providers and Organizations",
|
|
"destinationId" : "14",
|
|
"id" : "128",
|
|
"linkedRelationshipId" : "127",
|
|
"sourceId" : "25"
|
|
} ],
|
|
"tags" : "Element,Person,MSP"
|
|
} ],
|
|
"properties" : {
|
|
"structurizr.groupSeparator" : "/"
|
|
},
|
|
"softwareSystems" : [ {
|
|
"containers" : [ {
|
|
"components" : [ {
|
|
"documentation" : { },
|
|
"id" : "6",
|
|
"name" : "Billing",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.api.billing"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Requests payments for customers",
|
|
"destinationId" : "31",
|
|
"id" : "166",
|
|
"sourceId" : "6",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Requests payments for customers",
|
|
"destinationId" : "32",
|
|
"id" : "169",
|
|
"sourceId" : "6",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,Billing"
|
|
} ],
|
|
"documentation" : { },
|
|
"id" : "5",
|
|
"name" : "API",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.api"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Validates JWTs with",
|
|
"destinationId" : "29",
|
|
"id" : "153",
|
|
"sourceId" : "5",
|
|
"tags" : "Relationship",
|
|
"url" : "https://bitwarden.com"
|
|
}, {
|
|
"description" : "Queries",
|
|
"destinationId" : "11",
|
|
"id" : "155",
|
|
"sourceId" : "5",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends emails to",
|
|
"destinationId" : "12",
|
|
"id" : "157",
|
|
"sourceId" : "5",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends notifications to",
|
|
"destinationId" : "13",
|
|
"id" : "158",
|
|
"sourceId" : "5",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Requests payments for customers",
|
|
"destinationId" : "31",
|
|
"id" : "167",
|
|
"linkedRelationshipId" : "166",
|
|
"sourceId" : "5"
|
|
}, {
|
|
"description" : "Requests payments for customers",
|
|
"destinationId" : "32",
|
|
"id" : "170",
|
|
"linkedRelationshipId" : "169",
|
|
"sourceId" : "5"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "34",
|
|
"id" : "175",
|
|
"sourceId" : "5",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "33",
|
|
"id" : "176",
|
|
"linkedRelationshipId" : "175",
|
|
"sourceId" : "5"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "48",
|
|
"id" : "185",
|
|
"sourceId" : "5",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "47",
|
|
"id" : "186",
|
|
"linkedRelationshipId" : "185",
|
|
"sourceId" : "5"
|
|
} ],
|
|
"tags" : "Element,Container,API"
|
|
}, {
|
|
"components" : [ {
|
|
"description" : "Listens to a specific queue and passes off to a handler to handle events",
|
|
"documentation" : { },
|
|
"id" : "79",
|
|
"name" : "RabbitMqEventListenerService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.event_listener"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Listens to",
|
|
"destinationId" : "50",
|
|
"id" : "262",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswritelistener_events"
|
|
},
|
|
"sourceId" : "79",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "47",
|
|
"id" : "263",
|
|
"linkedRelationshipId" : "262",
|
|
"sourceId" : "79"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "54",
|
|
"id" : "265",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsdatadoglistener_events"
|
|
},
|
|
"sourceId" : "79",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "53",
|
|
"id" : "267",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsheclistener_events"
|
|
},
|
|
"sourceId" : "79",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "51",
|
|
"id" : "269",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsslacklistener_events"
|
|
},
|
|
"sourceId" : "79",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "55",
|
|
"id" : "271",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsteamslistener_events"
|
|
},
|
|
"sourceId" : "79",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "52",
|
|
"id" : "273",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswebhooklistener_events"
|
|
},
|
|
"sourceId" : "79",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "81",
|
|
"id" : "275",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswritedelegate_events"
|
|
},
|
|
"sourceId" : "79",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "82",
|
|
"id" : "278",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsintegrationhandlerdelegate_events"
|
|
},
|
|
"sourceId" : "79",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Listens to a specific queue and passes off to a handler to handle IntegrationMessages",
|
|
"documentation" : { },
|
|
"id" : "80",
|
|
"name" : "RabbitMqIntegrationListenerService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.integration_listener"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Listens to",
|
|
"destinationId" : "56",
|
|
"id" : "286",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationslacklistener_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "47",
|
|
"id" : "287",
|
|
"linkedRelationshipId" : "286",
|
|
"sourceId" : "80"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "57",
|
|
"id" : "289",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationwebhooklistener_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "58",
|
|
"id" : "291",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationheclistener_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "59",
|
|
"id" : "293",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationdatadoglistener_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "60",
|
|
"id" : "295",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationteamslistener_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "83",
|
|
"id" : "297",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationslackdelegate_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "84",
|
|
"id" : "298",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationteamsdelegate_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "85",
|
|
"id" : "299",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationdatadogdelegate_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "86",
|
|
"id" : "300",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationwebhookdelegate_events"
|
|
},
|
|
"sourceId" : "80",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Handles all events, passing them off to the IEventWriteService with the `persistent` key for long term storage.",
|
|
"documentation" : { },
|
|
"id" : "81",
|
|
"name" : "EventRepositoryHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.event_repository_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Writes events to",
|
|
"destinationId" : "11",
|
|
"id" : "276",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventrepositorydatabase_events"
|
|
},
|
|
"sourceId" : "81",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Fetches the relevant configurations when an event comes in and hands the event to its paired integration handler for processing.",
|
|
"documentation" : { },
|
|
"id" : "82",
|
|
"name" : "EventIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.event_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Fetches template details from",
|
|
"destinationId" : "11",
|
|
"id" : "279",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventintegrationhandlerdatabase_events"
|
|
},
|
|
"sourceId" : "82",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Fetches configurations from",
|
|
"destinationId" : "87",
|
|
"id" : "281",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventintegrationhandlercache_events"
|
|
},
|
|
"sourceId" : "82",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Runs filters",
|
|
"destinationId" : "91",
|
|
"id" : "282",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventintegrationhandlerfilter_events"
|
|
},
|
|
"sourceId" : "82",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Publishes To",
|
|
"destinationId" : "49",
|
|
"id" : "283",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventintegrationhandlerpublish_events"
|
|
},
|
|
"sourceId" : "82",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Publishes To",
|
|
"destinationId" : "47",
|
|
"id" : "284",
|
|
"linkedRelationshipId" : "283",
|
|
"sourceId" : "82"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Processes Slack IntegrationMessages, posting them to the configured channels.",
|
|
"documentation" : { },
|
|
"id" : "83",
|
|
"name" : "SlackIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.slack_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "88",
|
|
"id" : "325",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "slacktoslackservice_events"
|
|
},
|
|
"sourceId" : "83",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Processes Teams IntegrationMessages, posting them to the configured channels.",
|
|
"documentation" : { },
|
|
"id" : "84",
|
|
"name" : "TeamsIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.teams_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "89",
|
|
"id" : "330",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "teamstoteamsservice_events"
|
|
},
|
|
"sourceId" : "84",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Processes Datadog IntegrationMessages, posting them to the configured URI.",
|
|
"documentation" : { },
|
|
"id" : "85",
|
|
"name" : "DatadogIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.datadog_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "90",
|
|
"id" : "335",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "datadoghandlerhttpclient_events"
|
|
},
|
|
"sourceId" : "85",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Processes Webhook and HEC IntegrationMessages, posting them to the configured URI.",
|
|
"documentation" : { },
|
|
"id" : "86",
|
|
"name" : "WebhookIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.webhook_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "90",
|
|
"id" : "334",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "webhookhandlerhttpclient_events"
|
|
},
|
|
"sourceId" : "86",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Caches all configurations for integrations in memory so that events can be handled without adding database load.",
|
|
"documentation" : { },
|
|
"id" : "87",
|
|
"name" : "EventIntegrationsExtendedCache",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.event_integrations_extended_cache"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Fetches configurations from",
|
|
"destinationId" : "11",
|
|
"id" : "280",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "cachedatabasefetch_events"
|
|
},
|
|
"sourceId" : "87",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Handles all API interaction with Slack.",
|
|
"documentation" : { },
|
|
"id" : "88",
|
|
"name" : "SlackService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.slack_service"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "93",
|
|
"id" : "326",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "slackservicetoslack_events"
|
|
},
|
|
"sourceId" : "88",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "327",
|
|
"linkedRelationshipId" : "326",
|
|
"sourceId" : "88",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Handles all API interaction with Teams.",
|
|
"documentation" : { },
|
|
"id" : "89",
|
|
"name" : "TeamsService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.teams_service"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "94",
|
|
"id" : "331",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "teamsservicetoteams_events"
|
|
},
|
|
"sourceId" : "89",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "332",
|
|
"linkedRelationshipId" : "331",
|
|
"sourceId" : "89",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Performs any Http functions for Datadog / Webhooks / HEC.",
|
|
"documentation" : { },
|
|
"id" : "90",
|
|
"name" : "HttpClient",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.http_client"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "97",
|
|
"id" : "336",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "httptocrowdstrike_events"
|
|
},
|
|
"sourceId" : "90",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "337",
|
|
"linkedRelationshipId" : "336",
|
|
"sourceId" : "90",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "96",
|
|
"id" : "339",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "httptodatadog_events"
|
|
},
|
|
"sourceId" : "90",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "95",
|
|
"id" : "341",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "httptosplunk_events"
|
|
},
|
|
"sourceId" : "90",
|
|
"tags" : "Relationship,Self-Hosted-Only",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
}, {
|
|
"description" : "Processes filters from configurations to determine if an event should be processed out to the integration.",
|
|
"documentation" : { },
|
|
"id" : "91",
|
|
"name" : "IntegrationFilterService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events.integration_filter_service"
|
|
},
|
|
"tags" : "Element,Component,Self-Hosted-Only"
|
|
} ],
|
|
"documentation" : { },
|
|
"id" : "7",
|
|
"name" : "Events",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "34",
|
|
"id" : "177",
|
|
"sourceId" : "7",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "33",
|
|
"id" : "178",
|
|
"linkedRelationshipId" : "177",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "48",
|
|
"id" : "187",
|
|
"sourceId" : "7",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "47",
|
|
"id" : "188",
|
|
"linkedRelationshipId" : "187",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "50",
|
|
"id" : "264",
|
|
"linkedRelationshipId" : "262",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "54",
|
|
"id" : "266",
|
|
"linkedRelationshipId" : "265",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "53",
|
|
"id" : "268",
|
|
"linkedRelationshipId" : "267",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "51",
|
|
"id" : "270",
|
|
"linkedRelationshipId" : "269",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "55",
|
|
"id" : "272",
|
|
"linkedRelationshipId" : "271",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "52",
|
|
"id" : "274",
|
|
"linkedRelationshipId" : "273",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Writes events to",
|
|
"destinationId" : "11",
|
|
"id" : "277",
|
|
"linkedRelationshipId" : "276",
|
|
"sourceId" : "7",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes To",
|
|
"destinationId" : "49",
|
|
"id" : "285",
|
|
"linkedRelationshipId" : "283",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "56",
|
|
"id" : "288",
|
|
"linkedRelationshipId" : "286",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "57",
|
|
"id" : "290",
|
|
"linkedRelationshipId" : "289",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "58",
|
|
"id" : "292",
|
|
"linkedRelationshipId" : "291",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "59",
|
|
"id" : "294",
|
|
"linkedRelationshipId" : "293",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "60",
|
|
"id" : "296",
|
|
"linkedRelationshipId" : "295",
|
|
"sourceId" : "7"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "93",
|
|
"id" : "328",
|
|
"linkedRelationshipId" : "326",
|
|
"sourceId" : "7",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "329",
|
|
"linkedRelationshipId" : "326",
|
|
"sourceId" : "7",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "94",
|
|
"id" : "333",
|
|
"linkedRelationshipId" : "331",
|
|
"sourceId" : "7",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "97",
|
|
"id" : "338",
|
|
"linkedRelationshipId" : "336",
|
|
"sourceId" : "7",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "96",
|
|
"id" : "340",
|
|
"linkedRelationshipId" : "339",
|
|
"sourceId" : "7",
|
|
"technology" : "tags"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "95",
|
|
"id" : "342",
|
|
"linkedRelationshipId" : "341",
|
|
"sourceId" : "7",
|
|
"technology" : "tags"
|
|
} ],
|
|
"tags" : "Element,Container,Events"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "8",
|
|
"name" : "Notifications",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.notifications"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Sends notifications to",
|
|
"destinationId" : "13",
|
|
"id" : "159",
|
|
"sourceId" : "8",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "9",
|
|
"name" : "Bitwarden Portal",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.portal"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Queries",
|
|
"destinationId" : "11",
|
|
"id" : "156",
|
|
"sourceId" : "9",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container,Web"
|
|
}, {
|
|
"components" : [ {
|
|
"description" : "Handles all events, passing them off to the IEventWriteService with the `persistent` key for long term storage.",
|
|
"documentation" : { },
|
|
"id" : "66",
|
|
"name" : "EventRepositoryHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.event_repository_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Writes events to",
|
|
"destinationId" : "11",
|
|
"id" : "230",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventrepositorydatabase"
|
|
},
|
|
"sourceId" : "66",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Listens to a specific subscription and passes off to a handler to handle events",
|
|
"documentation" : { },
|
|
"id" : "67",
|
|
"name" : "AzureServiceBusEventListenerService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.event_listener"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Listens to",
|
|
"destinationId" : "36",
|
|
"id" : "206",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswritelistener"
|
|
},
|
|
"sourceId" : "67",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "33",
|
|
"id" : "207",
|
|
"linkedRelationshipId" : "206",
|
|
"sourceId" : "67"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "66",
|
|
"id" : "210",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswritedelegate"
|
|
},
|
|
"sourceId" : "67",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "40",
|
|
"id" : "211",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsdatadoglistener"
|
|
},
|
|
"sourceId" : "67",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "39",
|
|
"id" : "213",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsheclistener"
|
|
},
|
|
"sourceId" : "67",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "37",
|
|
"id" : "215",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsslacklistener"
|
|
},
|
|
"sourceId" : "67",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "41",
|
|
"id" : "217",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsteamslistener"
|
|
},
|
|
"sourceId" : "67",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "38",
|
|
"id" : "219",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswebhooklistener"
|
|
},
|
|
"sourceId" : "67",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "69",
|
|
"id" : "221",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsintegrationhandlerdelegate"
|
|
},
|
|
"sourceId" : "67",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Listens to a specific subscription and passes off to a handler to handle IntegrationMessages",
|
|
"documentation" : { },
|
|
"id" : "68",
|
|
"name" : "AzureServiceBusIntegrationListenerService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.integration_listener"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Listens to",
|
|
"destinationId" : "42",
|
|
"id" : "231",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationslacklistener"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "33",
|
|
"id" : "232",
|
|
"linkedRelationshipId" : "231",
|
|
"sourceId" : "68"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "70",
|
|
"id" : "234",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationslackdelegate"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "43",
|
|
"id" : "235",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationwebhooklistener"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "73",
|
|
"id" : "237",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationwebhookdelegate"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "44",
|
|
"id" : "238",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationheclistener"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "45",
|
|
"id" : "240",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationdatadoglistener"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "72",
|
|
"id" : "242",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationdatadogdelegate"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "46",
|
|
"id" : "243",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationteamslistener"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Delegates to",
|
|
"destinationId" : "71",
|
|
"id" : "245",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationteamsdelegate"
|
|
},
|
|
"sourceId" : "68",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Fetches the relevant configurations when an event comes in and hands the event to its paired integration handler for processing.",
|
|
"documentation" : { },
|
|
"id" : "69",
|
|
"name" : "EventIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.event_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Publishes To",
|
|
"destinationId" : "35",
|
|
"id" : "222",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventintegrationhandlerpublish"
|
|
},
|
|
"sourceId" : "69",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Publishes To",
|
|
"destinationId" : "33",
|
|
"id" : "223",
|
|
"linkedRelationshipId" : "222",
|
|
"sourceId" : "69"
|
|
}, {
|
|
"description" : "Fetches configurations from",
|
|
"destinationId" : "74",
|
|
"id" : "225",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventintegrationhandlercache"
|
|
},
|
|
"sourceId" : "69",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Fetches template details from",
|
|
"destinationId" : "11",
|
|
"id" : "226",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventintegrationhandlerdatabase"
|
|
},
|
|
"sourceId" : "69",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Runs filters",
|
|
"destinationId" : "78",
|
|
"id" : "229",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventintegrationhandlerfilter"
|
|
},
|
|
"sourceId" : "69",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Processes Slack IntegrationMessages, posting them to the configured channels.",
|
|
"documentation" : { },
|
|
"id" : "70",
|
|
"name" : "SlackIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.slack_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "75",
|
|
"id" : "301",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "slacktoslackservice"
|
|
},
|
|
"sourceId" : "70",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Processes Teams IntegrationMessages, posting them to the configured channels.",
|
|
"documentation" : { },
|
|
"id" : "71",
|
|
"name" : "TeamsIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.teams_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "76",
|
|
"id" : "308",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "teamstoteamsservice"
|
|
},
|
|
"sourceId" : "71",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Processes Datadog IntegrationMessages, posting them to the configured URI.",
|
|
"documentation" : { },
|
|
"id" : "72",
|
|
"name" : "DatadogIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.datadog_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "77",
|
|
"id" : "314",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "datadoghandlerhttpclient"
|
|
},
|
|
"sourceId" : "72",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Processes Webhook and HEC IntegrationMessages, posting them to the configured URI.",
|
|
"documentation" : { },
|
|
"id" : "73",
|
|
"name" : "WebhookIntegrationHandler",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.webhook_integration_handler"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Uses",
|
|
"destinationId" : "77",
|
|
"id" : "313",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "webhookhandlerhttpclient"
|
|
},
|
|
"sourceId" : "73",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Caches all configurations for integrations so that events can be handled without adding database load.",
|
|
"documentation" : { },
|
|
"id" : "74",
|
|
"name" : "EventIntegrationsExtendedCache",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.event_integrations_extended_cache"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Fetches configurations from",
|
|
"destinationId" : "11",
|
|
"id" : "228",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "cachedatabasefetch"
|
|
},
|
|
"sourceId" : "74",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Handles all API interaction with Slack.",
|
|
"documentation" : { },
|
|
"id" : "75",
|
|
"name" : "SlackService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.slack_service"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "93",
|
|
"id" : "302",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "slackservicetoslack"
|
|
},
|
|
"sourceId" : "75",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "303",
|
|
"linkedRelationshipId" : "302",
|
|
"sourceId" : "75"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Handles all API interaction with Teams.",
|
|
"documentation" : { },
|
|
"id" : "76",
|
|
"name" : "TeamsService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.teams_service"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "94",
|
|
"id" : "309",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "teamsservicetoteams"
|
|
},
|
|
"sourceId" : "76",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "310",
|
|
"linkedRelationshipId" : "309",
|
|
"sourceId" : "76"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Performs any HTTP functions for Datadog / Webhooks / HEC.",
|
|
"documentation" : { },
|
|
"id" : "77",
|
|
"name" : "HttpClient",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.http_client"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "97",
|
|
"id" : "315",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "httptocrowdstrike"
|
|
},
|
|
"sourceId" : "77",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "316",
|
|
"linkedRelationshipId" : "315",
|
|
"sourceId" : "77"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "96",
|
|
"id" : "319",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "httptodatadog"
|
|
},
|
|
"sourceId" : "77",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "95",
|
|
"id" : "322",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "httptosplunk"
|
|
},
|
|
"sourceId" : "77",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Processes filters from configurations to determine if an event should be processed out to the integration.",
|
|
"documentation" : { },
|
|
"id" : "78",
|
|
"name" : "IntegrationFilterService",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor.integration_filter_service"
|
|
},
|
|
"tags" : "Element,Component"
|
|
} ],
|
|
"documentation" : { },
|
|
"id" : "10",
|
|
"name" : "Events Processor",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.events_processor"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Listens to",
|
|
"destinationId" : "36",
|
|
"id" : "208",
|
|
"linkedRelationshipId" : "206",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "33",
|
|
"id" : "209",
|
|
"linkedRelationshipId" : "206",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "40",
|
|
"id" : "212",
|
|
"linkedRelationshipId" : "211",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "39",
|
|
"id" : "214",
|
|
"linkedRelationshipId" : "213",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "37",
|
|
"id" : "216",
|
|
"linkedRelationshipId" : "215",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "41",
|
|
"id" : "218",
|
|
"linkedRelationshipId" : "217",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "38",
|
|
"id" : "220",
|
|
"linkedRelationshipId" : "219",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Publishes To",
|
|
"destinationId" : "35",
|
|
"id" : "224",
|
|
"linkedRelationshipId" : "222",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Fetches template details from",
|
|
"destinationId" : "11",
|
|
"id" : "227",
|
|
"linkedRelationshipId" : "226",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "42",
|
|
"id" : "233",
|
|
"linkedRelationshipId" : "231",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "43",
|
|
"id" : "236",
|
|
"linkedRelationshipId" : "235",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "44",
|
|
"id" : "239",
|
|
"linkedRelationshipId" : "238",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "45",
|
|
"id" : "241",
|
|
"linkedRelationshipId" : "240",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Listens to",
|
|
"destinationId" : "46",
|
|
"id" : "244",
|
|
"linkedRelationshipId" : "243",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "93",
|
|
"id" : "304",
|
|
"linkedRelationshipId" : "302",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "305",
|
|
"linkedRelationshipId" : "302",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "94",
|
|
"id" : "311",
|
|
"linkedRelationshipId" : "309",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "97",
|
|
"id" : "317",
|
|
"linkedRelationshipId" : "315",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "96",
|
|
"id" : "320",
|
|
"linkedRelationshipId" : "319",
|
|
"sourceId" : "10"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "95",
|
|
"id" : "323",
|
|
"linkedRelationshipId" : "322",
|
|
"sourceId" : "10"
|
|
} ],
|
|
"tags" : "Element,Container,Events,Cloud-Only"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "11",
|
|
"name" : "Database",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.database"
|
|
},
|
|
"tags" : "Element,Container,Database"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "12",
|
|
"name" : "Mail Queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.mail_queue"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Processes emails from",
|
|
"destinationId" : "9",
|
|
"id" : "160",
|
|
"sourceId" : "12",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container,Queue,Azure"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "13",
|
|
"name" : "Notifications Queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.notifications_queue"
|
|
},
|
|
"tags" : "Element,Container,Queue,Azure"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "26",
|
|
"name" : "SCIM",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.scim"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Queries",
|
|
"destinationId" : "11",
|
|
"id" : "163",
|
|
"sourceId" : "26",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "34",
|
|
"id" : "183",
|
|
"sourceId" : "26",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "33",
|
|
"id" : "184",
|
|
"linkedRelationshipId" : "183",
|
|
"sourceId" : "26"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "48",
|
|
"id" : "193",
|
|
"sourceId" : "26",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "47",
|
|
"id" : "194",
|
|
"linkedRelationshipId" : "193",
|
|
"sourceId" : "26"
|
|
} ],
|
|
"tags" : "Element,Container,SCIM"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "29",
|
|
"name" : "Identity",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.identity"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Queries",
|
|
"destinationId" : "11",
|
|
"id" : "164",
|
|
"sourceId" : "29",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "34",
|
|
"id" : "179",
|
|
"sourceId" : "29",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "33",
|
|
"id" : "180",
|
|
"linkedRelationshipId" : "179",
|
|
"sourceId" : "29"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "48",
|
|
"id" : "189",
|
|
"sourceId" : "29",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "47",
|
|
"id" : "190",
|
|
"linkedRelationshipId" : "189",
|
|
"sourceId" : "29"
|
|
} ],
|
|
"tags" : "Element,Container,Auth"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "30",
|
|
"name" : "SSO",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.sso"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Queries",
|
|
"destinationId" : "11",
|
|
"id" : "165",
|
|
"sourceId" : "30",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "34",
|
|
"id" : "181",
|
|
"sourceId" : "30",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "33",
|
|
"id" : "182",
|
|
"linkedRelationshipId" : "181",
|
|
"sourceId" : "30"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "48",
|
|
"id" : "191",
|
|
"sourceId" : "30",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends events to",
|
|
"destinationId" : "47",
|
|
"id" : "192",
|
|
"linkedRelationshipId" : "191",
|
|
"sourceId" : "30"
|
|
} ],
|
|
"tags" : "Element,Container,Auth"
|
|
}, {
|
|
"components" : [ {
|
|
"description" : "The main entry point for all events in the system. When an event occurs, it is published to this topic.",
|
|
"documentation" : { },
|
|
"id" : "34",
|
|
"name" : "Event Topic",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.event_topic"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "36",
|
|
"id" : "195",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswritesub"
|
|
},
|
|
"sourceId" : "34",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "40",
|
|
"id" : "196",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsdatadogsub"
|
|
},
|
|
"sourceId" : "34",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "39",
|
|
"id" : "197",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventshecsub"
|
|
},
|
|
"sourceId" : "34",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "37",
|
|
"id" : "198",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsslacksub"
|
|
},
|
|
"sourceId" : "34",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "41",
|
|
"id" : "199",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsteamssub"
|
|
},
|
|
"sourceId" : "34",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "38",
|
|
"id" : "200",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswebhooksub"
|
|
},
|
|
"sourceId" : "34",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,Events,ASB,Event Tier"
|
|
}, {
|
|
"description" : "Events that have integrations configured are processed and put on the integration topic with a routing key for their specific integration handler to process.",
|
|
"documentation" : { },
|
|
"id" : "35",
|
|
"name" : "Integration Topic",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.integration_topic"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Subscribes via filter on Datadog key",
|
|
"destinationId" : "45",
|
|
"id" : "201",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationdatadogsub"
|
|
},
|
|
"sourceId" : "35",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via filter on HEC key",
|
|
"destinationId" : "44",
|
|
"id" : "202",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationhecsub"
|
|
},
|
|
"sourceId" : "35",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via filter on Slack key",
|
|
"destinationId" : "42",
|
|
"id" : "203",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationslacksub"
|
|
},
|
|
"sourceId" : "35",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via filter on Teams key",
|
|
"destinationId" : "46",
|
|
"id" : "204",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationteamssub"
|
|
},
|
|
"sourceId" : "35",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via filter on Webhook key",
|
|
"destinationId" : "43",
|
|
"id" : "205",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationwebhooksub"
|
|
},
|
|
"sourceId" : "35",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,Events,ASB,Integrations,Integration Tier"
|
|
}, {
|
|
"description" : "Subscription for EventRepositoryHandler to write all events into azure table storage.",
|
|
"documentation" : { },
|
|
"id" : "36",
|
|
"name" : "events-write-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.eventswritesub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Event Tier"
|
|
}, {
|
|
"description" : "Subscription for slack-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Slack integration configured.",
|
|
"documentation" : { },
|
|
"id" : "37",
|
|
"name" : "events-slack-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.eventsslacksub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Event Tier,Slack"
|
|
}, {
|
|
"description" : "Subscription for webhook-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a webhook integration configured.",
|
|
"documentation" : { },
|
|
"id" : "38",
|
|
"name" : "events-webhook-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.eventswebhooksub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Event Tier,Webhook"
|
|
}, {
|
|
"description" : "Subscription for HEC-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a HEC integration configured.",
|
|
"documentation" : { },
|
|
"id" : "39",
|
|
"name" : "events-hec-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.eventshecsub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Event Tier,HEC"
|
|
}, {
|
|
"description" : "Subscription for Datadog-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Datadog integration configured.",
|
|
"documentation" : { },
|
|
"id" : "40",
|
|
"name" : "events-datadog-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.eventsdatadogsub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Event Tier,Datadog"
|
|
}, {
|
|
"description" : "Subscription for Microsoft Teams-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Teams integration configured.",
|
|
"documentation" : { },
|
|
"id" : "41",
|
|
"name" : "events-teams-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.eventsteamssub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Event Tier,Teams"
|
|
}, {
|
|
"description" : "Integration-level subscription for Slack IntegrationMessages. Correlation filter: Label = 'slack'.",
|
|
"documentation" : { },
|
|
"id" : "42",
|
|
"name" : "integration-slack-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.integrationslacksub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Integration Tier,Slack"
|
|
}, {
|
|
"description" : "Integration-level subscription for Webhook IntegrationMessages. Correlation filter: Label = 'webhook'.",
|
|
"documentation" : { },
|
|
"id" : "43",
|
|
"name" : "integration-webhook-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.integrationwebhooksub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Integration Tier,Webhook"
|
|
}, {
|
|
"description" : "Integration-level subscription for HEC IntegrationMessages. Correlation filter: Label = 'hec'.",
|
|
"documentation" : { },
|
|
"id" : "44",
|
|
"name" : "integration-hec-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.integrationhecsub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Integration Tier,HEC"
|
|
}, {
|
|
"description" : "Integration-level subscription for Datadog IntegrationMessages. Correlation filter: Label = 'datadog'.",
|
|
"documentation" : { },
|
|
"id" : "45",
|
|
"name" : "integration-datadog-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.integrationdatadogsub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Integration Tier,Datadog"
|
|
}, {
|
|
"description" : "Integration-level subscription for Miocrosoft Teams IntegrationMessages. Correlation filter: Label = 'teams'.",
|
|
"documentation" : { },
|
|
"id" : "46",
|
|
"name" : "integration-teams-subscription",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus.integrationteamssub"
|
|
},
|
|
"tags" : "Element,Component,ASB,Subscription,Integration Tier,Teams"
|
|
} ],
|
|
"description" : "AMQP service used for pub/sub architecture for Events and Integrations",
|
|
"documentation" : { },
|
|
"id" : "33",
|
|
"name" : "Azure Service Bus",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.azure_service_bus"
|
|
},
|
|
"tags" : "Element,Container,Events,Azure,ASB,Cloud-Only"
|
|
}, {
|
|
"components" : [ {
|
|
"documentation" : { },
|
|
"id" : "48",
|
|
"name" : "Event Exchange",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.event_exchange"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "50",
|
|
"id" : "246",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswritequeue"
|
|
},
|
|
"sourceId" : "48",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "54",
|
|
"id" : "247",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsdatadogqueue"
|
|
},
|
|
"sourceId" : "48",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "53",
|
|
"id" : "248",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventshecqueue"
|
|
},
|
|
"sourceId" : "48",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "51",
|
|
"id" : "249",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsslackqueue"
|
|
},
|
|
"sourceId" : "48",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "55",
|
|
"id" : "250",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventsteamsqueue"
|
|
},
|
|
"sourceId" : "48",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via fan-out",
|
|
"destinationId" : "52",
|
|
"id" : "251",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "eventswebhookqueue"
|
|
},
|
|
"sourceId" : "48",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,Events,Event Tier"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "49",
|
|
"name" : "Integration Exchange",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integration_exchange"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Subscribes via filter on Datadog key",
|
|
"destinationId" : "59",
|
|
"id" : "252",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationdatadogqueue"
|
|
},
|
|
"sourceId" : "49",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via filter on HEC key",
|
|
"destinationId" : "58",
|
|
"id" : "253",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationhecqueue"
|
|
},
|
|
"sourceId" : "49",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via filter on Slack key",
|
|
"destinationId" : "56",
|
|
"id" : "254",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationslackqueue"
|
|
},
|
|
"sourceId" : "49",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via filter on Teams key",
|
|
"destinationId" : "60",
|
|
"id" : "255",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationteamsqueue"
|
|
},
|
|
"sourceId" : "49",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Subscribes via filter on Webhook key",
|
|
"destinationId" : "57",
|
|
"id" : "256",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationwebhookqueue"
|
|
},
|
|
"sourceId" : "49",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,Events,Integrations,Integration Tier"
|
|
}, {
|
|
"description" : "Queue for EventRepositoryHandler to write all events into the database.",
|
|
"documentation" : { },
|
|
"id" : "50",
|
|
"name" : "events-write-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.eventswritequeue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Event Tier"
|
|
}, {
|
|
"description" : "Queue for slack-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Slack integration configured.",
|
|
"documentation" : { },
|
|
"id" : "51",
|
|
"name" : "events-slack-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.eventsslackqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Event Tier,Slack"
|
|
}, {
|
|
"description" : "Queue for webhook-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a webhook integration configured.",
|
|
"documentation" : { },
|
|
"id" : "52",
|
|
"name" : "events-webhook-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.eventswebhookqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Event Tier,Webhook"
|
|
}, {
|
|
"description" : "Queue for HEC-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a HEC integration configured.",
|
|
"documentation" : { },
|
|
"id" : "53",
|
|
"name" : "events-hec-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.eventshecqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Event Tier,HEC"
|
|
}, {
|
|
"description" : "Queue for Datadog-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Datadog integration configured.",
|
|
"documentation" : { },
|
|
"id" : "54",
|
|
"name" : "events-datadog-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.eventsdatadogqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Event Tier,Datadog"
|
|
}, {
|
|
"description" : "Queue for Microsoft Teams-specific EventIntegrationHandler which publishes processed events to the integration tier if there is a Teams integration configured.",
|
|
"documentation" : { },
|
|
"id" : "55",
|
|
"name" : "events-teams-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.eventsteamsqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Event Tier,Teams"
|
|
}, {
|
|
"description" : "Integration-level queue for Slack IntegrationMessages. Routing key = 'slack'.",
|
|
"documentation" : { },
|
|
"id" : "56",
|
|
"name" : "integration-slack-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationslackqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,Slack"
|
|
}, {
|
|
"description" : "Integration-level queue for Webhook IntegrationMessages. Routing key = 'webhook'.",
|
|
"documentation" : { },
|
|
"id" : "57",
|
|
"name" : "integration-webhook-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationwebhookqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,Webhook"
|
|
}, {
|
|
"description" : "Integration-level queue for HEC IntegrationMessages. Routing key = 'hec'.",
|
|
"documentation" : { },
|
|
"id" : "58",
|
|
"name" : "integration-hec-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationhecqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,HEC"
|
|
}, {
|
|
"description" : "Integration-level queue for Datadog IntegrationMessages. Routing key = 'datadog'.",
|
|
"documentation" : { },
|
|
"id" : "59",
|
|
"name" : "integration-datadog-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationdatadogqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,Datadog"
|
|
}, {
|
|
"description" : "Integration-level queue for Teams IntegrationMessages. Routing key = 'teams'.",
|
|
"documentation" : { },
|
|
"id" : "60",
|
|
"name" : "integration-teams-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationteamsqueue"
|
|
},
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,Teams"
|
|
}, {
|
|
"description" : "Integration-level retry queue for Slack IntegrationMessages. Routing key Label = 'slack-retry'.",
|
|
"documentation" : { },
|
|
"id" : "61",
|
|
"name" : "integration-slack-retry-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationslackretryqueue"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "DLQ after configured retry timing",
|
|
"destinationId" : "56",
|
|
"id" : "259",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationslackretryqueue"
|
|
},
|
|
"sourceId" : "61",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,Slack"
|
|
}, {
|
|
"description" : "Integration-level retry queue for Webhook IntegrationMessages. Routing key = 'webhook-retry'.",
|
|
"documentation" : { },
|
|
"id" : "62",
|
|
"name" : "integration-webhook-retry-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationwebhookretryqueue"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "DLQ after configured retry timing",
|
|
"destinationId" : "57",
|
|
"id" : "261",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationwebhookretryqueue"
|
|
},
|
|
"sourceId" : "62",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,Webhook"
|
|
}, {
|
|
"description" : "Integration-level retry queue for HEC IntegrationMessages. Routing key = 'hec-retry'.",
|
|
"documentation" : { },
|
|
"id" : "63",
|
|
"name" : "integration-hec-retry-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationhecretryqueue"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "DLQ after configured retry timing",
|
|
"destinationId" : "58",
|
|
"id" : "258",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationhecretryqueue"
|
|
},
|
|
"sourceId" : "63",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,HEC"
|
|
}, {
|
|
"description" : "Integration-level retry queue for Datadog IntegrationMessages. Routing key = 'datadog-retry'.",
|
|
"documentation" : { },
|
|
"id" : "64",
|
|
"name" : "integration-datadog-retry-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationdatadogretryqueue"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "DLQ after configured retry timing",
|
|
"destinationId" : "59",
|
|
"id" : "257",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationdatadogretryqueue"
|
|
},
|
|
"sourceId" : "64",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,Datadog"
|
|
}, {
|
|
"description" : "Integration-level retry queue for Teams IntegrationMessages. Routing key = 'teams-retry'.",
|
|
"documentation" : { },
|
|
"id" : "65",
|
|
"name" : "integration-teams-retry-queue",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq.integrationteamsretryqueue"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "DLQ after configured retry timing",
|
|
"destinationId" : "60",
|
|
"id" : "260",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "integrationteamsretryqueue"
|
|
},
|
|
"sourceId" : "65",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component,RabbitMQ,Queue,Integration Tier,Teams"
|
|
} ],
|
|
"documentation" : { },
|
|
"id" : "47",
|
|
"name" : "RabbitMQ",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.rabbit_mq"
|
|
},
|
|
"tags" : "Element,Container,Events,RabbitMQ,Self-Hosted-Only"
|
|
}, {
|
|
"components" : [ {
|
|
"description" : "IconsController",
|
|
"documentation" : { },
|
|
"id" : "99",
|
|
"name" : "IconsController",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.icons.icons_controller"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Requests icons from",
|
|
"destinationId" : "101",
|
|
"id" : "106",
|
|
"sourceId" : "99",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Caches icons in",
|
|
"destinationId" : "102",
|
|
"id" : "107",
|
|
"perspectives" : [ {
|
|
"description" : "Icons 1.3.1 Aggregate vault content leak through timing attack on cache \n\n Icons 1.3.2 Possible injection attack through cache key \n\n Icons 1.3.3 & Icons 1.3.4 Cache bloat leading to DoS \n\n Icons 1.3.5 Cache poisoning leading to incorrect icon storage",
|
|
"name" : "Security"
|
|
} ],
|
|
"sourceId" : "99",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component",
|
|
"technology" : "C# ASP.NET Core"
|
|
}, {
|
|
"description" : "Provides information about the deployed icon service. Allow for health checks.",
|
|
"documentation" : { },
|
|
"id" : "100",
|
|
"name" : "InfoController",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.icons.info_controller"
|
|
},
|
|
"tags" : "Element,Component,Info,HealthCheck",
|
|
"technology" : "C# ASP.NET Core"
|
|
}, {
|
|
"description" : "Resolves a single source for a website icon and downloads it.",
|
|
"documentation" : { },
|
|
"id" : "101",
|
|
"name" : "IconDetermination",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.icons.icon_determination"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Resolves IP addresses for domain names from",
|
|
"destinationId" : "108",
|
|
"id" : "109",
|
|
"sourceId" : "101",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Retrieves icons from",
|
|
"destinationId" : "112",
|
|
"id" : "113",
|
|
"sourceId" : "101",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Component"
|
|
}, {
|
|
"description" : "Caches icons for a given domain",
|
|
"documentation" : { },
|
|
"id" : "102",
|
|
"name" : "IconCache",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.icons.icon_cache"
|
|
},
|
|
"tags" : "Element,Component,Cache",
|
|
"technology" : "C# MemoryCache"
|
|
} ],
|
|
"documentation" : {
|
|
"sections" : [ {
|
|
"content" : "## Threat Model\n\n### Example Model or Relationship\n\n#### Example Threat\n\n- **Type**: type\n- **Priority**: TBD/Low/Medium/High/Critical\n- **Likelihood**: TBD/Low/Medium/High/Critical\n- **Impact**: TBD/Low/Medium/High/Critical\n\ndescription of the threat.\n\n##### Example Threat Mitigations\ndescribe the mitigations for the threat.\n\n### Clients -> IconsController\nCommunication from clients to the icons component. This is an unauthenticated endpoint with minimal input validation.\n\n#### SSL termination exposes vault contents to network administrators\n\n- **Type**: Information Disclosure\n- **Priority**: TBD\n- **Likelihood**: TBD\n- **Impact**: TBD\n\nA machine with SSL terminating proxies cannot rely on encrypted query parameters hiding vault contents from network administrators.\n\n##### Mitigations\n- <span style=\"color:red\">Not Implemented</span>: Establish encrypted pipe communication with Icons service prior to requesting icon resolution\n\n#### Cleartext transmission of vault contents to Server\n\n- **Type**: Information Disclosure\n- **Priority**: TBD\n- **Likelihood**: TBD\n- **Impact**: TBD\n\nServer-side after TLS by necessity to lookup a favicon. However, to maintain our promises as a no-log proxy, we need to be sure not to maintain ip records for icon service requests\n\n##### Mitigations\n- <span style=\"color:red\">Unconfirmed</span>: Configure network edge and datadog to drop this identifying data.\n\n#### No SLA offered on Icons service\n\n- **Type**: Denial of Service\n- **Priority**: TBD\n- **Likelihood**: TBD\n- **Impact**: TBD\n\nWe do not offer SLA on up time of icons service. Clients may be unable to resolve icons, and we need to determine a graceful degradation strategy.\n\n##### Mitigations\n- <span style=\"color:green\">Done</span>: Default icon fallback (globe)\n- <span style=\"color:red\">Not Implemented, Not Prioritized</span>: Local cache of retrieved icons\n\n#### SSRF by proxied requests\n\n- **Type**: Elevation of Privilege / Information Disclosure\n- **Priority**: TBD\n- **Likelihood**: TBD\n- **Impact**: TBD\n\nThe service is designed to proxy requests to arbitrary URLs. This can be used to access internal network resources.\n\nIf a site redirects to an internal network address, the internal network topography may be exposed to the client.\n\n##### Mitigations\n- <span style=\"color:green\">Done</span>: Isolation of the icons component from the rest of the system intranet.\n- <span style=\"color:green\">Done</span>: Avoid fetching by domain name. All requests must be first resolved to an IP address and filtered against internal network ranges, defined as:\n - `::1`, `::`, `::ffff:`\n - IPv6 and starting with `fc`, `fd`, `fe`, or `ff`\n - IPv4 and starting with `0.`, `10.`, `100.`, `127.`, `169.254`, `172.16-31`, or `192.168`\n\n This is done in the `IconDetermination` component\n\n### IconsController -> IconCache\nCommunication from the icons controller to a mem cache of previously retrieved icons, keyed by original domain requested.\n\n#### Cache determination through timing measurements\n\n- **Type**: Information Disclosure\n- **Priority**: Low\n- **Likelihood**: Low\n- **Impact**: Low\n\nBy measuring the time it takes to retrieve an icon, an attacker may be able to determine if a domain has been previously requested by another user, revealing that some user on the service has that domain in their vault.\n\n##### Mitigations\n<span style=\"color:red\">None identified</span>\n\n#### Unescaped storage of user-input data in cache\n\n- **Type**: Tampering\n- **Priority**: Low\n- **Likelihood**: Low\n- **Impact**: Low\n\nUnescaped user input data may be stored as keys in the cache. This input data is not executed, but if the storage method is changed in the future, this may lead to some injection attack.\n\n##### Mitigations\n<span style=\"color:red\">None identified</span>\n\n#### Cache bloat through intentionally large icons\n\n- **Type**: Denial of Service\n- **Priority**: TBD\n- **Likelihood**: TBD\n- **Impact**: TBD\n\nUser request may intentionally resolve to very large icons, bloating the cache and increasing memory requirements.\n\n<span style=\"color:red\">Open question</span>: Should we also limit the size of icons fetched?\n\n##### Mitigations\n<span style=\"color:green\">Done</span>: Limit size of icons stored in cache\n\n#### Cache bloat through many unique domain requests\n\n- **Type**: Denial of Service\n- **Priority**: TBD\n- **Likelihood**: TBD\n- **Impact**: TBD\n\nUser request may intentionally resolve many unique domains to resolve that may or may not exist, bloating the cache and increasing memory requirements.\n\n##### Mitigations\n<span style=\"color:red\">Unconfirmed</span>: Rate limit requests to the icons service\n\n#### Storage of potentially sensitive data as keys or values in cache\n\n- **Type**: Information Disclosure\n- **Priority**: TBD\n- **Likelihood**: TBD\n- **Impact**: TBD\n\nUpload of urls is automatic to our icon service. If our filters for upload are incorrect, we may store sensitive data in our cache. For example, onion addresses.\n\n##### Mitigations\n<span style=\"color:green\">Done</span>: Avoid filter known sensitive urls\n<span style=\"color:red\">Not implemented, Not prioritized</span>: Add client-side setting to disable icon request for a given url or pattern\n\n#### Cache poisoning via dns poisoning\n\n- **Type**: Tampering\n- **Priority**: Low\n- **Likelihood**: Low\n- **Impact**: Low\n\nDNS poisoning would lead to incorrect icons being cached for a given domain.\n\n##### Mitigations\n<span style=\"color:red\">None Identified</span>\n",
|
|
"format" : "Markdown",
|
|
"order" : 1,
|
|
"title" : ""
|
|
} ]
|
|
},
|
|
"id" : "98",
|
|
"name" : "Icons",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server.icons"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Resolves IP addresses for domain names from",
|
|
"destinationId" : "108",
|
|
"id" : "110",
|
|
"linkedRelationshipId" : "109",
|
|
"sourceId" : "98"
|
|
}, {
|
|
"description" : "Retrieves icons from",
|
|
"destinationId" : "112",
|
|
"id" : "114",
|
|
"linkedRelationshipId" : "113",
|
|
"sourceId" : "98"
|
|
} ],
|
|
"tags" : "Element,Container"
|
|
} ],
|
|
"documentation" : { },
|
|
"group" : "Bitwarden Controlled",
|
|
"id" : "4",
|
|
"location" : "Unspecified",
|
|
"name" : "Bitwarden Server",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "server"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Resolves IP addresses for domain names from",
|
|
"destinationId" : "108",
|
|
"id" : "111",
|
|
"linkedRelationshipId" : "109",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Retrieves icons from",
|
|
"destinationId" : "112",
|
|
"id" : "115",
|
|
"linkedRelationshipId" : "113",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Requests payments for customers",
|
|
"destinationId" : "31",
|
|
"id" : "168",
|
|
"linkedRelationshipId" : "166",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Requests payments for customers",
|
|
"destinationId" : "32",
|
|
"id" : "171",
|
|
"linkedRelationshipId" : "169",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "93",
|
|
"id" : "306",
|
|
"linkedRelationshipId" : "302",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "92",
|
|
"id" : "307",
|
|
"linkedRelationshipId" : "302",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "94",
|
|
"id" : "312",
|
|
"linkedRelationshipId" : "309",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "97",
|
|
"id" : "318",
|
|
"linkedRelationshipId" : "315",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "96",
|
|
"id" : "321",
|
|
"linkedRelationshipId" : "319",
|
|
"sourceId" : "4"
|
|
}, {
|
|
"description" : "Publishes configured events to",
|
|
"destinationId" : "95",
|
|
"id" : "324",
|
|
"linkedRelationshipId" : "322",
|
|
"sourceId" : "4"
|
|
} ],
|
|
"tags" : "Element,Software System"
|
|
}, {
|
|
"containers" : [ {
|
|
"documentation" : { },
|
|
"id" : "15",
|
|
"name" : "Web Application",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "clients.web"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "5",
|
|
"id" : "133",
|
|
"sourceId" : "15",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "4",
|
|
"id" : "134",
|
|
"linkedRelationshipId" : "133",
|
|
"sourceId" : "15"
|
|
}, {
|
|
"description" : "Authenticates with",
|
|
"destinationId" : "29",
|
|
"id" : "146",
|
|
"sourceId" : "15",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container,Web"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "16",
|
|
"name" : "iOS Application",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "clients.ios"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "5",
|
|
"id" : "136",
|
|
"sourceId" : "16",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "4",
|
|
"id" : "137",
|
|
"linkedRelationshipId" : "136",
|
|
"sourceId" : "16"
|
|
}, {
|
|
"description" : "Authenticates With",
|
|
"destinationId" : "29",
|
|
"id" : "148",
|
|
"sourceId" : "16",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container,Mobile"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "17",
|
|
"name" : "Android Application",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "clients.android"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "5",
|
|
"id" : "138",
|
|
"sourceId" : "17",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "4",
|
|
"id" : "139",
|
|
"linkedRelationshipId" : "138",
|
|
"sourceId" : "17"
|
|
}, {
|
|
"description" : "Authenticates With",
|
|
"destinationId" : "29",
|
|
"id" : "149",
|
|
"sourceId" : "17",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container,Mobile"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "18",
|
|
"name" : "Browser Extension",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "clients.browser_extension"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "5",
|
|
"id" : "140",
|
|
"sourceId" : "18",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "4",
|
|
"id" : "141",
|
|
"linkedRelationshipId" : "140",
|
|
"sourceId" : "18"
|
|
}, {
|
|
"description" : "Authenticates With",
|
|
"destinationId" : "29",
|
|
"id" : "150",
|
|
"sourceId" : "18",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container,Browser"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "19",
|
|
"name" : "CLI",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "clients.cli"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "5",
|
|
"id" : "142",
|
|
"sourceId" : "19",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "4",
|
|
"id" : "143",
|
|
"linkedRelationshipId" : "142",
|
|
"sourceId" : "19"
|
|
}, {
|
|
"description" : "Authenticates With",
|
|
"destinationId" : "29",
|
|
"id" : "151",
|
|
"sourceId" : "19",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container,CLI"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "20",
|
|
"name" : "Desktop Application",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "clients.desktop"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "5",
|
|
"id" : "144",
|
|
"sourceId" : "20",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "4",
|
|
"id" : "145",
|
|
"linkedRelationshipId" : "144",
|
|
"sourceId" : "20"
|
|
}, {
|
|
"description" : "Authenticates With",
|
|
"destinationId" : "29",
|
|
"id" : "152",
|
|
"sourceId" : "20",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Container,Desktop"
|
|
} ],
|
|
"documentation" : { },
|
|
"group" : "Bitwarden Controlled",
|
|
"id" : "14",
|
|
"location" : "Unspecified",
|
|
"name" : "Clients",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "clients"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Requests icons for cleartext urls from",
|
|
"destinationId" : "99",
|
|
"id" : "103",
|
|
"perspectives" : [ {
|
|
"description" : "Icons 1.2.1 Broken SSL communication exposes vault contents to network administrators \n\n Icons 1.2.2 Tracking of user vault contents by ip correlation between identity and icons services \n\n Icons 1.2.3 No SLA offered on Icons service, graceful degradation of features needed if it goes down \n\n Icons 1.2.4 SSRF through crafted input resolving to a location the server has elevated privileges in",
|
|
"name" : "Security"
|
|
} ],
|
|
"sourceId" : "14",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Requests icons for cleartext urls from",
|
|
"destinationId" : "98",
|
|
"id" : "104",
|
|
"linkedRelationshipId" : "103",
|
|
"sourceId" : "14"
|
|
}, {
|
|
"description" : "Requests icons for cleartext urls from",
|
|
"destinationId" : "4",
|
|
"id" : "105",
|
|
"linkedRelationshipId" : "103",
|
|
"sourceId" : "14"
|
|
}, {
|
|
"description" : "Makes requests to",
|
|
"destinationId" : "5",
|
|
"id" : "135",
|
|
"linkedRelationshipId" : "133",
|
|
"sourceId" : "14"
|
|
}, {
|
|
"description" : "Authenticates with",
|
|
"destinationId" : "29",
|
|
"id" : "147",
|
|
"linkedRelationshipId" : "146",
|
|
"sourceId" : "14"
|
|
}, {
|
|
"description" : "Posts local usage events to",
|
|
"destinationId" : "7",
|
|
"id" : "154",
|
|
"sourceId" : "14",
|
|
"tags" : "Relationship"
|
|
} ],
|
|
"tags" : "Element,Software System"
|
|
}, {
|
|
"documentation" : { },
|
|
"group" : "Bitwarden Controlled",
|
|
"id" : "21",
|
|
"location" : "Unspecified",
|
|
"name" : "Directory Connector",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "directory_connector"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Syncs users and groups to Bitwarden",
|
|
"destinationId" : "5",
|
|
"id" : "27",
|
|
"sourceId" : "21",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Syncs users and groups to Bitwarden",
|
|
"destinationId" : "4",
|
|
"id" : "28",
|
|
"linkedRelationshipId" : "27",
|
|
"sourceId" : "21"
|
|
} ],
|
|
"tags" : "Element,Software System,Directory,LDAP,Self-Hosted"
|
|
}, {
|
|
"documentation" : { },
|
|
"group" : "Bitwarden Controlled",
|
|
"id" : "22",
|
|
"location" : "Unspecified",
|
|
"name" : "Key Connector",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "key_connector"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Validates JWTs with",
|
|
"destinationId" : "29",
|
|
"id" : "343",
|
|
"sourceId" : "22",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Validates JWTs with",
|
|
"destinationId" : "4",
|
|
"id" : "344",
|
|
"linkedRelationshipId" : "343",
|
|
"sourceId" : "22"
|
|
} ],
|
|
"tags" : "Element,Software System"
|
|
}, {
|
|
"description" : "Self-hosted instances of Bitwarden servers",
|
|
"documentation" : { },
|
|
"id" : "23",
|
|
"location" : "Unspecified",
|
|
"name" : "Self-Hosted Instances",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "self_hosted_instances"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Sends push notification proxy requests to",
|
|
"destinationId" : "8",
|
|
"id" : "161",
|
|
"sourceId" : "23",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends push notification proxy requests to",
|
|
"destinationId" : "4",
|
|
"id" : "162",
|
|
"linkedRelationshipId" : "161",
|
|
"sourceId" : "23"
|
|
} ],
|
|
"tags" : "Element,Software System,Self-Hosted,External"
|
|
}, {
|
|
"description" : "Handles credit cards and subscriptions.",
|
|
"documentation" : { },
|
|
"group" : "Payment Systems",
|
|
"id" : "31",
|
|
"location" : "Unspecified",
|
|
"name" : "Stripe",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "stripe"
|
|
},
|
|
"relationships" : [ {
|
|
"description" : "Sends subscription events to",
|
|
"destinationId" : "6",
|
|
"id" : "172",
|
|
"sourceId" : "31",
|
|
"tags" : "Relationship"
|
|
}, {
|
|
"description" : "Sends subscription events to",
|
|
"destinationId" : "5",
|
|
"id" : "173",
|
|
"linkedRelationshipId" : "172",
|
|
"sourceId" : "31"
|
|
}, {
|
|
"description" : "Sends subscription events to",
|
|
"destinationId" : "4",
|
|
"id" : "174",
|
|
"linkedRelationshipId" : "172",
|
|
"sourceId" : "31"
|
|
} ],
|
|
"tags" : "Element,Software System,External,Billing"
|
|
}, {
|
|
"description" : "Handles PayPal and cryptocurrency.",
|
|
"documentation" : { },
|
|
"group" : "Payment Systems",
|
|
"id" : "32",
|
|
"location" : "Unspecified",
|
|
"name" : "Braintree",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "braintree"
|
|
},
|
|
"tags" : "Element,Software System,External,Billing"
|
|
}, {
|
|
"containers" : [ {
|
|
"description" : "Slack messaging service. Receives messages via configured event integrations.",
|
|
"documentation" : { },
|
|
"id" : "93",
|
|
"name" : "Slack",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "external_services.slack"
|
|
},
|
|
"tags" : "Element,Container,External,Events,Integrations,Slack"
|
|
}, {
|
|
"description" : "Microsoft Teams messaging service. Receives messages via configured event integrations.",
|
|
"documentation" : { },
|
|
"id" : "94",
|
|
"name" : "Teams",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "external_services.teams"
|
|
},
|
|
"tags" : "Element,Container,External,Events,Integrations,Teams"
|
|
}, {
|
|
"description" : "Splunk SIEM service. Receives events via configured event integrations.",
|
|
"documentation" : { },
|
|
"id" : "95",
|
|
"name" : "Splunk",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "external_services.splunk"
|
|
},
|
|
"tags" : "Element,Container,External,Events,Integrations,Splunk"
|
|
}, {
|
|
"description" : "Datadog SIEM service. Receives events via configured event integrations.",
|
|
"documentation" : { },
|
|
"id" : "96",
|
|
"name" : "Datadog",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "external_services.datadog"
|
|
},
|
|
"tags" : "Element,Container,External,Events,Integrations,Datadog"
|
|
}, {
|
|
"description" : "Crowdstrike Falcon SIEM service. Receives events via configured event integrations.",
|
|
"documentation" : { },
|
|
"id" : "97",
|
|
"name" : "Crowdstrike Falcon",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "external_services.crowdstrike"
|
|
},
|
|
"tags" : "Element,Container,External,Events,Integrations,Crowdstrike Falcon,Crowdstrike"
|
|
} ],
|
|
"description" : "External services (e.g. SIEM, Slack, et al) that consume events via integrations",
|
|
"documentation" : { },
|
|
"id" : "92",
|
|
"location" : "Unspecified",
|
|
"name" : "External Services",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "external_services"
|
|
},
|
|
"tags" : "Element,Software System,External,Events,Integrations"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "108",
|
|
"location" : "Unspecified",
|
|
"name" : "DNS",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "dns"
|
|
},
|
|
"tags" : "Element,Software System,External,Icons"
|
|
}, {
|
|
"documentation" : { },
|
|
"id" : "112",
|
|
"location" : "Unspecified",
|
|
"name" : "External Websites",
|
|
"properties" : {
|
|
"structurizr.dsl.identifier" : "external_websites"
|
|
},
|
|
"tags" : "Element,Software System,External,Icons"
|
|
} ]
|
|
},
|
|
"name" : "Bitwarden Server System",
|
|
"properties" : {
|
|
"structurizr.dsl" : "d29ya3NwYWNlICJCaXR3YXJkZW4gU2VydmVyIFN5c3RlbSIgewoKICAhaWRlbnRpZmllcnMgaGllcmFyY2hpY2FsCgogICFkb2NzICJ1c2FnZV9kb2NzIgogIG1vZGVsIHsKICAgIHByb3BlcnRpZXMgewogICAgICAic3RydWN0dXJpenIuZ3JvdXBTZXBhcmF0b3IiICIvIgogICAgfQoKICAgICMgSW5jbHVkZSBzaGFyZWQgbGV2ZWwgbW9kZWxzCiAgICAjIFBlcnNvbiB0eXBlcwogICAgdXNlciA9IHBlcnNvbiAiQml0d2FyZGVuIFVzZXIiICJBbiBlbmQgdXNlciBvZiB0aGUgQml0d2FyZGVuIFN5c3RlbSIKICAgIHN5c3RlbV9hZG1pbiA9IHBlcnNvbiAiU3lzdGVtIEFkbWluIiAiRWl0aGVyIGEgQml0d2FyZGVuIHNpdGUtcmVsaWFiaWxpdHkgZW5naW5lZXIgb3IgYWRtaW5pc3RyYXRvciBvZiBhIHNlbGYtaG9zdGVkIGluc3RhbmNlIiB7CiAgICAgIHRhZ3MgIkJpdHdhcmRlbiBFbXBsb3llZSIgIlNlbGYtSG9zdCBBZG1pbiIKICAgIH0KICAgIAogICAgCiAgICBid19jb250cm9sbGVkID0gZ3JvdXAgIkJpdHdhcmRlbiBDb250cm9sbGVkIiB7CiAgICAgICMgQml0d2FyZGVuIHN0YWZmCiAgICAgIGN1c3RvbWVyX3N1Y2Nlc3MgPSBwZXJzb24gIkN1c3RvbWVyIFN1Y2Nlc3MiICJBIGN1c3RvbWVyIHN1Y2Nlc3MgZW5naW5lZXIuIEluc3BlY3RzIGJpdHdhcmRlbiBzdGF0ZSB0aHJvdWdoIHRoZSBhZG1pbiBwb3J0YWwgYW5kIGludGVybmFsIHRvb2xzIiB7CiAgICAgICAgdGFncyAiQml0d2FyZGVuIEVtcGxveWVlIgogICAgICB9CiAgICAgICMgUm9vdCBzeXN0ZW1zCiAgICAgIHNlcnZlciA9IHNvZnR3YXJlU3lzdGVtICJCaXR3YXJkZW4gU2VydmVyIiB7CiAgICAgICAgYXBpID0gY29udGFpbmVyICJBUEkiIHsKICAgICAgICAgIGJpbGxpbmcgPSBjb21wb25lbnQgIkJpbGxpbmciIHsKICAgICAgICAgICAgdGFncyAiQmlsbGluZyIKICAgICAgICAgIH0KICAgICAgICAgIHRhZ3MgIkFQSSIKICAgICAgICB9CiAgICAgICAgZXZlbnRzID0gY29udGFpbmVyICJFdmVudHMiIHsKICAgICAgICAgIHRhZ3MgIkV2ZW50cyIKICAgICAgICB9CiAgICAgICAgbm90aWZpY2F0aW9ucyA9IGNvbnRhaW5lciAiTm90aWZpY2F0aW9ucyIKICAgICAgICBwb3J0YWwgPSBjb250YWluZXIgIkJpdHdhcmRlbiBQb3J0YWwiIHsKICAgICAgICAgIHRhZ3MgIldlYiIKICAgICAgICB9CiAgICAgICAgZXZlbnRzX3Byb2Nlc3NvciA9IGNvbnRhaW5lciAiRXZlbnRzIFByb2Nlc3NvciIgewogICAgICAgICAgdGFncyAiRXZlbnRzIgogICAgICAgICAgdGFncyAiQ2xvdWQtT25seSIKICAgICAgICB9CiAgICAKICAgICAgICAjIERhdGEgc3RvcmVzCiAgICAgICAgZGF0YWJhc2UgPSBjb250YWluZXIgIkRhdGFiYXNlIiB7CiAgICAgICAgICB0YWdzICJEYXRhYmFzZSIKICAgICAgICB9CiAgICAgICAgbWFpbF9xdWV1ZSA9IGNvbnRhaW5lciAiTWFpbCBRdWV1ZSIgewogICAgICAgICAgdGFncyAiUXVldWUiCiAgICAgICAgICB0YWdzICJBenVyZSIKICAgICAgICB9CiAgICAgICAgbm90aWZpY2F0aW9uc19xdWV1ZSA9IGNvbnRhaW5lciAiTm90aWZpY2F0aW9ucyBRdWV1ZSIgewogICAgICAgICAgdGFncyAiUXVldWUiCiAgICAgICAgICB0YWdzICJBenVyZSIKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xpZW50cyA9IHNvZnR3YXJlU3lzdGVtICJDbGllbnRzIiB7CiAgICAgICAgd2ViID0gY29udGFpbmVyICJXZWIgQXBwbGljYXRpb24iIHsKICAgICAgICAgIHRhZ3MgIldlYiIKICAgICAgICB9CiAgICAgICAgaW9zID0gY29udGFpbmVyICJpT1MgQXBwbGljYXRpb24iIHsKICAgICAgICAgIHRhZ3MgIk1vYmlsZSIKICAgICAgICB9CiAgICAgICAgYW5kcm9pZCA9IGNvbnRhaW5lciAiQW5kcm9pZCBBcHBsaWNhdGlvbiIgewogICAgICAgICAgdGFncyAiTW9iaWxlIgogICAgICAgIH0KICAgICAgICBicm93c2VyX2V4dGVuc2lvbiA9IGNvbnRhaW5lciAiQnJvd3NlciBFeHRlbnNpb24iIHsKICAgICAgICAgIHRhZ3MgIkJyb3dzZXIiCiAgICAgICAgfQogICAgICAgIGNsaSA9IGNvbnRhaW5lciAiQ0xJIiB7CiAgICAgICAgICB0YWdzICJDTEkiCiAgICAgICAgfQogICAgICAgIGRlc2t0b3AgPSBjb250YWluZXIgIkRlc2t0b3AgQXBwbGljYXRpb24iIHsKICAgICAgICAgIHRhZ3MgIkRlc2t0b3AiCiAgICAgICAgfQogICAgICB9CiAgICAgIGRpcmVjdG9yeV9jb25uZWN0b3IgPSBzb2Z0d2FyZVN5c3RlbSAiRGlyZWN0b3J5IENvbm5lY3RvciIgewogICAgICAgIHRhZ3MgIkRpcmVjdG9yeSIKICAgICAgICB0YWdzICJMREFQIgogICAgICAgIHRhZ3MgIlNlbGYtSG9zdGVkIgogICAgICB9CiAgICAgIGtleV9jb25uZWN0b3IgPSBzb2Z0d2FyZVN5c3RlbSAiS2V5IENvbm5lY3RvciIKICAgIH0KICAgIAogICAgc2VsZl9ob3N0ZWRfaW5zdGFuY2VzID0gc29mdHdhcmVTeXN0ZW0gIlNlbGYtSG9zdGVkIEluc3RhbmNlcyIgewogICAgICB0YWdzICJTZWxmLUhvc3RlZCIKICAgICAgdGFncyAiRXh0ZXJuYWwiCiAgICAgIGRlc2NyaXB0aW9uICJTZWxmLWhvc3RlZCBpbnN0YW5jZXMgb2YgQml0d2FyZGVuIHNlcnZlcnMiCiAgICB9CgogICAgIyBJbmNsdWRlIHRlYW0gbGV2ZWwgbW9kZWxzCiAgICBhZG1pbiA9IHBlcnNvbiAiT3JnYW5pemF0aW9uIEFkbWluIiAiQW4gYWRtaW5pc3RyYXRvciBvZiBhbiBvcmdhbml6YXRpb24iIHsKICAgICAgdGFncyAiQWRtaW4iCiAgICB9CiAgICBwcm92aWRlciA9IHBlcnNvbiAiTVNQIiAiQW5kIGVtcGxveWVlIG9mIGEgbWFuYWdlZCBzZXJ2aWNlIHByb3ZpZGVyIiB7CiAgICAgIHRhZ3MgIk1TUCIKICAgIH0KICAgIAogICAgIWVsZW1lbnQgc2VydmVyIHsKICAgICAgc2NpbSA9IGNvbnRhaW5lciAiU0NJTSIgewogICAgICAgIHRhZ3MgIlNDSU0iCiAgICAgIH0KICAgIH0KICAgIAogICAgZGlyZWN0b3J5X2Nvbm5lY3RvciAtPiBzZXJ2ZXIuYXBpICJTeW5jcyB1c2VycyBhbmQgZ3JvdXBzIHRvIEJpdHdhcmRlbiIKICAgICFlbGVtZW50IHNlcnZlciB7CiAgICAgIGlkZW50aXR5ID0gY29udGFpbmVyICJJZGVudGl0eSIgewogICAgICAgIHRhZ3MgIkF1dGgiCiAgICAgIH0KICAgICAgc3NvID0gY29udGFpbmVyICJTU08iIHsKICAgICAgICB0YWdzICJBdXRoIgogICAgICB9CiAgICB9CiAgICAjIEV4dGVybmFsIHZlbmRvcnMKICAgIGdyb3VwICJQYXltZW50IFN5c3RlbXMiIHsKICAgICAgc3RyaXBlID0gc29mdHdhcmVTeXN0ZW0gIlN0cmlwZSIgewogICAgICAgIHRhZ3MgIkV4dGVybmFsIgogICAgICAgIHRhZ3MgIkJpbGxpbmciCiAgICAgICAgZGVzY3JpcHRpb24gIkhhbmRsZXMgY3JlZGl0IGNhcmRzIGFuZCBzdWJzY3JpcHRpb25zLiIKICAgICAgfQogICAgICBicmFpbnRyZWUgPSBzb2Z0d2FyZVN5c3RlbSAiQnJhaW50cmVlIiB7CiAgICAgICAgdGFncyAiRXh0ZXJuYWwiCiAgICAgICAgdGFncyAiQmlsbGluZyIKICAgICAgICBkZXNjcmlwdGlvbiAiSGFuZGxlcyBQYXlQYWwgYW5kIGNyeXB0b2N1cnJlbmN5LiIKICAgICAgfQogICAgfQogICAgCiAgICAhZWxlbWVudCBzZXJ2ZXIgewogICAgICAgIGF6dXJlX3NlcnZpY2VfYnVzID0gY29udGFpbmVyICJBenVyZSBTZXJ2aWNlIEJ1cyIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQU1RUCBzZXJ2aWNlIHVzZWQgZm9yIHB1Yi9zdWIgYXJjaGl0ZWN0dXJlIGZvciBFdmVudHMgYW5kIEludGVncmF0aW9ucyIKICAgICAgICAgICAgdGFncyAiRXZlbnRzIiwgIkF6dXJlIiwgIkFTQiIsICJDbG91ZC1Pbmx5IgogICAgCiAgICAgICAgICAgIGV2ZW50X3RvcGljID0gY29tcG9uZW50ICJFdmVudCBUb3BpYyIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBhbGwgZXZlbnRzIGluIHRoZSBzeXN0ZW0uIFdoZW4gYW4gZXZlbnQgb2NjdXJzLCBpdCBpcyBwdWJsaXNoZWQgdG8gdGhpcyB0b3BpYy4iCiAgICAgICAgICAgICAgICB0YWdzICJFdmVudHMiLCAiQVNCIiwgIkV2ZW50IFRpZXIiCiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBpbnRlZ3JhdGlvbl90b3BpYyA9IGNvbXBvbmVudCAiSW50ZWdyYXRpb24gVG9waWMiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJFdmVudHMgdGhhdCBoYXZlIGludGVncmF0aW9ucyBjb25maWd1cmVkIGFyZSBwcm9jZXNzZWQgYW5kIHB1dCBvbiB0aGUgaW50ZWdyYXRpb24gdG9waWMgd2l0aCBhIHJvdXRpbmcga2V5IGZvciB0aGVpciBzcGVjaWZpYyBpbnRlZ3JhdGlvbiBoYW5kbGVyIHRvIHByb2Nlc3MuIgogICAgICAgICAgICAgICAgdGFncyAiRXZlbnRzIiwgIkFTQiIsICJJbnRlZ3JhdGlvbnMiLCAiSW50ZWdyYXRpb24gVGllciIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGV2ZW50c1dyaXRlU3ViID0gY29tcG9uZW50ICJldmVudHMtd3JpdGUtc3Vic2NyaXB0aW9uIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiU3Vic2NyaXB0aW9uIGZvciBFdmVudFJlcG9zaXRvcnlIYW5kbGVyIHRvIHdyaXRlIGFsbCBldmVudHMgaW50byBhenVyZSB0YWJsZSBzdG9yYWdlLiIKICAgICAgICAgICAgICAgIHRhZ3MgIkFTQiIsICJTdWJzY3JpcHRpb24iLCAiRXZlbnQgVGllciIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGV2ZW50c1NsYWNrU3ViID0gY29tcG9uZW50ICJldmVudHMtc2xhY2stc3Vic2NyaXB0aW9uIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiU3Vic2NyaXB0aW9uIGZvciBzbGFjay1zcGVjaWZpYyBFdmVudEludGVncmF0aW9uSGFuZGxlciB3aGljaCBwdWJsaXNoZXMgcHJvY2Vzc2VkIGV2ZW50cyB0byB0aGUgaW50ZWdyYXRpb24gdGllciBpZiB0aGVyZSBpcyBhIFNsYWNrIGludGVncmF0aW9uIGNvbmZpZ3VyZWQuIgogICAgICAgICAgICAgICAgdGFncyAiQVNCIiwgIlN1YnNjcmlwdGlvbiIsICJFdmVudCBUaWVyIiwgIlNsYWNrIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZXZlbnRzV2ViaG9va1N1YiA9IGNvbXBvbmVudCAiZXZlbnRzLXdlYmhvb2stc3Vic2NyaXB0aW9uIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiU3Vic2NyaXB0aW9uIGZvciB3ZWJob29rLXNwZWNpZmljIEV2ZW50SW50ZWdyYXRpb25IYW5kbGVyIHdoaWNoIHB1Ymxpc2hlcyBwcm9jZXNzZWQgZXZlbnRzIHRvIHRoZSBpbnRlZ3JhdGlvbiB0aWVyIGlmIHRoZXJlIGlzIGEgd2ViaG9vayBpbnRlZ3JhdGlvbiBjb25maWd1cmVkLiIKICAgICAgICAgICAgICAgIHRhZ3MgIkFTQiIsICJTdWJzY3JpcHRpb24iLCAiRXZlbnQgVGllciIsICJXZWJob29rIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZXZlbnRzSGVjU3ViID0gY29tcG9uZW50ICJldmVudHMtaGVjLXN1YnNjcmlwdGlvbiIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlN1YnNjcmlwdGlvbiBmb3IgSEVDLXNwZWNpZmljIEV2ZW50SW50ZWdyYXRpb25IYW5kbGVyIHdoaWNoIHB1Ymxpc2hlcyBwcm9jZXNzZWQgZXZlbnRzIHRvIHRoZSBpbnRlZ3JhdGlvbiB0aWVyIGlmIHRoZXJlIGlzIGEgSEVDIGludGVncmF0aW9uIGNvbmZpZ3VyZWQuIgogICAgICAgICAgICAgICAgdGFncyAiQVNCIiwgIlN1YnNjcmlwdGlvbiIsICJFdmVudCBUaWVyIiwgIkhFQyIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGV2ZW50c0RhdGFkb2dTdWIgPSBjb21wb25lbnQgImV2ZW50cy1kYXRhZG9nLXN1YnNjcmlwdGlvbiIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlN1YnNjcmlwdGlvbiBmb3IgRGF0YWRvZy1zcGVjaWZpYyBFdmVudEludGVncmF0aW9uSGFuZGxlciB3aGljaCBwdWJsaXNoZXMgcHJvY2Vzc2VkIGV2ZW50cyB0byB0aGUgaW50ZWdyYXRpb24gdGllciBpZiB0aGVyZSBpcyBhIERhdGFkb2cgaW50ZWdyYXRpb24gY29uZmlndXJlZC4iCiAgICAgICAgICAgICAgICB0YWdzICJBU0IiLCAiU3Vic2NyaXB0aW9uIiwgIkV2ZW50IFRpZXIiLCAiRGF0YWRvZyIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGV2ZW50c1RlYW1zU3ViID0gY29tcG9uZW50ICJldmVudHMtdGVhbXMtc3Vic2NyaXB0aW9uIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiU3Vic2NyaXB0aW9uIGZvciBNaWNyb3NvZnQgVGVhbXMtc3BlY2lmaWMgRXZlbnRJbnRlZ3JhdGlvbkhhbmRsZXIgd2hpY2ggcHVibGlzaGVzIHByb2Nlc3NlZCBldmVudHMgdG8gdGhlIGludGVncmF0aW9uIHRpZXIgaWYgdGhlcmUgaXMgYSBUZWFtcyBpbnRlZ3JhdGlvbiBjb25maWd1cmVkLiIKICAgICAgICAgICAgICAgIHRhZ3MgIkFTQiIsICJTdWJzY3JpcHRpb24iLCAiRXZlbnQgVGllciIsICJUZWFtcyIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGludGVncmF0aW9uU2xhY2tTdWIgPSBjb21wb25lbnQgImludGVncmF0aW9uLXNsYWNrLXN1YnNjcmlwdGlvbiIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkludGVncmF0aW9uLWxldmVsIHN1YnNjcmlwdGlvbiBmb3IgU2xhY2sgSW50ZWdyYXRpb25NZXNzYWdlcy4gQ29ycmVsYXRpb24gZmlsdGVyOiBMYWJlbCA9ICdzbGFjaycuIgogICAgICAgICAgICAgICAgdGFncyAiQVNCIiwgIlN1YnNjcmlwdGlvbiIsICJJbnRlZ3JhdGlvbiBUaWVyIiwgIlNsYWNrIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgaW50ZWdyYXRpb25XZWJob29rU3ViID0gY29tcG9uZW50ICJpbnRlZ3JhdGlvbi13ZWJob29rLXN1YnNjcmlwdGlvbiIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkludGVncmF0aW9uLWxldmVsIHN1YnNjcmlwdGlvbiBmb3IgV2ViaG9vayBJbnRlZ3JhdGlvbk1lc3NhZ2VzLiBDb3JyZWxhdGlvbiBmaWx0ZXI6IExhYmVsID0gJ3dlYmhvb2snLiIKICAgICAgICAgICAgICAgIHRhZ3MgIkFTQiIsICJTdWJzY3JpcHRpb24iLCAiSW50ZWdyYXRpb24gVGllciIsICJXZWJob29rIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgaW50ZWdyYXRpb25IZWNTdWIgPSBjb21wb25lbnQgImludGVncmF0aW9uLWhlYy1zdWJzY3JpcHRpb24iIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbnRlZ3JhdGlvbi1sZXZlbCBzdWJzY3JpcHRpb24gZm9yIEhFQyBJbnRlZ3JhdGlvbk1lc3NhZ2VzLiBDb3JyZWxhdGlvbiBmaWx0ZXI6IExhYmVsID0gJ2hlYycuIgogICAgICAgICAgICAgICAgdGFncyAiQVNCIiwgIlN1YnNjcmlwdGlvbiIsICJJbnRlZ3JhdGlvbiBUaWVyIiwgIkhFQyIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGludGVncmF0aW9uRGF0YWRvZ1N1YiA9IGNvbXBvbmVudCAiaW50ZWdyYXRpb24tZGF0YWRvZy1zdWJzY3JpcHRpb24iIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbnRlZ3JhdGlvbi1sZXZlbCBzdWJzY3JpcHRpb24gZm9yIERhdGFkb2cgSW50ZWdyYXRpb25NZXNzYWdlcy4gQ29ycmVsYXRpb24gZmlsdGVyOiBMYWJlbCA9ICdkYXRhZG9nJy4iCiAgICAgICAgICAgICAgICB0YWdzICJBU0IiLCAiU3Vic2NyaXB0aW9uIiwgIkludGVncmF0aW9uIFRpZXIiLCAiRGF0YWRvZyIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGludGVncmF0aW9uVGVhbXNTdWIgPSBjb21wb25lbnQgImludGVncmF0aW9uLXRlYW1zLXN1YnNjcmlwdGlvbiIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkludGVncmF0aW9uLWxldmVsIHN1YnNjcmlwdGlvbiBmb3IgTWlvY3Jvc29mdCBUZWFtcyBJbnRlZ3JhdGlvbk1lc3NhZ2VzLiBDb3JyZWxhdGlvbiBmaWx0ZXI6IExhYmVsID0gJ3RlYW1zJy4iCiAgICAgICAgICAgICAgICB0YWdzICJBU0IiLCAiU3Vic2NyaXB0aW9uIiwgIkludGVncmF0aW9uIFRpZXIiLCAiVGVhbXMiCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAKICAgICAgICByYWJiaXRfbXEgPSBjb250YWluZXIgIlJhYmJpdE1RIiB7CiAgICAgICAgICAgIHRhZ3MgIkV2ZW50cyIKICAgICAgICAgICAgdGFncyAiUmFiYml0TVEiCiAgICAgICAgICAgIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICAKICAgICAgICAgICAgZXZlbnRfZXhjaGFuZ2UgPSBjb21wb25lbnQgIkV2ZW50IEV4Y2hhbmdlIiB7CiAgICAgICAgICAgICAgICB0YWdzICJFdmVudHMiLCAiRXZlbnQgVGllciIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGludGVncmF0aW9uX2V4Y2hhbmdlID0gY29tcG9uZW50ICJJbnRlZ3JhdGlvbiBFeGNoYW5nZSIgewogICAgICAgICAgICAgICAgdGFncyAiRXZlbnRzIiwgIkludGVncmF0aW9ucyIsICJJbnRlZ3JhdGlvbiBUaWVyIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZXZlbnRzV3JpdGVRdWV1ZSA9IGNvbXBvbmVudCAiZXZlbnRzLXdyaXRlLXF1ZXVlIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUXVldWUgZm9yIEV2ZW50UmVwb3NpdG9yeUhhbmRsZXIgdG8gd3JpdGUgYWxsIGV2ZW50cyBpbnRvIHRoZSBkYXRhYmFzZS4iCiAgICAgICAgICAgICAgICB0YWdzICJSYWJiaXRNUSIsICJRdWV1ZSIsICJFdmVudCBUaWVyIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZXZlbnRzU2xhY2tRdWV1ZSA9IGNvbXBvbmVudCAiZXZlbnRzLXNsYWNrLXF1ZXVlIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUXVldWUgZm9yIHNsYWNrLXNwZWNpZmljIEV2ZW50SW50ZWdyYXRpb25IYW5kbGVyIHdoaWNoIHB1Ymxpc2hlcyBwcm9jZXNzZWQgZXZlbnRzIHRvIHRoZSBpbnRlZ3JhdGlvbiB0aWVyIGlmIHRoZXJlIGlzIGEgU2xhY2sgaW50ZWdyYXRpb24gY29uZmlndXJlZC4iCiAgICAgICAgICAgICAgICB0YWdzICJSYWJiaXRNUSIsICJRdWV1ZSIsICJFdmVudCBUaWVyIiwgIlNsYWNrIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZXZlbnRzV2ViaG9va1F1ZXVlID0gY29tcG9uZW50ICJldmVudHMtd2ViaG9vay1xdWV1ZSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlF1ZXVlIGZvciB3ZWJob29rLXNwZWNpZmljIEV2ZW50SW50ZWdyYXRpb25IYW5kbGVyIHdoaWNoIHB1Ymxpc2hlcyBwcm9jZXNzZWQgZXZlbnRzIHRvIHRoZSBpbnRlZ3JhdGlvbiB0aWVyIGlmIHRoZXJlIGlzIGEgd2ViaG9vayBpbnRlZ3JhdGlvbiBjb25maWd1cmVkLiIKICAgICAgICAgICAgICAgIHRhZ3MgIlJhYmJpdE1RIiwgIlF1ZXVlIiwgIkV2ZW50IFRpZXIiLCAiV2ViaG9vayIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGV2ZW50c0hlY1F1ZXVlID0gY29tcG9uZW50ICJldmVudHMtaGVjLXF1ZXVlIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUXVldWUgZm9yIEhFQy1zcGVjaWZpYyBFdmVudEludGVncmF0aW9uSGFuZGxlciB3aGljaCBwdWJsaXNoZXMgcHJvY2Vzc2VkIGV2ZW50cyB0byB0aGUgaW50ZWdyYXRpb24gdGllciBpZiB0aGVyZSBpcyBhIEhFQyBpbnRlZ3JhdGlvbiBjb25maWd1cmVkLiIKICAgICAgICAgICAgICAgIHRhZ3MgIlJhYmJpdE1RIiwgIlF1ZXVlIiwgIkV2ZW50IFRpZXIiLCAiSEVDIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZXZlbnRzRGF0YWRvZ1F1ZXVlID0gY29tcG9uZW50ICJldmVudHMtZGF0YWRvZy1xdWV1ZSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlF1ZXVlIGZvciBEYXRhZG9nLXNwZWNpZmljIEV2ZW50SW50ZWdyYXRpb25IYW5kbGVyIHdoaWNoIHB1Ymxpc2hlcyBwcm9jZXNzZWQgZXZlbnRzIHRvIHRoZSBpbnRlZ3JhdGlvbiB0aWVyIGlmIHRoZXJlIGlzIGEgRGF0YWRvZyBpbnRlZ3JhdGlvbiBjb25maWd1cmVkLiIKICAgICAgICAgICAgICAgIHRhZ3MgIlJhYmJpdE1RIiwgIlF1ZXVlIiwgIkV2ZW50IFRpZXIiLCAiRGF0YWRvZyIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGV2ZW50c1RlYW1zUXVldWUgPSBjb21wb25lbnQgImV2ZW50cy10ZWFtcy1xdWV1ZSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlF1ZXVlIGZvciBNaWNyb3NvZnQgVGVhbXMtc3BlY2lmaWMgRXZlbnRJbnRlZ3JhdGlvbkhhbmRsZXIgd2hpY2ggcHVibGlzaGVzIHByb2Nlc3NlZCBldmVudHMgdG8gdGhlIGludGVncmF0aW9uIHRpZXIgaWYgdGhlcmUgaXMgYSBUZWFtcyBpbnRlZ3JhdGlvbiBjb25maWd1cmVkLiIKICAgICAgICAgICAgICAgIHRhZ3MgIlJhYmJpdE1RIiwgIlF1ZXVlIiwgIkV2ZW50IFRpZXIiLCAiVGVhbXMiCiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBpbnRlZ3JhdGlvblNsYWNrUXVldWUgPSBjb21wb25lbnQgImludGVncmF0aW9uLXNsYWNrLXF1ZXVlIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSW50ZWdyYXRpb24tbGV2ZWwgcXVldWUgZm9yIFNsYWNrIEludGVncmF0aW9uTWVzc2FnZXMuIFJvdXRpbmcga2V5ID0gJ3NsYWNrJy4iCiAgICAgICAgICAgICAgICB0YWdzICJSYWJiaXRNUSIsICJRdWV1ZSIsICJJbnRlZ3JhdGlvbiBUaWVyIiwgIlNsYWNrIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgaW50ZWdyYXRpb25XZWJob29rUXVldWUgPSBjb21wb25lbnQgImludGVncmF0aW9uLXdlYmhvb2stcXVldWUiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbnRlZ3JhdGlvbi1sZXZlbCBxdWV1ZSBmb3IgV2ViaG9vayBJbnRlZ3JhdGlvbk1lc3NhZ2VzLiBSb3V0aW5nIGtleSA9ICd3ZWJob29rJy4iCiAgICAgICAgICAgICAgICB0YWdzICJSYWJiaXRNUSIsICJRdWV1ZSIsICJJbnRlZ3JhdGlvbiBUaWVyIiwgIldlYmhvb2siCiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBpbnRlZ3JhdGlvbkhlY1F1ZXVlID0gY29tcG9uZW50ICJpbnRlZ3JhdGlvbi1oZWMtcXVldWUiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbnRlZ3JhdGlvbi1sZXZlbCBxdWV1ZSBmb3IgSEVDIEludGVncmF0aW9uTWVzc2FnZXMuIFJvdXRpbmcga2V5ID0gJ2hlYycuIgogICAgICAgICAgICAgICAgdGFncyAiUmFiYml0TVEiLCAiUXVldWUiLCAiSW50ZWdyYXRpb24gVGllciIsICJIRUMiCiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBpbnRlZ3JhdGlvbkRhdGFkb2dRdWV1ZSA9IGNvbXBvbmVudCAiaW50ZWdyYXRpb24tZGF0YWRvZy1xdWV1ZSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkludGVncmF0aW9uLWxldmVsIHF1ZXVlIGZvciBEYXRhZG9nIEludGVncmF0aW9uTWVzc2FnZXMuIFJvdXRpbmcga2V5ID0gJ2RhdGFkb2cnLiIKICAgICAgICAgICAgICAgIHRhZ3MgIlJhYmJpdE1RIiwgIlF1ZXVlIiwgIkludGVncmF0aW9uIFRpZXIiLCAiRGF0YWRvZyIKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGludGVncmF0aW9uVGVhbXNRdWV1ZSA9IGNvbXBvbmVudCAiaW50ZWdyYXRpb24tdGVhbXMtcXVldWUiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbnRlZ3JhdGlvbi1sZXZlbCBxdWV1ZSBmb3IgVGVhbXMgSW50ZWdyYXRpb25NZXNzYWdlcy4gUm91dGluZyBrZXkgPSAndGVhbXMnLiIKICAgICAgICAgICAgICAgIHRhZ3MgIlJhYmJpdE1RIiwgIlF1ZXVlIiwgIkludGVncmF0aW9uIFRpZXIiLCAiVGVhbXMiCiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBpbnRlZ3JhdGlvblNsYWNrUmV0cnlRdWV1ZSA9IGNvbXBvbmVudCAiaW50ZWdyYXRpb24tc2xhY2stcmV0cnktcXVldWUiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbnRlZ3JhdGlvbi1sZXZlbCByZXRyeSBxdWV1ZSBmb3IgU2xhY2sgSW50ZWdyYXRpb25NZXNzYWdlcy4gUm91dGluZyBrZXkgTGFiZWwgPSAnc2xhY2stcmV0cnknLiIKICAgICAgICAgICAgICAgIHRhZ3MgIlJhYmJpdE1RIiwgIlF1ZXVlIiwgIkludGVncmF0aW9uIFRpZXIiLCAiU2xhY2siCiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBpbnRlZ3JhdGlvbldlYmhvb2tSZXRyeVF1ZXVlID0gY29tcG9uZW50ICJpbnRlZ3JhdGlvbi13ZWJob29rLXJldHJ5LXF1ZXVlIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSW50ZWdyYXRpb24tbGV2ZWwgcmV0cnkgcXVldWUgZm9yIFdlYmhvb2sgSW50ZWdyYXRpb25NZXNzYWdlcy4gUm91dGluZyBrZXkgPSAnd2ViaG9vay1yZXRyeScuIgogICAgICAgICAgICAgICAgdGFncyAiUmFiYml0TVEiLCAiUXVldWUiLCAiSW50ZWdyYXRpb24gVGllciIsICJXZWJob29rIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgaW50ZWdyYXRpb25IZWNSZXRyeVF1ZXVlID0gY29tcG9uZW50ICJpbnRlZ3JhdGlvbi1oZWMtcmV0cnktcXVldWUiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbnRlZ3JhdGlvbi1sZXZlbCByZXRyeSBxdWV1ZSBmb3IgSEVDIEludGVncmF0aW9uTWVzc2FnZXMuIFJvdXRpbmcga2V5ID0gJ2hlYy1yZXRyeScuIgogICAgICAgICAgICAgICAgdGFncyAiUmFiYml0TVEiLCAiUXVldWUiLCAiSW50ZWdyYXRpb24gVGllciIsICJIRUMiCiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBpbnRlZ3JhdGlvbkRhdGFkb2dSZXRyeVF1ZXVlID0gY29tcG9uZW50ICJpbnRlZ3JhdGlvbi1kYXRhZG9nLXJldHJ5LXF1ZXVlIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSW50ZWdyYXRpb24tbGV2ZWwgcmV0cnkgcXVldWUgZm9yIERhdGFkb2cgSW50ZWdyYXRpb25NZXNzYWdlcy4gUm91dGluZyBrZXkgPSAnZGF0YWRvZy1yZXRyeScuIgogICAgICAgICAgICAgICAgdGFncyAiUmFiYml0TVEiLCAiUXVldWUiLCAiSW50ZWdyYXRpb24gVGllciIsICJEYXRhZG9nIgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgaW50ZWdyYXRpb25UZWFtc1JldHJ5UXVldWUgPSBjb21wb25lbnQgImludGVncmF0aW9uLXRlYW1zLXJldHJ5LXF1ZXVlIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSW50ZWdyYXRpb24tbGV2ZWwgcmV0cnkgcXVldWUgZm9yIFRlYW1zIEludGVncmF0aW9uTWVzc2FnZXMuIFJvdXRpbmcga2V5ID0gJ3RlYW1zLXJldHJ5Jy4iCiAgICAgICAgICAgICAgICB0YWdzICJSYWJiaXRNUSIsICJRdWV1ZSIsICJJbnRlZ3JhdGlvbiBUaWVyIiwgIlRlYW1zIgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICAhZWxlbWVudCBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3NvciB7CiAgICAgICAgdGFncyAiQ2xvdWQtT25seSIKICAgIAogICAgICAgIGV2ZW50X3JlcG9zaXRvcnlfaGFuZGxlciA9IGNvbXBvbmVudCAiRXZlbnRSZXBvc2l0b3J5SGFuZGxlciIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiSGFuZGxlcyBhbGwgZXZlbnRzLCBwYXNzaW5nIHRoZW0gb2ZmIHRvIHRoZSBJRXZlbnRXcml0ZVNlcnZpY2Ugd2l0aCB0aGUgYHBlcnNpc3RlbnRgIGtleSBmb3IgbG9uZyB0ZXJtIHN0b3JhZ2UuIgogICAgICAgIH0KICAgICAgICBldmVudF9saXN0ZW5lciA9IGNvbXBvbmVudCAiQXp1cmVTZXJ2aWNlQnVzRXZlbnRMaXN0ZW5lclNlcnZpY2UiIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxpc3RlbnMgdG8gYSBzcGVjaWZpYyBzdWJzY3JpcHRpb24gYW5kIHBhc3NlcyBvZmYgdG8gYSBoYW5kbGVyIHRvIGhhbmRsZSBldmVudHMiCiAgICAgICAgfQogICAgICAgIGludGVncmF0aW9uX2xpc3RlbmVyID0gY29tcG9uZW50ICJBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbkxpc3RlbmVyU2VydmljZSIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdGVucyB0byBhIHNwZWNpZmljIHN1YnNjcmlwdGlvbiBhbmQgcGFzc2VzIG9mZiB0byBhIGhhbmRsZXIgdG8gaGFuZGxlIEludGVncmF0aW9uTWVzc2FnZXMiCiAgICAgICAgfQogICAgICAgIGV2ZW50X2ludGVncmF0aW9uX2hhbmRsZXIgPSBjb21wb25lbnQgIkV2ZW50SW50ZWdyYXRpb25IYW5kbGVyIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJGZXRjaGVzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB3aGVuIGFuIGV2ZW50IGNvbWVzIGluIGFuZCBoYW5kcyB0aGUgZXZlbnQgdG8gaXRzIHBhaXJlZCBpbnRlZ3JhdGlvbiBoYW5kbGVyIGZvciBwcm9jZXNzaW5nLiIKICAgICAgICB9CiAgICAgICAgc2xhY2tfaW50ZWdyYXRpb25faGFuZGxlciA9IGNvbXBvbmVudCAiU2xhY2tJbnRlZ3JhdGlvbkhhbmRsZXIiIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlByb2Nlc3NlcyBTbGFjayBJbnRlZ3JhdGlvbk1lc3NhZ2VzLCBwb3N0aW5nIHRoZW0gdG8gdGhlIGNvbmZpZ3VyZWQgY2hhbm5lbHMuIgogICAgICAgIH0KICAgICAgICB0ZWFtc19pbnRlZ3JhdGlvbl9oYW5kbGVyID0gY29tcG9uZW50ICJUZWFtc0ludGVncmF0aW9uSGFuZGxlciIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiUHJvY2Vzc2VzIFRlYW1zIEludGVncmF0aW9uTWVzc2FnZXMsIHBvc3RpbmcgdGhlbSB0byB0aGUgY29uZmlndXJlZCBjaGFubmVscy4iCiAgICAgICAgfQogICAgICAgIGRhdGFkb2dfaW50ZWdyYXRpb25faGFuZGxlciA9IGNvbXBvbmVudCAiRGF0YWRvZ0ludGVncmF0aW9uSGFuZGxlciIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiUHJvY2Vzc2VzIERhdGFkb2cgSW50ZWdyYXRpb25NZXNzYWdlcywgcG9zdGluZyB0aGVtIHRvIHRoZSBjb25maWd1cmVkIFVSSS4iCiAgICAgICAgfQogICAgICAgIHdlYmhvb2tfaW50ZWdyYXRpb25faGFuZGxlciA9IGNvbXBvbmVudCAiV2ViaG9va0ludGVncmF0aW9uSGFuZGxlciIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiUHJvY2Vzc2VzIFdlYmhvb2sgYW5kIEhFQyBJbnRlZ3JhdGlvbk1lc3NhZ2VzLCBwb3N0aW5nIHRoZW0gdG8gdGhlIGNvbmZpZ3VyZWQgVVJJLiIKICAgICAgICB9CiAgICAgICAgZXZlbnRfaW50ZWdyYXRpb25zX2V4dGVuZGVkX2NhY2hlID0gY29tcG9uZW50ICJFdmVudEludGVncmF0aW9uc0V4dGVuZGVkQ2FjaGUiIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkNhY2hlcyBhbGwgY29uZmlndXJhdGlvbnMgZm9yIGludGVncmF0aW9ucyBzbyB0aGF0IGV2ZW50cyBjYW4gYmUgaGFuZGxlZCB3aXRob3V0IGFkZGluZyBkYXRhYmFzZSBsb2FkLiIKICAgICAgICB9CiAgICAgICAgc2xhY2tfc2VydmljZSA9IGNvbXBvbmVudCAiU2xhY2tTZXJ2aWNlIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJIYW5kbGVzIGFsbCBBUEkgaW50ZXJhY3Rpb24gd2l0aCBTbGFjay4iCiAgICAgICAgfQogICAgICAgIHRlYW1zX3NlcnZpY2UgPSBjb21wb25lbnQgIlRlYW1zU2VydmljZSIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiSGFuZGxlcyBhbGwgQVBJIGludGVyYWN0aW9uIHdpdGggVGVhbXMuIgogICAgICAgIH0KICAgICAgICBodHRwX2NsaWVudCA9IGNvbXBvbmVudCAiSHR0cENsaWVudCIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiUGVyZm9ybXMgYW55IEhUVFAgZnVuY3Rpb25zIGZvciBEYXRhZG9nIC8gV2ViaG9va3MgLyBIRUMuIgogICAgICAgIH0KICAgICAgICBpbnRlZ3JhdGlvbl9maWx0ZXJfc2VydmljZSA9IGNvbXBvbmVudCAiSW50ZWdyYXRpb25GaWx0ZXJTZXJ2aWNlIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQcm9jZXNzZXMgZmlsdGVycyBmcm9tIGNvbmZpZ3VyYXRpb25zIHRvIGRldGVybWluZSBpZiBhbiBldmVudCBzaG91bGQgYmUgcHJvY2Vzc2VkIG91dCB0byB0aGUgaW50ZWdyYXRpb24uIgogICAgICAgIH0KICAgIH0KICAgIAogICAgIWVsZW1lbnQgc2VydmVyLmV2ZW50cyB7CiAgICAgICAgZXZlbnRfbGlzdGVuZXIgPSBjb21wb25lbnQgIlJhYmJpdE1xRXZlbnRMaXN0ZW5lclNlcnZpY2UiIHsKICAgICAgICAgICAgdGFncyAiU2VsZi1Ib3N0ZWQtT25seSIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxpc3RlbnMgdG8gYSBzcGVjaWZpYyBxdWV1ZSBhbmQgcGFzc2VzIG9mZiB0byBhIGhhbmRsZXIgdG8gaGFuZGxlIGV2ZW50cyIKICAgICAgICB9CiAgICAgICAgaW50ZWdyYXRpb25fbGlzdGVuZXIgPSBjb21wb25lbnQgIlJhYmJpdE1xSW50ZWdyYXRpb25MaXN0ZW5lclNlcnZpY2UiIHsKICAgICAgICAgICAgdGFncyAiU2VsZi1Ib3N0ZWQtT25seSIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxpc3RlbnMgdG8gYSBzcGVjaWZpYyBxdWV1ZSBhbmQgcGFzc2VzIG9mZiB0byBhIGhhbmRsZXIgdG8gaGFuZGxlIEludGVncmF0aW9uTWVzc2FnZXMiCiAgICAgICAgfQogICAgICAgIGV2ZW50X3JlcG9zaXRvcnlfaGFuZGxlciA9IGNvbXBvbmVudCAiRXZlbnRSZXBvc2l0b3J5SGFuZGxlciIgewogICAgICAgICAgICB0YWdzICJTZWxmLUhvc3RlZC1Pbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbiAiSGFuZGxlcyBhbGwgZXZlbnRzLCBwYXNzaW5nIHRoZW0gb2ZmIHRvIHRoZSBJRXZlbnRXcml0ZVNlcnZpY2Ugd2l0aCB0aGUgYHBlcnNpc3RlbnRgIGtleSBmb3IgbG9uZyB0ZXJtIHN0b3JhZ2UuIgogICAgICAgIH0KICAgICAgICBldmVudF9pbnRlZ3JhdGlvbl9oYW5kbGVyID0gY29tcG9uZW50ICJFdmVudEludGVncmF0aW9uSGFuZGxlciIgewogICAgICAgICAgICB0YWdzICJTZWxmLUhvc3RlZC1Pbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbiAiRmV0Y2hlcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2hlbiBhbiBldmVudCBjb21lcyBpbiBhbmQgaGFuZHMgdGhlIGV2ZW50IHRvIGl0cyBwYWlyZWQgaW50ZWdyYXRpb24gaGFuZGxlciBmb3IgcHJvY2Vzc2luZy4iCiAgICAgICAgfQogICAgICAgIHNsYWNrX2ludGVncmF0aW9uX2hhbmRsZXIgPSBjb21wb25lbnQgIlNsYWNrSW50ZWdyYXRpb25IYW5kbGVyIiB7CiAgICAgICAgICAgIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQcm9jZXNzZXMgU2xhY2sgSW50ZWdyYXRpb25NZXNzYWdlcywgcG9zdGluZyB0aGVtIHRvIHRoZSBjb25maWd1cmVkIGNoYW5uZWxzLiIKICAgICAgICB9CiAgICAgICAgdGVhbXNfaW50ZWdyYXRpb25faGFuZGxlciA9IGNvbXBvbmVudCAiVGVhbXNJbnRlZ3JhdGlvbkhhbmRsZXIiIHsKICAgICAgICAgICAgdGFncyAiU2VsZi1Ib3N0ZWQtT25seSIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlByb2Nlc3NlcyBUZWFtcyBJbnRlZ3JhdGlvbk1lc3NhZ2VzLCBwb3N0aW5nIHRoZW0gdG8gdGhlIGNvbmZpZ3VyZWQgY2hhbm5lbHMuIgogICAgICAgIH0KICAgICAgICBkYXRhZG9nX2ludGVncmF0aW9uX2hhbmRsZXIgPSBjb21wb25lbnQgIkRhdGFkb2dJbnRlZ3JhdGlvbkhhbmRsZXIiIHsKICAgICAgICAgICAgdGFncyAiU2VsZi1Ib3N0ZWQtT25seSIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlByb2Nlc3NlcyBEYXRhZG9nIEludGVncmF0aW9uTWVzc2FnZXMsIHBvc3RpbmcgdGhlbSB0byB0aGUgY29uZmlndXJlZCBVUkkuIgogICAgICAgIH0KICAgICAgICB3ZWJob29rX2ludGVncmF0aW9uX2hhbmRsZXIgPSBjb21wb25lbnQgIldlYmhvb2tJbnRlZ3JhdGlvbkhhbmRsZXIiIHsKICAgICAgICAgICAgdGFncyAiU2VsZi1Ib3N0ZWQtT25seSIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlByb2Nlc3NlcyBXZWJob29rIGFuZCBIRUMgSW50ZWdyYXRpb25NZXNzYWdlcywgcG9zdGluZyB0aGVtIHRvIHRoZSBjb25maWd1cmVkIFVSSS4iCiAgICAgICAgfQogICAgICAgIGV2ZW50X2ludGVncmF0aW9uc19leHRlbmRlZF9jYWNoZSA9IGNvbXBvbmVudCAiRXZlbnRJbnRlZ3JhdGlvbnNFeHRlbmRlZENhY2hlIiB7CiAgICAgICAgICAgIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJDYWNoZXMgYWxsIGNvbmZpZ3VyYXRpb25zIGZvciBpbnRlZ3JhdGlvbnMgaW4gbWVtb3J5IHNvIHRoYXQgZXZlbnRzIGNhbiBiZSBoYW5kbGVkIHdpdGhvdXQgYWRkaW5nIGRhdGFiYXNlIGxvYWQuIgogICAgICAgIH0KICAgICAgICBzbGFja19zZXJ2aWNlID0gY29tcG9uZW50ICJTbGFja1NlcnZpY2UiIHsKICAgICAgICAgICAgdGFncyAiU2VsZi1Ib3N0ZWQtT25seSIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkhhbmRsZXMgYWxsIEFQSSBpbnRlcmFjdGlvbiB3aXRoIFNsYWNrLiIKICAgICAgICB9CiAgICAgICAgdGVhbXNfc2VydmljZSA9IGNvbXBvbmVudCAiVGVhbXNTZXJ2aWNlIiB7CiAgICAgICAgICAgIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJIYW5kbGVzIGFsbCBBUEkgaW50ZXJhY3Rpb24gd2l0aCBUZWFtcy4iCiAgICAgICAgfQogICAgICAgIGh0dHBfY2xpZW50ID0gY29tcG9uZW50ICJIdHRwQ2xpZW50IiB7CiAgICAgICAgICAgIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQZXJmb3JtcyBhbnkgSHR0cCBmdW5jdGlvbnMgZm9yIERhdGFkb2cgLyBXZWJob29rcyAvIEhFQy4iCiAgICAgICAgfQogICAgICAgIGludGVncmF0aW9uX2ZpbHRlcl9zZXJ2aWNlID0gY29tcG9uZW50ICJJbnRlZ3JhdGlvbkZpbHRlclNlcnZpY2UiIHsKICAgICAgICAgICAgdGFncyAiU2VsZi1Ib3N0ZWQtT25seSIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlByb2Nlc3NlcyBmaWx0ZXJzIGZyb20gY29uZmlndXJhdGlvbnMgdG8gZGV0ZXJtaW5lIGlmIGFuIGV2ZW50IHNob3VsZCBiZSBwcm9jZXNzZWQgb3V0IHRvIHRoZSBpbnRlZ3JhdGlvbi4iCiAgICAgICAgfQogICAgfQogICAgCiAgICBleHRlcm5hbF9zZXJ2aWNlcyA9IHNvZnR3YXJlU3lzdGVtICJFeHRlcm5hbCBTZXJ2aWNlcyIgewogICAgICAgIHRhZ3MgIkV4dGVybmFsIiwgIkV2ZW50cyIsICJJbnRlZ3JhdGlvbnMiCiAgICAgICAgZGVzY3JpcHRpb24gIkV4dGVybmFsIHNlcnZpY2VzIChlLmcuIFNJRU0sIFNsYWNrLCBldCBhbCkgdGhhdCBjb25zdW1lIGV2ZW50cyB2aWEgaW50ZWdyYXRpb25zIgogICAgCiAgICAgICAgc2xhY2sgPSBjb250YWluZXIgIlNsYWNrIiB7CiAgICAgICAgICAgIHRhZ3MgIkV4dGVybmFsIiwgIkV2ZW50cyIsICJJbnRlZ3JhdGlvbnMiLCAiU2xhY2siCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTbGFjayBtZXNzYWdpbmcgc2VydmljZS4gUmVjZWl2ZXMgbWVzc2FnZXMgdmlhIGNvbmZpZ3VyZWQgZXZlbnQgaW50ZWdyYXRpb25zLiIKICAgICAgICB9CiAgICAKICAgICAgICB0ZWFtcyA9IGNvbnRhaW5lciAiVGVhbXMiIHsKICAgICAgICAgICAgdGFncyAiRXh0ZXJuYWwiLCAiRXZlbnRzIiwgIkludGVncmF0aW9ucyIsICJUZWFtcyIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1pY3Jvc29mdCBUZWFtcyBtZXNzYWdpbmcgc2VydmljZS4gUmVjZWl2ZXMgbWVzc2FnZXMgdmlhIGNvbmZpZ3VyZWQgZXZlbnQgaW50ZWdyYXRpb25zLiIKICAgICAgICB9CiAgICAKICAgICAgICBzcGx1bmsgPSBjb250YWluZXIgIlNwbHVuayIgewogICAgICAgICAgICB0YWdzICJFeHRlcm5hbCIsICJFdmVudHMiLCAiSW50ZWdyYXRpb25zIiwgIlNwbHVuayIKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlNwbHVuayBTSUVNIHNlcnZpY2UuIFJlY2VpdmVzIGV2ZW50cyB2aWEgY29uZmlndXJlZCBldmVudCBpbnRlZ3JhdGlvbnMuIgogICAgICAgIH0KICAgIAogICAgICAgIGRhdGFkb2cgPSBjb250YWluZXIgIkRhdGFkb2ciIHsKICAgICAgICAgICAgdGFncyAiRXh0ZXJuYWwiLCAiRXZlbnRzIiwgIkludGVncmF0aW9ucyIsICJEYXRhZG9nIgogICAgICAgICAgICBkZXNjcmlwdGlvbiAiRGF0YWRvZyBTSUVNIHNlcnZpY2UuIFJlY2VpdmVzIGV2ZW50cyB2aWEgY29uZmlndXJlZCBldmVudCBpbnRlZ3JhdGlvbnMuIgogICAgICAgIH0KICAgIAogICAgICAgIGNyb3dkc3RyaWtlID0gY29udGFpbmVyICJDcm93ZHN0cmlrZSBGYWxjb24iIHsKICAgICAgICAgICAgdGFncyAiRXh0ZXJuYWwiLCAiRXZlbnRzIiwgIkludGVncmF0aW9ucyIsICJDcm93ZHN0cmlrZSBGYWxjb24iLCAiQ3Jvd2RzdHJpa2UiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJDcm93ZHN0cmlrZSBGYWxjb24gU0lFTSBzZXJ2aWNlLiBSZWNlaXZlcyBldmVudHMgdmlhIGNvbmZpZ3VyZWQgZXZlbnQgaW50ZWdyYXRpb25zLiIKICAgICAgICB9CiAgICB9CiAgICAhZWxlbWVudCBzZXJ2ZXIgewogICAgICBpY29ucyA9IGNvbnRhaW5lciAiSWNvbnMiIHsKICAgICAgICAhZG9jcyAidGhyZWF0X21vZGVsLm1kIgogICAgICAgIGljb25zX2NvbnRyb2xsZXIgPSBjb21wb25lbnQgIkljb25zQ29udHJvbGxlciIgewogICAgICAgICAgZGVzY3JpcHRpb24gIkljb25zQ29udHJvbGxlciIKICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIEFTUC5ORVQgQ29yZSIKICAgICAgICAgIAogICAgICAgIH0KICAgICAgICBpbmZvX2NvbnRyb2xsZXIgPSBjb21wb25lbnQgIkluZm9Db250cm9sbGVyIiB7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRlcGxveWVkIGljb24gc2VydmljZS4gQWxsb3cgZm9yIGhlYWx0aCBjaGVja3MuIgogICAgICAgICAgdGVjaG5vbG9neSAiQyMgQVNQLk5FVCBDb3JlIgogICAgICAgICAgdGFncyAiSW5mbyIgIkhlYWx0aENoZWNrIgogICAgICAgIH0KICAgICAgICBpY29uX2RldGVybWluYXRpb24gPSBjb21wb25lbnQgIkljb25EZXRlcm1pbmF0aW9uIiB7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiUmVzb2x2ZXMgYSBzaW5nbGUgc291cmNlIGZvciBhIHdlYnNpdGUgaWNvbiBhbmQgZG93bmxvYWRzIGl0LiIKICAgICAgICB9CiAgICAgICAgaWNvbl9jYWNoZSA9IGNvbXBvbmVudCAiSWNvbkNhY2hlIiB7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2FjaGVzIGljb25zIGZvciBhIGdpdmVuIGRvbWFpbiIKICAgICAgICAgIHRhZ3MgIkNhY2hlIgogICAgICAgICAgdGVjaG5vbG9neSAiQyMgTWVtb3J5Q2FjaGUiCiAgICAgICAgfQogICAgCiAgICAgICAgY2xpZW50cyAtPiBpY29uc19jb250cm9sbGVyICJSZXF1ZXN0cyBpY29ucyBmb3IgY2xlYXJ0ZXh0IHVybHMgZnJvbSIgewogICAgICAgICAgcGVyc3BlY3RpdmVzIHsKICAgICAgICAgICAgIlNlY3VyaXR5IiAiICAgICAgICAgICAgSWNvbnMgMS4yLjEgQnJva2VuIFNTTCBjb21tdW5pY2F0aW9uIGV4cG9zZXMgdmF1bHQgY29udGVudHMgdG8gbmV0d29yayBhZG1pbmlzdHJhdG9ycyBcblxuICAgICAgICAgICAgSWNvbnMgMS4yLjIgVHJhY2tpbmcgb2YgdXNlciB2YXVsdCBjb250ZW50cyBieSBpcCBjb3JyZWxhdGlvbiBiZXR3ZWVuIGlkZW50aXR5IGFuZCBpY29ucyBzZXJ2aWNlcyBcblxuICAgICAgICAgICAgSWNvbnMgMS4yLjMgTm8gU0xBIG9mZmVyZWQgb24gSWNvbnMgc2VydmljZSwgZ3JhY2VmdWwgZGVncmFkYXRpb24gb2YgZmVhdHVyZXMgbmVlZGVkIGlmIGl0IGdvZXMgZG93biBcblxuICAgICAgICAgICAgSWNvbnMgMS4yLjQgU1NSRiB0aHJvdWdoIGNyYWZ0ZWQgaW5wdXQgcmVzb2x2aW5nIHRvIGEgbG9jYXRpb24gdGhlIHNlcnZlciBoYXMgZWxldmF0ZWQgcHJpdmlsZWdlcyBpbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWNvbnNfY29udHJvbGxlciAtPiBpY29uX2RldGVybWluYXRpb24gIlJlcXVlc3RzIGljb25zIGZyb20iCiAgICAgICAgaWNvbnNfY29udHJvbGxlciAtPiBpY29uX2NhY2hlICJDYWNoZXMgaWNvbnMgaW4iIHsKICAgICAgICAgIHBlcnNwZWN0aXZlcyB7CiAgICAgICAgICAgICJTZWN1cml0eSIgIiAgICAgICAgICAgIEljb25zIDEuMy4xIEFnZ3JlZ2F0ZSB2YXVsdCBjb250ZW50IGxlYWsgdGhyb3VnaCB0aW1pbmcgYXR0YWNrIG9uIGNhY2hlIFxuXG4gICAgICAgICAgICBJY29ucyAxLjMuMiBQb3NzaWJsZSBpbmplY3Rpb24gYXR0YWNrIHRocm91Z2ggY2FjaGUga2V5IFxuXG4gICAgICAgICAgICBJY29ucyAxLjMuMyAmIEljb25zIDEuMy40IENhY2hlIGJsb2F0IGxlYWRpbmcgdG8gRG9TIFxuXG4gICAgICAgICAgICBJY29ucyAxLjMuNSBDYWNoZSBwb2lzb25pbmcgbGVhZGluZyB0byBpbmNvcnJlY3QgaWNvbiBzdG9yYWdlICIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIAogICAgZG5zID0gc29mdHdhcmVTeXN0ZW0gIkROUyIgewogICAgICB0YWdzICJFeHRlcm5hbCIKICAgICAgdGFncyAiSWNvbnMiCiAgICB9CiAgICAKICAgIHNlcnZlci5pY29ucy5pY29uX2RldGVybWluYXRpb24gLT4gZG5zICJSZXNvbHZlcyBJUCBhZGRyZXNzZXMgZm9yIGRvbWFpbiBuYW1lcyBmcm9tIgogICAgCiAgICBleHRlcm5hbF93ZWJzaXRlcyA9IHNvZnR3YXJlU3lzdGVtICJFeHRlcm5hbCBXZWJzaXRlcyIgewogICAgICB0YWdzICJFeHRlcm5hbCIKICAgICAgdGFncyAiSWNvbnMiCiAgICB9CiAgICAKICAgIHNlcnZlci5pY29ucy5pY29uX2RldGVybWluYXRpb24gLT4gZXh0ZXJuYWxfd2Vic2l0ZXMgIlJldHJpZXZlcyBpY29ucyBmcm9tIgoKICAgICMgSW5jbHVkZSBzaGFyZWQgbGV2ZWwgcmVsYXRpb25zaGlwcwogICAgIyBVc2VyIFJlbGF0aW9uc2hpcHMKICAgIHVzZXIgLT4gY2xpZW50cy53ZWIgIlVzZXMiCiAgICB1c2VyIC0+IGNsaWVudHMuaW9zICJVc2VzIgogICAgdXNlciAtPiBjbGllbnRzLmFuZHJvaWQgIlVzZXMiCiAgICB1c2VyIC0+IGNsaWVudHMuYnJvd3Nlcl9leHRlbnNpb24gIlVzZXMiCiAgICB1c2VyIC0+IGNsaWVudHMuY2xpICJVc2VzIgogICAgdXNlciAtPiBjbGllbnRzLmRlc2t0b3AgIlVzZXMiCiAgICBhZG1pbiAtPiBjbGllbnRzLndlYiAiQWRtaW5pc3RlcnMgT3JnYW5pemF0aW9ucyIKICAgIHByb3ZpZGVyIC0+IHNlcnZlci5wb3J0YWwgIkNvbXBsZXRlcyBQcm92aWRlciByZWdpc3RyYXRpb24gd2l0aCIKICAgIHByb3ZpZGVyIC0+IGNsaWVudHMud2ViICJBZG1pbmlzdGVycyBQcm92aWRlcnMgYW5kIE9yZ2FuaXphdGlvbnMiCiAgICBjdXN0b21lcl9zdWNjZXNzIC0+IHNlcnZlci5wb3J0YWwgIkluc3BlY3RzIGFuZCBzdXBwb3J0cyIKICAgIHN5c3RlbV9hZG1pbiAtPiBzZXJ2ZXIucG9ydGFsICJBZG1pbmlzdGVycyBTeXN0ZW0iCiAgICAKICAgICMgSGlnaC1sZXZlbCBDbGllbnQgUmVsYXRpb25zaGlwcwogICAgY2xpZW50cy53ZWIgLT4gc2VydmVyLmFwaSAiTWFrZXMgcmVxdWVzdHMgdG8iCiAgICBjbGllbnRzLmlvcyAtPiBzZXJ2ZXIuYXBpICJNYWtlcyByZXF1ZXN0cyB0byIKICAgIGNsaWVudHMuYW5kcm9pZCAtPiBzZXJ2ZXIuYXBpICJNYWtlcyByZXF1ZXN0cyB0byIKICAgIGNsaWVudHMuYnJvd3Nlcl9leHRlbnNpb24gLT4gc2VydmVyLmFwaSAiTWFrZXMgcmVxdWVzdHMgdG8iCiAgICBjbGllbnRzLmNsaSAtPiBzZXJ2ZXIuYXBpICJNYWtlcyByZXF1ZXN0cyB0byIKICAgIGNsaWVudHMuZGVza3RvcCAtPiBzZXJ2ZXIuYXBpICJNYWtlcyByZXF1ZXN0cyB0byIKICAgIGNsaWVudHMud2ViIC0+IHNlcnZlci5pZGVudGl0eSAiQXV0aGVudGljYXRlcyB3aXRoIgogICAgY2xpZW50cy5pb3MgLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIFdpdGgiCiAgICBjbGllbnRzLmFuZHJvaWQgLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIFdpdGgiCiAgICBjbGllbnRzLmJyb3dzZXJfZXh0ZW5zaW9uIC0+IHNlcnZlci5pZGVudGl0eSAiQXV0aGVudGljYXRlcyBXaXRoIgogICAgY2xpZW50cy5jbGkgLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIFdpdGgiCiAgICBjbGllbnRzLmRlc2t0b3AgLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIFdpdGgiCiAgICBzZXJ2ZXIuYXBpIC0+IHNlcnZlci5pZGVudGl0eSAiVmFsaWRhdGVzIEpXVHMgd2l0aCIgewogICAgICB1cmwgImh0dHBzOi8vYml0d2FyZGVuLmNvbSIKICAgIH0KICAgIGNsaWVudHMgLT4gc2VydmVyLmV2ZW50cyAiUG9zdHMgbG9jYWwgdXNhZ2UgZXZlbnRzIHRvIgogICAgCiAgICAjIERhdGFiYXNlIFJlbGF0aW9uc2hpcHMKICAgIAogICAgc2VydmVyLmFwaSAtPiBzZXJ2ZXIuZGF0YWJhc2UgIlF1ZXJpZXMiCiAgICBzZXJ2ZXIucG9ydGFsIC0+IHNlcnZlci5kYXRhYmFzZSAiUXVlcmllcyIKICAgIAogICAgIyBxdWV1ZSBSZWxhdGlvbnNoaXBzCiAgICBzZXJ2ZXIuYXBpIC0+IHNlcnZlci5tYWlsX3F1ZXVlICJTZW5kcyBlbWFpbHMgdG8iCiAgICBzZXJ2ZXIuYXBpIC0+IHNlcnZlci5ub3RpZmljYXRpb25zX3F1ZXVlICJTZW5kcyBub3RpZmljYXRpb25zIHRvIgogICAgc2VydmVyLm5vdGlmaWNhdGlvbnMgLT4gc2VydmVyLm5vdGlmaWNhdGlvbnNfcXVldWUgIlNlbmRzIG5vdGlmaWNhdGlvbnMgdG8iCiAgICBzZXJ2ZXIubWFpbF9xdWV1ZSAtPiBzZXJ2ZXIucG9ydGFsICJQcm9jZXNzZXMgZW1haWxzIGZyb20iCiAgICAKICAgICMgc2VsZiBob3N0IHBob25lIGhvbWUKICAgIHNlbGZfaG9zdGVkX2luc3RhbmNlcyAtPiBzZXJ2ZXIubm90aWZpY2F0aW9ucyAiU2VuZHMgcHVzaCBub3RpZmljYXRpb24gcHJveHkgcmVxdWVzdHMgdG8iCgogICAgc2VydmVyLnNjaW0gLT4gc2VydmVyLmRhdGFiYXNlICJRdWVyaWVzIgogICAgc2VydmVyLmlkZW50aXR5IC0+IHNlcnZlci5kYXRhYmFzZSAiUXVlcmllcyIKICAgIHNlcnZlci5zc28gLT4gc2VydmVyLmRhdGFiYXNlICJRdWVyaWVzIgogICAgIyBIaWdoLWxldmVsIHByb3ZpZGVyIHJlbGF0aW9uc2hpcHMKICAgIHNlcnZlci5hcGkuYmlsbGluZyAtPiBzdHJpcGUgIlJlcXVlc3RzIHBheW1lbnRzIGZvciBjdXN0b21lcnMiCiAgICBzZXJ2ZXIuYXBpLmJpbGxpbmcgLT4gYnJhaW50cmVlICJSZXF1ZXN0cyBwYXltZW50cyBmb3IgY3VzdG9tZXJzIgogICAgc3RyaXBlIC0+IHNlcnZlci5hcGkuYmlsbGluZyAiU2VuZHMgc3Vic2NyaXB0aW9uIGV2ZW50cyB0byIKICAgICMgVG9wIExldmVsIGV2ZW50IHB1Ymxpc2hpbmcKICAgIHNlcnZlci5hcGkgLT4gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmV2ZW50X3RvcGljICJTZW5kcyBldmVudHMgdG8iCiAgICBzZXJ2ZXIuZXZlbnRzIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudF90b3BpYyAiU2VuZHMgZXZlbnRzIHRvIgogICAgc2VydmVyLmlkZW50aXR5IC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudF90b3BpYyAiU2VuZHMgZXZlbnRzIHRvIgogICAgc2VydmVyLnNzbyAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRfdG9waWMgIlNlbmRzIGV2ZW50cyB0byIKICAgIHNlcnZlci5zY2ltIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudF90b3BpYyAiU2VuZHMgZXZlbnRzIHRvIgogICAgc2VydmVyLmFwaSAtPiBzZXJ2ZXIucmFiYml0X21xLmV2ZW50X2V4Y2hhbmdlICJTZW5kcyBldmVudHMgdG8iCiAgICBzZXJ2ZXIuZXZlbnRzIC0+IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRfZXhjaGFuZ2UgIlNlbmRzIGV2ZW50cyB0byIKICAgIHNlcnZlci5pZGVudGl0eSAtPiBzZXJ2ZXIucmFiYml0X21xLmV2ZW50X2V4Y2hhbmdlICJTZW5kcyBldmVudHMgdG8iCiAgICBzZXJ2ZXIuc3NvIC0+IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRfZXhjaGFuZ2UgIlNlbmRzIGV2ZW50cyB0byIKICAgIHNlcnZlci5zY2ltIC0+IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRfZXhjaGFuZ2UgIlNlbmRzIGV2ZW50cyB0byIKICAgIAogICAgIyBBenVyZSBTZXJ2aWNlIEJ1cyB0b3BpY3MsIHN1YnNjcmlwdGlvbnMsIGFuZCByb3V0aW5nCiAgICBldmVudHNXcml0ZVN1YiA9IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudF90b3BpYyAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRzV3JpdGVTdWIgICJTdWJzY3JpYmVzIHZpYSBmYW4tb3V0IgogICAgZXZlbnRzRGF0YWRvZ1N1YiA9IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudF90b3BpYyAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRzRGF0YWRvZ1N1YiAiU3Vic2NyaWJlcyB2aWEgZmFuLW91dCIKICAgIGV2ZW50c0hlY1N1YiA9IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudF90b3BpYyAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRzSGVjU3ViICJTdWJzY3JpYmVzIHZpYSBmYW4tb3V0IgogICAgZXZlbnRzU2xhY2tTdWIgPSBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRfdG9waWMgLT4gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmV2ZW50c1NsYWNrU3ViICJTdWJzY3JpYmVzIHZpYSBmYW4tb3V0IgogICAgZXZlbnRzVGVhbXNTdWIgPSBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRfdG9waWMgLT4gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmV2ZW50c1RlYW1zU3ViICJTdWJzY3JpYmVzIHZpYSBmYW4tb3V0IgogICAgZXZlbnRzV2ViaG9va1N1YiA9IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudF90b3BpYyAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRzV2ViaG9va1N1YiAgIlN1YnNjcmliZXMgdmlhIGZhbi1vdXQiCiAgICBpbnRlZ3JhdGlvbkRhdGFkb2dTdWIgPSBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuaW50ZWdyYXRpb25fdG9waWMgLT4gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmludGVncmF0aW9uRGF0YWRvZ1N1YiAiU3Vic2NyaWJlcyB2aWEgZmlsdGVyIG9uIERhdGFkb2cga2V5IgogICAgaW50ZWdyYXRpb25IZWNTdWIgPSBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuaW50ZWdyYXRpb25fdG9waWMgLT4gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmludGVncmF0aW9uSGVjU3ViICJTdWJzY3JpYmVzIHZpYSBmaWx0ZXIgb24gSEVDIGtleSIKICAgIGludGVncmF0aW9uU2xhY2tTdWIgPSBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuaW50ZWdyYXRpb25fdG9waWMgLT4gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmludGVncmF0aW9uU2xhY2tTdWIgIlN1YnNjcmliZXMgdmlhIGZpbHRlciBvbiBTbGFjayBrZXkiCiAgICBpbnRlZ3JhdGlvblRlYW1zU3ViID0gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmludGVncmF0aW9uX3RvcGljIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5pbnRlZ3JhdGlvblRlYW1zU3ViICJTdWJzY3JpYmVzIHZpYSBmaWx0ZXIgb24gVGVhbXMga2V5IgogICAgaW50ZWdyYXRpb25XZWJob29rU3ViID0gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmludGVncmF0aW9uX3RvcGljIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5pbnRlZ3JhdGlvbldlYmhvb2tTdWIgIlN1YnNjcmliZXMgdmlhIGZpbHRlciBvbiBXZWJob29rIGtleSIKICAgIAogICAgZXZlbnRzV3JpdGVMaXN0ZW5lciA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmV2ZW50X2xpc3RlbmVyIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudHNXcml0ZVN1YiAiTGlzdGVucyB0byIKICAgIGV2ZW50c1dyaXRlRGVsZWdhdGUgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5ldmVudF9saXN0ZW5lciAtPiBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5ldmVudF9yZXBvc2l0b3J5X2hhbmRsZXIgIkRlbGVnYXRlcyB0byIKICAgIGV2ZW50c0RhdGFkb2dMaXN0ZW5lciA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmV2ZW50X2xpc3RlbmVyIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudHNEYXRhZG9nU3ViICJMaXN0ZW5zIHRvIgogICAgZXZlbnRzSGVjTGlzdGVuZXIgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5ldmVudF9saXN0ZW5lciAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRzSGVjU3ViICJMaXN0ZW5zIHRvIgogICAgZXZlbnRzU2xhY2tMaXN0ZW5lciA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmV2ZW50X2xpc3RlbmVyIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5ldmVudHNTbGFja1N1YiAiTGlzdGVucyB0byIKICAgIGV2ZW50c1RlYW1zTGlzdGVuZXIgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5ldmVudF9saXN0ZW5lciAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRzVGVhbXNTdWIgIkxpc3RlbnMgdG8iCiAgICBldmVudHNXZWJob29rTGlzdGVuZXIgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5ldmVudF9saXN0ZW5lciAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuZXZlbnRzV2ViaG9va1N1YiAiTGlzdGVucyB0byIKICAgIGV2ZW50c0ludGVncmF0aW9uSGFuZGxlckRlbGVnYXRlID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuZXZlbnRfbGlzdGVuZXIgLT4gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuZXZlbnRfaW50ZWdyYXRpb25faGFuZGxlciAiRGVsZWdhdGVzIHRvIgogICAgCiAgICBldmVudEludGVncmF0aW9uSGFuZGxlclB1Ymxpc2ggPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5ldmVudF9pbnRlZ3JhdGlvbl9oYW5kbGVyIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5pbnRlZ3JhdGlvbl90b3BpYyAiUHVibGlzaGVzIFRvIgogICAgZXZlbnRJbnRlZ3JhdGlvbkhhbmRsZXJDYWNoZSA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmV2ZW50X2ludGVncmF0aW9uX2hhbmRsZXIgLT4gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuZXZlbnRfaW50ZWdyYXRpb25zX2V4dGVuZGVkX2NhY2hlICJGZXRjaGVzIGNvbmZpZ3VyYXRpb25zIGZyb20iCiAgICBldmVudEludGVncmF0aW9uSGFuZGxlckRhdGFiYXNlID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuZXZlbnRfaW50ZWdyYXRpb25faGFuZGxlciAtPiBzZXJ2ZXIuZGF0YWJhc2UgIkZldGNoZXMgdGVtcGxhdGUgZGV0YWlscyBmcm9tIgogICAgY2FjaGVEYXRhYmFzZUZldGNoID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuZXZlbnRfaW50ZWdyYXRpb25zX2V4dGVuZGVkX2NhY2hlIC0+IHNlcnZlci5kYXRhYmFzZSAiRmV0Y2hlcyBjb25maWd1cmF0aW9ucyBmcm9tIgogICAgZXZlbnRJbnRlZ3JhdGlvbkhhbmRsZXJGaWx0ZXIgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5ldmVudF9pbnRlZ3JhdGlvbl9oYW5kbGVyIC0+IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmludGVncmF0aW9uX2ZpbHRlcl9zZXJ2aWNlICJSdW5zIGZpbHRlcnMiCiAgICBldmVudFJlcG9zaXRvcnlEYXRhYmFzZSA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmV2ZW50X3JlcG9zaXRvcnlfaGFuZGxlciAtPiBzZXJ2ZXIuZGF0YWJhc2UgICJXcml0ZXMgZXZlbnRzIHRvIgogICAgCiAgICBpbnRlZ3JhdGlvblNsYWNrTGlzdGVuZXIgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5pbnRlZ3JhdGlvbl9saXN0ZW5lciAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuaW50ZWdyYXRpb25TbGFja1N1YiAiTGlzdGVucyB0byIKICAgIGludGVncmF0aW9uU2xhY2tEZWxlZ2F0ZSA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmludGVncmF0aW9uX2xpc3RlbmVyIC0+IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLnNsYWNrX2ludGVncmF0aW9uX2hhbmRsZXIgIkRlbGVnYXRlcyB0byIKICAgIGludGVncmF0aW9uV2ViaG9va0xpc3RlbmVyID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuaW50ZWdyYXRpb25fbGlzdGVuZXIgLT4gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmludGVncmF0aW9uV2ViaG9va1N1YiAiTGlzdGVucyB0byIKICAgIGludGVncmF0aW9uV2ViaG9va0RlbGVnYXRlID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuaW50ZWdyYXRpb25fbGlzdGVuZXIgLT4gc2VydmVyLmV2ZW50c19wcm9jZXNzb3Iud2ViaG9va19pbnRlZ3JhdGlvbl9oYW5kbGVyICJEZWxlZ2F0ZXMgdG8iCiAgICBpbnRlZ3JhdGlvbkhlY0xpc3RlbmVyID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuaW50ZWdyYXRpb25fbGlzdGVuZXIgLT4gc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzLmludGVncmF0aW9uSGVjU3ViICJMaXN0ZW5zIHRvIgogICAgaW50ZWdyYXRpb25EYXRhZG9nTGlzdGVuZXIgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5pbnRlZ3JhdGlvbl9saXN0ZW5lciAtPiBzZXJ2ZXIuYXp1cmVfc2VydmljZV9idXMuaW50ZWdyYXRpb25EYXRhZG9nU3ViICJMaXN0ZW5zIHRvIgogICAgaW50ZWdyYXRpb25EYXRhZG9nRGVsZWdhdGUgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5pbnRlZ3JhdGlvbl9saXN0ZW5lciAtPiBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5kYXRhZG9nX2ludGVncmF0aW9uX2hhbmRsZXIgIkRlbGVnYXRlcyB0byIKICAgIGludGVncmF0aW9uVGVhbXNMaXN0ZW5lciA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmludGVncmF0aW9uX2xpc3RlbmVyIC0+IHNlcnZlci5henVyZV9zZXJ2aWNlX2J1cy5pbnRlZ3JhdGlvblRlYW1zU3ViICJMaXN0ZW5zIHRvIgogICAgaW50ZWdyYXRpb25UZWFtc0RlbGVnYXRlID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuaW50ZWdyYXRpb25fbGlzdGVuZXIgLT4gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IudGVhbXNfaW50ZWdyYXRpb25faGFuZGxlciAiRGVsZWdhdGVzIHRvIgogICAgCiAgICAjIFJhYmJpdE1RIGV4Y2hhbmdlcywgcXVldWVzLCBhbmQgcm91dGluZwogICAgZXZlbnRzV3JpdGVRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRfZXhjaGFuZ2UgLT4gc2VydmVyLnJhYmJpdF9tcS5ldmVudHNXcml0ZVF1ZXVlICAiU3Vic2NyaWJlcyB2aWEgZmFuLW91dCIKICAgIGV2ZW50c0RhdGFkb2dRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRfZXhjaGFuZ2UgLT4gc2VydmVyLnJhYmJpdF9tcS5ldmVudHNEYXRhZG9nUXVldWUgIlN1YnNjcmliZXMgdmlhIGZhbi1vdXQiCiAgICBldmVudHNIZWNRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRfZXhjaGFuZ2UgLT4gc2VydmVyLnJhYmJpdF9tcS5ldmVudHNIZWNRdWV1ZSAiU3Vic2NyaWJlcyB2aWEgZmFuLW91dCIKICAgIGV2ZW50c1NsYWNrUXVldWUgPSBzZXJ2ZXIucmFiYml0X21xLmV2ZW50X2V4Y2hhbmdlIC0+IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRzU2xhY2tRdWV1ZSAiU3Vic2NyaWJlcyB2aWEgZmFuLW91dCIKICAgIGV2ZW50c1RlYW1zUXVldWUgPSBzZXJ2ZXIucmFiYml0X21xLmV2ZW50X2V4Y2hhbmdlIC0+IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRzVGVhbXNRdWV1ZSAiU3Vic2NyaWJlcyB2aWEgZmFuLW91dCIKICAgIGV2ZW50c1dlYmhvb2tRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuZXZlbnRfZXhjaGFuZ2UgLT4gc2VydmVyLnJhYmJpdF9tcS5ldmVudHNXZWJob29rUXVldWUgIlN1YnNjcmliZXMgdmlhIGZhbi1vdXQiCiAgICBpbnRlZ3JhdGlvbkRhdGFkb2dRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuaW50ZWdyYXRpb25fZXhjaGFuZ2UgLT4gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvbkRhdGFkb2dRdWV1ZSAiU3Vic2NyaWJlcyB2aWEgZmlsdGVyIG9uIERhdGFkb2cga2V5IgogICAgaW50ZWdyYXRpb25IZWNRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuaW50ZWdyYXRpb25fZXhjaGFuZ2UgLT4gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvbkhlY1F1ZXVlICJTdWJzY3JpYmVzIHZpYSBmaWx0ZXIgb24gSEVDIGtleSIKICAgIGludGVncmF0aW9uU2xhY2tRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuaW50ZWdyYXRpb25fZXhjaGFuZ2UgLT4gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvblNsYWNrUXVldWUgIlN1YnNjcmliZXMgdmlhIGZpbHRlciBvbiBTbGFjayBrZXkiCiAgICBpbnRlZ3JhdGlvblRlYW1zUXVldWUgPSBzZXJ2ZXIucmFiYml0X21xLmludGVncmF0aW9uX2V4Y2hhbmdlIC0+IHNlcnZlci5yYWJiaXRfbXEuaW50ZWdyYXRpb25UZWFtc1F1ZXVlICJTdWJzY3JpYmVzIHZpYSBmaWx0ZXIgb24gVGVhbXMga2V5IgogICAgaW50ZWdyYXRpb25XZWJob29rUXVldWUgPSBzZXJ2ZXIucmFiYml0X21xLmludGVncmF0aW9uX2V4Y2hhbmdlIC0+IHNlcnZlci5yYWJiaXRfbXEuaW50ZWdyYXRpb25XZWJob29rUXVldWUgIlN1YnNjcmliZXMgdmlhIGZpbHRlciBvbiBXZWJob29rIGtleSIKICAgIGludGVncmF0aW9uRGF0YWRvZ1JldHJ5UXVldWUgPSBzZXJ2ZXIucmFiYml0X21xLmludGVncmF0aW9uRGF0YWRvZ1JldHJ5UXVldWUgLT4gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvbkRhdGFkb2dRdWV1ZSAiRExRIGFmdGVyIGNvbmZpZ3VyZWQgcmV0cnkgdGltaW5nIgogICAgaW50ZWdyYXRpb25IZWNSZXRyeVF1ZXVlID0gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvbkhlY1JldHJ5UXVldWUgLT4gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvbkhlY1F1ZXVlICJETFEgYWZ0ZXIgY29uZmlndXJlZCByZXRyeSB0aW1pbmciCiAgICBpbnRlZ3JhdGlvblNsYWNrUmV0cnlRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuaW50ZWdyYXRpb25TbGFja1JldHJ5UXVldWUgLT4gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvblNsYWNrUXVldWUgIkRMUSBhZnRlciBjb25maWd1cmVkIHJldHJ5IHRpbWluZyIKICAgIGludGVncmF0aW9uVGVhbXNSZXRyeVF1ZXVlID0gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvblRlYW1zUmV0cnlRdWV1ZSAtPiBzZXJ2ZXIucmFiYml0X21xLmludGVncmF0aW9uVGVhbXNRdWV1ZSAiRExRIGFmdGVyIGNvbmZpZ3VyZWQgcmV0cnkgdGltaW5nIgogICAgaW50ZWdyYXRpb25XZWJob29rUmV0cnlRdWV1ZSA9IHNlcnZlci5yYWJiaXRfbXEuaW50ZWdyYXRpb25XZWJob29rUmV0cnlRdWV1ZSAtPiBzZXJ2ZXIucmFiYml0X21xLmludGVncmF0aW9uV2ViaG9va1F1ZXVlICJETFEgYWZ0ZXIgY29uZmlndXJlZCByZXRyeSB0aW1pbmciCiAgICAKICAgIGV2ZW50c1dyaXRlTGlzdGVuZXJfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5ldmVudF9saXN0ZW5lciAtPiBzZXJ2ZXIucmFiYml0X21xLmV2ZW50c1dyaXRlUXVldWUgIkxpc3RlbnMgdG8iCiAgICBldmVudHNEYXRhZG9nTGlzdGVuZXJfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5ldmVudF9saXN0ZW5lciAtPiBzZXJ2ZXIucmFiYml0X21xLmV2ZW50c0RhdGFkb2dRdWV1ZSAiTGlzdGVucyB0byIKICAgIGV2ZW50c0hlY0xpc3RlbmVyX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuZXZlbnRfbGlzdGVuZXIgLT4gc2VydmVyLnJhYmJpdF9tcS5ldmVudHNIZWNRdWV1ZSAiTGlzdGVucyB0byIKICAgIGV2ZW50c1NsYWNrTGlzdGVuZXJfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5ldmVudF9saXN0ZW5lciAtPiBzZXJ2ZXIucmFiYml0X21xLmV2ZW50c1NsYWNrUXVldWUgIkxpc3RlbnMgdG8iCiAgICBldmVudHNUZWFtc0xpc3RlbmVyX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuZXZlbnRfbGlzdGVuZXIgLT4gc2VydmVyLnJhYmJpdF9tcS5ldmVudHNUZWFtc1F1ZXVlICJMaXN0ZW5zIHRvIgogICAgZXZlbnRzV2ViaG9va0xpc3RlbmVyX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuZXZlbnRfbGlzdGVuZXIgLT4gc2VydmVyLnJhYmJpdF9tcS5ldmVudHNXZWJob29rUXVldWUgIkxpc3RlbnMgdG8iCiAgICBldmVudHNXcml0ZURlbGVnYXRlX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuZXZlbnRfbGlzdGVuZXIgLT4gc2VydmVyLmV2ZW50cy5ldmVudF9yZXBvc2l0b3J5X2hhbmRsZXIgIkRlbGVnYXRlcyB0byIKICAgIAogICAgZXZlbnRSZXBvc2l0b3J5RGF0YWJhc2VfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5ldmVudF9yZXBvc2l0b3J5X2hhbmRsZXIgLT4gc2VydmVyLmRhdGFiYXNlICJXcml0ZXMgZXZlbnRzIHRvIiB0YWdzICJTZWxmLUhvc3RlZC1Pbmx5IgogICAgZXZlbnRzSW50ZWdyYXRpb25IYW5kbGVyRGVsZWdhdGVfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5ldmVudF9saXN0ZW5lciAtPiBzZXJ2ZXIuZXZlbnRzLmV2ZW50X2ludGVncmF0aW9uX2hhbmRsZXIgIkRlbGVnYXRlcyB0byIKICAgIGV2ZW50SW50ZWdyYXRpb25IYW5kbGVyRGF0YWJhc2VfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5ldmVudF9pbnRlZ3JhdGlvbl9oYW5kbGVyIC0+IHNlcnZlci5kYXRhYmFzZSAiRmV0Y2hlcyB0ZW1wbGF0ZSBkZXRhaWxzIGZyb20iCiAgICBjYWNoZURhdGFiYXNlRmV0Y2hfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5ldmVudF9pbnRlZ3JhdGlvbnNfZXh0ZW5kZWRfY2FjaGUgLT4gc2VydmVyLmRhdGFiYXNlICJGZXRjaGVzIGNvbmZpZ3VyYXRpb25zIGZyb20iIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICBldmVudEludGVncmF0aW9uSGFuZGxlckNhY2hlX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuZXZlbnRfaW50ZWdyYXRpb25faGFuZGxlciAtPiBzZXJ2ZXIuZXZlbnRzLmV2ZW50X2ludGVncmF0aW9uc19leHRlbmRlZF9jYWNoZSAiRmV0Y2hlcyBjb25maWd1cmF0aW9ucyBmcm9tIgogICAgZXZlbnRJbnRlZ3JhdGlvbkhhbmRsZXJGaWx0ZXJfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5ldmVudF9pbnRlZ3JhdGlvbl9oYW5kbGVyIC0+IHNlcnZlci5ldmVudHMuaW50ZWdyYXRpb25fZmlsdGVyX3NlcnZpY2UgIlJ1bnMgZmlsdGVycyIKICAgIGV2ZW50SW50ZWdyYXRpb25IYW5kbGVyUHVibGlzaF9ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLmV2ZW50X2ludGVncmF0aW9uX2hhbmRsZXIgLT4gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvbl9leGNoYW5nZSAiUHVibGlzaGVzIFRvIgogICAgCiAgICBpbnRlZ3JhdGlvblNsYWNrTGlzdGVuZXJfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5pbnRlZ3JhdGlvbl9saXN0ZW5lciAtPiBzZXJ2ZXIucmFiYml0X21xLmludGVncmF0aW9uU2xhY2tRdWV1ZSAiTGlzdGVucyB0byIKICAgIGludGVncmF0aW9uV2ViaG9va0xpc3RlbmVyX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuaW50ZWdyYXRpb25fbGlzdGVuZXIgLT4gc2VydmVyLnJhYmJpdF9tcS5pbnRlZ3JhdGlvbldlYmhvb2tRdWV1ZSAiTGlzdGVucyB0byIKICAgIGludGVncmF0aW9uSGVjTGlzdGVuZXJfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5pbnRlZ3JhdGlvbl9saXN0ZW5lciAtPiBzZXJ2ZXIucmFiYml0X21xLmludGVncmF0aW9uSGVjUXVldWUgIkxpc3RlbnMgdG8iCiAgICBpbnRlZ3JhdGlvbkRhdGFkb2dMaXN0ZW5lcl9ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLmludGVncmF0aW9uX2xpc3RlbmVyIC0+IHNlcnZlci5yYWJiaXRfbXEuaW50ZWdyYXRpb25EYXRhZG9nUXVldWUgIkxpc3RlbnMgdG8iCiAgICBpbnRlZ3JhdGlvblRlYW1zTGlzdGVuZXJfZXZlbnRzID0gc2VydmVyLmV2ZW50cy5pbnRlZ3JhdGlvbl9saXN0ZW5lciAtPiBzZXJ2ZXIucmFiYml0X21xLmludGVncmF0aW9uVGVhbXNRdWV1ZSAiTGlzdGVucyB0byIKICAgIGludGVncmF0aW9uU2xhY2tEZWxlZ2F0ZV9ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLmludGVncmF0aW9uX2xpc3RlbmVyIC0+IHNlcnZlci5ldmVudHMuc2xhY2tfaW50ZWdyYXRpb25faGFuZGxlciAiRGVsZWdhdGVzIHRvIgogICAgaW50ZWdyYXRpb25UZWFtc0RlbGVnYXRlX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuaW50ZWdyYXRpb25fbGlzdGVuZXIgLT4gc2VydmVyLmV2ZW50cy50ZWFtc19pbnRlZ3JhdGlvbl9oYW5kbGVyICJEZWxlZ2F0ZXMgdG8iCiAgICBpbnRlZ3JhdGlvbkRhdGFkb2dEZWxlZ2F0ZV9ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLmludGVncmF0aW9uX2xpc3RlbmVyIC0+IHNlcnZlci5ldmVudHMuZGF0YWRvZ19pbnRlZ3JhdGlvbl9oYW5kbGVyICJEZWxlZ2F0ZXMgdG8iCiAgICBpbnRlZ3JhdGlvbldlYmhvb2tEZWxlZ2F0ZV9ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLmludGVncmF0aW9uX2xpc3RlbmVyIC0+IHNlcnZlci5ldmVudHMud2ViaG9va19pbnRlZ3JhdGlvbl9oYW5kbGVyICJEZWxlZ2F0ZXMgdG8iCiAgICAKICAgICMgRXh0ZXJuYWwgU2VydmljZXMKICAgIHNsYWNrVG9TbGFja1NlcnZpY2UgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5zbGFja19pbnRlZ3JhdGlvbl9oYW5kbGVyIC0+IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLnNsYWNrX3NlcnZpY2UgIlVzZXMiCiAgICBzbGFja1NlcnZpY2VUb1NsYWNrID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3Iuc2xhY2tfc2VydmljZSAgLT4gZXh0ZXJuYWxfc2VydmljZXMuc2xhY2sgIlB1Ymxpc2hlcyBjb25maWd1cmVkIGV2ZW50cyB0byIKICAgIHRlYW1zVG9UZWFtc1NlcnZpY2UgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci50ZWFtc19pbnRlZ3JhdGlvbl9oYW5kbGVyIC0+IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLnRlYW1zX3NlcnZpY2UgIlVzZXMiCiAgICB0ZWFtc1NlcnZpY2VUb1RlYW1zID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IudGVhbXNfc2VydmljZSAgLT4gZXh0ZXJuYWxfc2VydmljZXMudGVhbXMgIlB1Ymxpc2hlcyBjb25maWd1cmVkIGV2ZW50cyB0byIKICAgIHdlYmhvb2toYW5kbGVySHR0cENsaWVudCA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLndlYmhvb2tfaW50ZWdyYXRpb25faGFuZGxlciAtPiBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5odHRwX2NsaWVudCAiVXNlcyIKICAgIGRhdGFkb2doYW5kbGVySHR0cENsaWVudCA9IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yLmRhdGFkb2dfaW50ZWdyYXRpb25faGFuZGxlciAtPiBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5odHRwX2NsaWVudCAiVXNlcyIKICAgIGh0dHBUb0Nyb3dkc3RyaWtlID0gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IuaHR0cF9jbGllbnQgLT4gZXh0ZXJuYWxfc2VydmljZXMuY3Jvd2RzdHJpa2UgIlB1Ymxpc2hlcyBjb25maWd1cmVkIGV2ZW50cyB0byIKICAgIGh0dHBUb0RhdGFkb2cgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5odHRwX2NsaWVudCAtPiBleHRlcm5hbF9zZXJ2aWNlcy5kYXRhZG9nICJQdWJsaXNoZXMgY29uZmlndXJlZCBldmVudHMgdG8iCiAgICBodHRwVG9TcGx1bmsgPSBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3Nvci5odHRwX2NsaWVudCAtPiBleHRlcm5hbF9zZXJ2aWNlcy5zcGx1bmsgIlB1Ymxpc2hlcyBjb25maWd1cmVkIGV2ZW50cyB0byIKICAgIAogICAgc2xhY2tUb1NsYWNrU2VydmljZV9ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLnNsYWNrX2ludGVncmF0aW9uX2hhbmRsZXIgLT4gc2VydmVyLmV2ZW50cy5zbGFja19zZXJ2aWNlICJVc2VzIiB0YWdzICJTZWxmLUhvc3RlZC1Pbmx5IgogICAgc2xhY2tTZXJ2aWNlVG9TbGFja19ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLnNsYWNrX3NlcnZpY2UgIC0+IGV4dGVybmFsX3NlcnZpY2VzLnNsYWNrICJQdWJsaXNoZXMgY29uZmlndXJlZCBldmVudHMgdG8iIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICB0ZWFtc1RvVGVhbXNTZXJ2aWNlX2V2ZW50cyA9IHNlcnZlci5ldmVudHMudGVhbXNfaW50ZWdyYXRpb25faGFuZGxlciAtPiBzZXJ2ZXIuZXZlbnRzLnRlYW1zX3NlcnZpY2UgIlVzZXMiIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICB0ZWFtc1NlcnZpY2VUb1RlYW1zX2V2ZW50cyA9IHNlcnZlci5ldmVudHMudGVhbXNfc2VydmljZSAgLT4gZXh0ZXJuYWxfc2VydmljZXMudGVhbXMgIlB1Ymxpc2hlcyBjb25maWd1cmVkIGV2ZW50cyB0byIgdGFncyAiU2VsZi1Ib3N0ZWQtT25seSIKICAgIHdlYmhvb2toYW5kbGVySHR0cENsaWVudF9ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLndlYmhvb2tfaW50ZWdyYXRpb25faGFuZGxlciAtPiBzZXJ2ZXIuZXZlbnRzLmh0dHBfY2xpZW50ICJVc2VzIiB0YWdzICJTZWxmLUhvc3RlZC1Pbmx5IgogICAgZGF0YWRvZ2hhbmRsZXJIdHRwQ2xpZW50X2V2ZW50cyA9IHNlcnZlci5ldmVudHMuZGF0YWRvZ19pbnRlZ3JhdGlvbl9oYW5kbGVyIC0+IHNlcnZlci5ldmVudHMuaHR0cF9jbGllbnQgIlVzZXMiIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICBodHRwVG9Dcm93ZHN0cmlrZV9ldmVudHMgPSBzZXJ2ZXIuZXZlbnRzLmh0dHBfY2xpZW50IC0+IGV4dGVybmFsX3NlcnZpY2VzLmNyb3dkc3RyaWtlICJQdWJsaXNoZXMgY29uZmlndXJlZCBldmVudHMgdG8iIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICBodHRwVG9EYXRhZG9nX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuaHR0cF9jbGllbnQgLT4gZXh0ZXJuYWxfc2VydmljZXMuZGF0YWRvZyAiUHVibGlzaGVzIGNvbmZpZ3VyZWQgZXZlbnRzIHRvIiB0YWdzICJTZWxmLUhvc3RlZC1Pbmx5IgogICAgaHR0cFRvU3BsdW5rX2V2ZW50cyA9IHNlcnZlci5ldmVudHMuaHR0cF9jbGllbnQgLT4gZXh0ZXJuYWxfc2VydmljZXMuc3BsdW5rICJQdWJsaXNoZXMgY29uZmlndXJlZCBldmVudHMgdG8iIHRhZ3MgIlNlbGYtSG9zdGVkLU9ubHkiCiAgICBrZXlfY29ubmVjdG9yIC0+IHNlcnZlci5pZGVudGl0eSAiVmFsaWRhdGVzIEpXVHMgd2l0aCIKICB9CgogIHZpZXdzIHsKICAgIHN0eWxlcyB7CiAgICAgIGVsZW1lbnQgIlBlcnNvbiIgewogICAgICAgIGJhY2tncm91bmQgIzMxMDdkMwogICAgICAgIHNoYXBlIHBlcnNvbgogICAgICB9CiAgICAgIGVsZW1lbnQgIk1TUCIgewogICAgICAgIGJhY2tncm91bmQgIzMxMDdkMwogICAgICAgIHNoYXBlIHBlcnNvbgogICAgICB9CiAgICB9CiAgICBjb21wb25lbnQgc2VydmVyLmF6dXJlX3NlcnZpY2VfYnVzICJBenVyZV9TZXJ2aWNlX0J1cyIgewogICAgICAgIGluY2x1ZGUgKgogICAgfQogICAgCiAgICBjb21wb25lbnQgc2VydmVyLnJhYmJpdF9tcSAiUmFiYml0TVEiIHsKICAgICAgICBpbmNsdWRlICoKICAgIH0KICAgIAogICAgY29tcG9uZW50IHNlcnZlci5ldmVudHNfcHJvY2Vzc29yICJFdmVudHNfUHJvY2Vzc29yIiB7CiAgICAgICAgaW5jbHVkZSAqCiAgICB9CiAgICAKICAgIGNvbXBvbmVudCBzZXJ2ZXIuZXZlbnRzICJFdmVudHMiIHsKICAgICAgICBpbmNsdWRlICoKICAgIH0KICAgIAogICAgZHluYW1pYyBzZXJ2ZXIuZXZlbnRzX3Byb2Nlc3NvciAiRXZlbnRzX1Byb2Nlc3Nvcl9BenVyZV9TZXJ2aWNlX0J1cyIgIkV2ZW50IEludGVncmF0aW9ucyAvIEFTQiBEZXRhaWwiIHsKICAgICAgICBldmVudHNXcml0ZVN1YgogICAgICAgIGV2ZW50c0hlY1N1YgogICAgICAgIGV2ZW50c1NsYWNrU3ViCiAgICAgICAgZXZlbnRzV2ViaG9va1N1YgogICAgICAgIGV2ZW50c1dyaXRlTGlzdGVuZXIKICAgICAgICBldmVudHNIZWNMaXN0ZW5lcgogICAgICAgIGV2ZW50c1NsYWNrTGlzdGVuZXIKICAgICAgICBldmVudHNXZWJob29rTGlzdGVuZXIKICAgICAgICBldmVudHNXcml0ZURlbGVnYXRlCiAgICAgICAgZXZlbnRSZXBvc2l0b3J5RGF0YWJhc2UKICAgICAgICBldmVudHNJbnRlZ3JhdGlvbkhhbmRsZXJEZWxlZ2F0ZQogICAgICAgIGV2ZW50SW50ZWdyYXRpb25IYW5kbGVyRGF0YWJhc2UKICAgICAgICBldmVudEludGVncmF0aW9uSGFuZGxlckNhY2hlCiAgICAgICAgY2FjaGVEYXRhYmFzZUZldGNoCiAgICAgICAgZXZlbnRJbnRlZ3JhdGlvbkhhbmRsZXJGaWx0ZXIKICAgICAgICBldmVudEludGVncmF0aW9uSGFuZGxlclB1Ymxpc2gKICAgICAgICBpbnRlZ3JhdGlvblNsYWNrU3ViCiAgICAgICAgaW50ZWdyYXRpb25UZWFtc1N1YgogICAgICAgIGludGVncmF0aW9uRGF0YWRvZ1N1YgogICAgICAgIGludGVncmF0aW9uV2ViaG9va1N1YgogICAgICAgIGludGVncmF0aW9uSGVjU3ViCiAgICAgICAgaW50ZWdyYXRpb25TbGFja0xpc3RlbmVyCiAgICAgICAgaW50ZWdyYXRpb25UZWFtc0xpc3RlbmVyCiAgICAgICAgaW50ZWdyYXRpb25EYXRhZG9nTGlzdGVuZXIKICAgICAgICBpbnRlZ3JhdGlvbldlYmhvb2tMaXN0ZW5lcgogICAgICAgIGludGVncmF0aW9uSGVjTGlzdGVuZXIKICAgICAgICBpbnRlZ3JhdGlvblNsYWNrRGVsZWdhdGUKICAgICAgICBpbnRlZ3JhdGlvblRlYW1zRGVsZWdhdGUKICAgICAgICBpbnRlZ3JhdGlvbkRhdGFkb2dEZWxlZ2F0ZQogICAgICAgIGludGVncmF0aW9uV2ViaG9va0RlbGVnYXRlCiAgICAgICAgc2xhY2tUb1NsYWNrU2VydmljZQogICAgICAgIHNsYWNrU2VydmljZVRvU2xhY2sKICAgICAgICB0ZWFtc1RvVGVhbXNTZXJ2aWNlCiAgICAgICAgdGVhbXNTZXJ2aWNlVG9UZWFtcwogICAgICAgIGRhdGFkb2dIYW5kbGVySHR0cENsaWVudAogICAgICAgIHdlYmhvb2tIYW5kbGVySHR0cENsaWVudAogICAgICAgIGh0dHBUb0RhdGFkb2cKICAgICAgICBodHRwVG9Dcm93ZHN0cmlrZQogICAgICAgIGh0dHBUb1NwbHVuawogICAgfQogICAgCiAgICBkeW5hbWljIHNlcnZlci5ldmVudHMgIkV2ZW50c19SYWJiaXRNUSIgIkV2ZW50IEludGVncmF0aW9ucyAvIFJhYmJpdE1RIERldGFpbCIgewogICAgICAgIGV2ZW50c1dyaXRlUXVldWUKICAgICAgICBldmVudHNIZWNRdWV1ZQogICAgICAgIGV2ZW50c1NsYWNrUXVldWUKICAgICAgICBldmVudHNXZWJob29rUXVldWUKICAgICAgICBldmVudHNXcml0ZUxpc3RlbmVyX2V2ZW50cwogICAgICAgIGV2ZW50c0hlY0xpc3RlbmVyX2V2ZW50cwogICAgICAgIGV2ZW50c1NsYWNrTGlzdGVuZXJfZXZlbnRzCiAgICAgICAgZXZlbnRzV2ViaG9va0xpc3RlbmVyX2V2ZW50cwogICAgICAgIGV2ZW50c1dyaXRlRGVsZWdhdGVfZXZlbnRzCiAgICAgICAgZXZlbnRSZXBvc2l0b3J5RGF0YWJhc2VfZXZlbnRzCiAgICAgICAgZXZlbnRzSW50ZWdyYXRpb25IYW5kbGVyRGVsZWdhdGVfZXZlbnRzCiAgICAgICAgZXZlbnRJbnRlZ3JhdGlvbkhhbmRsZXJEYXRhYmFzZV9ldmVudHMKICAgICAgICBldmVudEludGVncmF0aW9uSGFuZGxlckNhY2hlX2V2ZW50cwogICAgICAgIGNhY2hlRGF0YWJhc2VGZXRjaF9ldmVudHMKICAgICAgICBldmVudEludGVncmF0aW9uSGFuZGxlckZpbHRlcl9ldmVudHMKICAgICAgICBldmVudEludGVncmF0aW9uSGFuZGxlclB1Ymxpc2hfZXZlbnRzCiAgICAgICAgaW50ZWdyYXRpb25TbGFja1F1ZXVlCiAgICAgICAgaW50ZWdyYXRpb25XZWJob29rUXVldWUKICAgICAgICBpbnRlZ3JhdGlvbkhlY1F1ZXVlCiAgICAgICAgaW50ZWdyYXRpb25UZWFtc1F1ZXVlCiAgICAgICAgaW50ZWdyYXRpb25EYXRhZG9nUXVldWUKICAgICAgICBpbnRlZ3JhdGlvblNsYWNrTGlzdGVuZXJfZXZlbnRzCiAgICAgICAgaW50ZWdyYXRpb25UZWFtc0xpc3RlbmVyX2V2ZW50cwogICAgICAgIGludGVncmF0aW9uRGF0YWRvZ0xpc3RlbmVyX2V2ZW50cwogICAgICAgIGludGVncmF0aW9uV2ViaG9va0xpc3RlbmVyX2V2ZW50cwogICAgICAgIGludGVncmF0aW9uSGVjTGlzdGVuZXJfZXZlbnRzCiAgICAgICAgaW50ZWdyYXRpb25TbGFja0RlbGVnYXRlX2V2ZW50cwogICAgICAgIGludGVncmF0aW9uVGVhbXNEZWxlZ2F0ZV9ldmVudHMKICAgICAgICBpbnRlZ3JhdGlvbkRhdGFkb2dEZWxlZ2F0ZV9ldmVudHMKICAgICAgICBpbnRlZ3JhdGlvbldlYmhvb2tEZWxlZ2F0ZV9ldmVudHMKICAgICAgICBzbGFja1RvU2xhY2tTZXJ2aWNlX2V2ZW50cwogICAgICAgIHNsYWNrU2VydmljZVRvU2xhY2tfZXZlbnRzCiAgICAgICAgdGVhbXNUb1RlYW1zU2VydmljZV9ldmVudHMKICAgICAgICB0ZWFtc1NlcnZpY2VUb1RlYW1zX2V2ZW50cwogICAgICAgIHdlYmhvb2tIYW5kbGVySHR0cENsaWVudF9ldmVudHMKICAgICAgICBkYXRhZG9nSGFuZGxlckh0dHBDbGllbnRfZXZlbnRzCiAgICAgICAgaHR0cFRvRGF0YWRvZ19ldmVudHMKICAgICAgICBodHRwVG9Dcm93ZHN0cmlrZV9ldmVudHMKICAgICAgICBodHRwVG9TcGx1bmtfZXZlbnRzCiAgICB9CiAgICBjb21wb25lbnQgc2VydmVyLmljb25zICJpY29uc19zZXJ2aWNlIiB7CiAgICAgIGluY2x1ZGUgKgogICAgfQoKICAgIHN5c3RlbUxhbmRzY2FwZSAiQml0d2FyZGVuIiB7CiAgICAgIGluY2x1ZGUgKgogICAgfQoKICAgIGNvbnRhaW5lciBzZXJ2ZXIgIkJpdHdhcmRlbl9TZXJ2ZXIiIHsKICAgICAgaW5jbHVkZSAqCiAgICB9CgogICAgZmlsdGVyZWQgQml0d2FyZGVuX1NlcnZlciBleGNsdWRlICJTZWxmLUhvc3RlZC1Pbmx5IiAiQ2xvdWQiCiAgICBmaWx0ZXJlZCBCaXR3YXJkZW5fU2VydmVyIGV4Y2x1ZGUgIkNsb3VkLU9ubHkiICJTZWxmLUhvc3RlZCIKCiAgICAvLyBUaGlzIGlzIGxhc3QgdG8gb3ZlcnJpZGUgdGVhbSBzdHlsZXMgd2l0aCBjb21tb24gc3R5bGVzCiAgICBzdHlsZXMgewogICAgICB0aGVtZSBkZWZhdWx0CiAgICAgIGVsZW1lbnQgIkVsZW1lbnQiIHsKICAgICAgICBjb2xvciAjM2MzYjNiCiAgICAgIH0KICAgICAgZWxlbWVudCAiUGVyc29uIiB7CiAgICAgICAgYmFja2dyb3VuZCAjZDM0NDA3CiAgICAgICAgc2hhcGUgcGVyc29uCiAgICAgIH0KICAgICAgZWxlbWVudCAiQ29udGFpbmVyIiB7CiAgICAgICAgYmFja2dyb3VuZCAjZjg4NzI4CiAgICAgIH0KICAgICAgZWxlbWVudCAiTVNQIiB7CiAgICAgICAgYmFja2dyb3VuZCAjMzEwN2QzCiAgICAgIH0KICAgICAgZWxlbWVudCAiUXVldWUiIHsKICAgICAgICBzaGFwZSBwaXBlCiAgICAgIH0KICAgICAgZWxlbWVudCAiTW9iaWxlIiB7CiAgICAgICAgc2hhcGUgbW9iaWxlRGV2aWNlUG9ydHJhaXQKICAgICAgfQogICAgICBlbGVtZW50ICJXZWIiIHsKICAgICAgICBzaGFwZSB3ZWJCcm93c2VyCiAgICAgIH0KICAgICAgZWxlbWVudCAiRGF0YWJhc2UiIHsKICAgICAgICBzaGFwZSBjeWxpbmRlcgogICAgICB9CiAgICAgIGVsZW1lbnQgIkV4dGVybmFsIiB7CiAgICAgICAgY29sb3IgIzAwMDAwMAogICAgICAgIGJhY2tncm91bmQgI2I1YjViNQogICAgICB9CiAgICB9CiAgfQp9"
|
|
},
|
|
"views" : {
|
|
"componentViews" : [ {
|
|
"containerId" : "33",
|
|
"dimensions" : {
|
|
"height" : 2921,
|
|
"width" : 3875
|
|
},
|
|
"elements" : [ {
|
|
"id" : "5",
|
|
"x" : 1031,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "7",
|
|
"x" : 1561,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "10",
|
|
"x" : 199,
|
|
"y" : 1585
|
|
}, {
|
|
"id" : "26",
|
|
"x" : 2101,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "29",
|
|
"x" : 341,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "30",
|
|
"x" : 2656,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "34",
|
|
"x" : 1721,
|
|
"y" : 575
|
|
}, {
|
|
"id" : "35",
|
|
"x" : 1744,
|
|
"y" : 1585
|
|
}, {
|
|
"id" : "36",
|
|
"x" : 789,
|
|
"y" : 1010
|
|
}, {
|
|
"id" : "37",
|
|
"x" : 2235,
|
|
"y" : 995
|
|
}, {
|
|
"id" : "38",
|
|
"x" : 3199,
|
|
"y" : 1010
|
|
}, {
|
|
"id" : "39",
|
|
"x" : 1753,
|
|
"y" : 1000
|
|
}, {
|
|
"id" : "40",
|
|
"x" : 1271,
|
|
"y" : 1005
|
|
}, {
|
|
"id" : "41",
|
|
"x" : 2717,
|
|
"y" : 1005
|
|
}, {
|
|
"id" : "42",
|
|
"x" : 2017,
|
|
"y" : 2240
|
|
}, {
|
|
"id" : "43",
|
|
"x" : 3200,
|
|
"y" : 2240
|
|
}, {
|
|
"id" : "44",
|
|
"x" : 1426,
|
|
"y" : 2240
|
|
}, {
|
|
"id" : "45",
|
|
"x" : 835,
|
|
"y" : 2240
|
|
}, {
|
|
"id" : "46",
|
|
"x" : 2608,
|
|
"y" : 2240
|
|
} ],
|
|
"externalContainerBoundariesVisible" : false,
|
|
"key" : "Azure_Service_Bus",
|
|
"order" : 1,
|
|
"relationships" : [ {
|
|
"id" : "153"
|
|
}, {
|
|
"id" : "175"
|
|
}, {
|
|
"id" : "177"
|
|
}, {
|
|
"id" : "179",
|
|
"position" : 10,
|
|
"vertices" : [ {
|
|
"x" : 1026,
|
|
"y" : 620
|
|
} ]
|
|
}, {
|
|
"id" : "181"
|
|
}, {
|
|
"id" : "183"
|
|
}, {
|
|
"id" : "195"
|
|
}, {
|
|
"id" : "196"
|
|
}, {
|
|
"id" : "197"
|
|
}, {
|
|
"id" : "198"
|
|
}, {
|
|
"id" : "199"
|
|
}, {
|
|
"id" : "200"
|
|
}, {
|
|
"id" : "201"
|
|
}, {
|
|
"id" : "202"
|
|
}, {
|
|
"id" : "203"
|
|
}, {
|
|
"id" : "204"
|
|
}, {
|
|
"id" : "205"
|
|
}, {
|
|
"id" : "208",
|
|
"vertices" : [ {
|
|
"x" : 1019,
|
|
"y" : 1415
|
|
} ]
|
|
}, {
|
|
"id" : "212",
|
|
"vertices" : [ {
|
|
"x" : 1484,
|
|
"y" : 1415
|
|
} ]
|
|
}, {
|
|
"id" : "214",
|
|
"vertices" : [ {
|
|
"x" : 2009,
|
|
"y" : 1375
|
|
} ]
|
|
}, {
|
|
"id" : "216",
|
|
"vertices" : [ {
|
|
"x" : 2474,
|
|
"y" : 1365
|
|
} ]
|
|
}, {
|
|
"id" : "218",
|
|
"vertices" : [ {
|
|
"x" : 2969,
|
|
"y" : 1385
|
|
} ]
|
|
}, {
|
|
"id" : "220",
|
|
"vertices" : [ {
|
|
"x" : 3439,
|
|
"y" : 1415
|
|
} ]
|
|
}, {
|
|
"id" : "224"
|
|
}, {
|
|
"id" : "233",
|
|
"position" : 15,
|
|
"vertices" : [ {
|
|
"x" : 465,
|
|
"y" : 2680
|
|
}, {
|
|
"x" : 2245,
|
|
"y" : 2675
|
|
} ]
|
|
}, {
|
|
"id" : "236",
|
|
"position" : 15,
|
|
"vertices" : [ {
|
|
"x" : 370,
|
|
"y" : 2750
|
|
}, {
|
|
"x" : 3440,
|
|
"y" : 2755
|
|
} ]
|
|
}, {
|
|
"id" : "239",
|
|
"position" : 15,
|
|
"vertices" : [ {
|
|
"x" : 495,
|
|
"y" : 2635
|
|
}, {
|
|
"x" : 1655,
|
|
"y" : 2645
|
|
} ]
|
|
}, {
|
|
"id" : "241",
|
|
"position" : 25,
|
|
"vertices" : [ {
|
|
"x" : 545,
|
|
"y" : 2445
|
|
} ]
|
|
}, {
|
|
"id" : "244",
|
|
"position" : 15,
|
|
"vertices" : [ {
|
|
"x" : 415,
|
|
"y" : 2720
|
|
}, {
|
|
"x" : 2840,
|
|
"y" : 2710
|
|
} ]
|
|
} ]
|
|
}, {
|
|
"containerId" : "47",
|
|
"dimensions" : {
|
|
"height" : 3096,
|
|
"width" : 3935
|
|
},
|
|
"elements" : [ {
|
|
"id" : "5",
|
|
"x" : 1688,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "7",
|
|
"x" : 180,
|
|
"y" : 1500
|
|
}, {
|
|
"id" : "26",
|
|
"x" : 3035,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "29",
|
|
"x" : 1015,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "30",
|
|
"x" : 2361,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "48",
|
|
"x" : 2025,
|
|
"y" : 615
|
|
}, {
|
|
"id" : "49",
|
|
"x" : 2025,
|
|
"y" : 1520
|
|
}, {
|
|
"id" : "50",
|
|
"x" : 3225,
|
|
"y" : 1010
|
|
}, {
|
|
"id" : "51",
|
|
"x" : 1752,
|
|
"y" : 1010
|
|
}, {
|
|
"id" : "52",
|
|
"x" : 2734,
|
|
"y" : 1010
|
|
}, {
|
|
"id" : "53",
|
|
"x" : 1261,
|
|
"y" : 1010
|
|
}, {
|
|
"id" : "54",
|
|
"x" : 770,
|
|
"y" : 1010
|
|
}, {
|
|
"id" : "55",
|
|
"x" : 2243,
|
|
"y" : 1010
|
|
}, {
|
|
"id" : "56",
|
|
"x" : 1536,
|
|
"y" : 2205
|
|
}, {
|
|
"id" : "57",
|
|
"x" : 2108,
|
|
"y" : 2205
|
|
}, {
|
|
"id" : "58",
|
|
"x" : 2680,
|
|
"y" : 2205
|
|
}, {
|
|
"id" : "59",
|
|
"x" : 964,
|
|
"y" : 2205
|
|
}, {
|
|
"id" : "60",
|
|
"x" : 3254,
|
|
"y" : 2205
|
|
}, {
|
|
"id" : "61",
|
|
"x" : 1536,
|
|
"y" : 2645
|
|
}, {
|
|
"id" : "62",
|
|
"x" : 2108,
|
|
"y" : 2645
|
|
}, {
|
|
"id" : "63",
|
|
"x" : 2680,
|
|
"y" : 2645
|
|
}, {
|
|
"id" : "64",
|
|
"x" : 964,
|
|
"y" : 2645
|
|
}, {
|
|
"id" : "65",
|
|
"x" : 3254,
|
|
"y" : 2645
|
|
} ],
|
|
"externalContainerBoundariesVisible" : false,
|
|
"key" : "RabbitMQ",
|
|
"order" : 2,
|
|
"relationships" : [ {
|
|
"id" : "153"
|
|
}, {
|
|
"id" : "185"
|
|
}, {
|
|
"id" : "187",
|
|
"vertices" : [ {
|
|
"x" : 404,
|
|
"y" : 760
|
|
} ]
|
|
}, {
|
|
"id" : "189"
|
|
}, {
|
|
"id" : "191"
|
|
}, {
|
|
"id" : "193"
|
|
}, {
|
|
"id" : "246"
|
|
}, {
|
|
"id" : "247"
|
|
}, {
|
|
"id" : "248"
|
|
}, {
|
|
"id" : "249"
|
|
}, {
|
|
"id" : "250"
|
|
}, {
|
|
"id" : "251"
|
|
}, {
|
|
"id" : "252",
|
|
"position" : 45
|
|
}, {
|
|
"id" : "253",
|
|
"position" : 45
|
|
}, {
|
|
"id" : "254",
|
|
"position" : 45
|
|
}, {
|
|
"id" : "255",
|
|
"position" : 45
|
|
}, {
|
|
"id" : "256",
|
|
"position" : 45
|
|
}, {
|
|
"id" : "257"
|
|
}, {
|
|
"id" : "258"
|
|
}, {
|
|
"id" : "259"
|
|
}, {
|
|
"id" : "260"
|
|
}, {
|
|
"id" : "261"
|
|
}, {
|
|
"id" : "264",
|
|
"vertices" : [ {
|
|
"x" : 3465,
|
|
"y" : 1350
|
|
} ]
|
|
}, {
|
|
"id" : "266",
|
|
"vertices" : [ {
|
|
"x" : 1005,
|
|
"y" : 1410
|
|
} ]
|
|
}, {
|
|
"id" : "268",
|
|
"vertices" : [ {
|
|
"x" : 1485,
|
|
"y" : 1370
|
|
} ]
|
|
}, {
|
|
"id" : "270",
|
|
"vertices" : [ {
|
|
"x" : 1990,
|
|
"y" : 1365
|
|
} ]
|
|
}, {
|
|
"id" : "272",
|
|
"vertices" : [ {
|
|
"x" : 2470,
|
|
"y" : 1365
|
|
} ]
|
|
}, {
|
|
"id" : "274",
|
|
"vertices" : [ {
|
|
"x" : 2960,
|
|
"y" : 1370
|
|
} ]
|
|
}, {
|
|
"id" : "285"
|
|
}, {
|
|
"id" : "288"
|
|
}, {
|
|
"id" : "290",
|
|
"position" : 10,
|
|
"vertices" : [ {
|
|
"x" : 555,
|
|
"y" : 2105
|
|
}, {
|
|
"x" : 2360,
|
|
"y" : 2120
|
|
} ]
|
|
}, {
|
|
"id" : "292",
|
|
"position" : 10,
|
|
"vertices" : [ {
|
|
"x" : 455,
|
|
"y" : 2130
|
|
}, {
|
|
"x" : 2900,
|
|
"y" : 2145
|
|
} ]
|
|
}, {
|
|
"id" : "294",
|
|
"vertices" : [ {
|
|
"x" : 910,
|
|
"y" : 2290
|
|
} ]
|
|
}, {
|
|
"id" : "296",
|
|
"position" : 5,
|
|
"vertices" : [ {
|
|
"x" : 485,
|
|
"y" : 2150
|
|
}, {
|
|
"x" : 3475,
|
|
"y" : 2170
|
|
} ]
|
|
} ]
|
|
}, {
|
|
"containerId" : "10",
|
|
"dimensions" : {
|
|
"height" : 2310,
|
|
"width" : 4137
|
|
},
|
|
"elements" : [ {
|
|
"id" : "11",
|
|
"x" : 627,
|
|
"y" : 1775
|
|
}, {
|
|
"id" : "33",
|
|
"x" : 1671,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "66",
|
|
"x" : 220,
|
|
"y" : 888
|
|
}, {
|
|
"id" : "67",
|
|
"x" : 792,
|
|
"y" : 510
|
|
}, {
|
|
"id" : "68",
|
|
"x" : 2647,
|
|
"y" : 510
|
|
}, {
|
|
"id" : "69",
|
|
"x" : 800,
|
|
"y" : 888
|
|
}, {
|
|
"id" : "70",
|
|
"x" : 2017,
|
|
"y" : 958
|
|
}, {
|
|
"id" : "71",
|
|
"x" : 2500,
|
|
"y" : 958
|
|
}, {
|
|
"id" : "72",
|
|
"x" : 2983,
|
|
"y" : 958
|
|
}, {
|
|
"id" : "73",
|
|
"x" : 3467,
|
|
"y" : 958
|
|
}, {
|
|
"id" : "74",
|
|
"x" : 1050,
|
|
"y" : 1360
|
|
}, {
|
|
"id" : "75",
|
|
"x" : 2025,
|
|
"y" : 1335
|
|
}, {
|
|
"id" : "76",
|
|
"x" : 2520,
|
|
"y" : 1338
|
|
}, {
|
|
"id" : "77",
|
|
"x" : 3250,
|
|
"y" : 1350
|
|
}, {
|
|
"id" : "78",
|
|
"x" : 1380,
|
|
"y" : 1045
|
|
}, {
|
|
"id" : "92",
|
|
"x" : 2800,
|
|
"y" : 1775
|
|
} ],
|
|
"externalContainerBoundariesVisible" : false,
|
|
"key" : "Events_Processor",
|
|
"order" : 3,
|
|
"relationships" : [ {
|
|
"id" : "207"
|
|
}, {
|
|
"id" : "210"
|
|
}, {
|
|
"id" : "221"
|
|
}, {
|
|
"id" : "223"
|
|
}, {
|
|
"id" : "225"
|
|
}, {
|
|
"id" : "226"
|
|
}, {
|
|
"id" : "228",
|
|
"vertices" : [ {
|
|
"x" : 1275,
|
|
"y" : 1930
|
|
} ]
|
|
}, {
|
|
"id" : "229",
|
|
"vertices" : [ {
|
|
"x" : 1470,
|
|
"y" : 1010
|
|
} ]
|
|
}, {
|
|
"id" : "230"
|
|
}, {
|
|
"id" : "232"
|
|
}, {
|
|
"id" : "234"
|
|
}, {
|
|
"id" : "237"
|
|
}, {
|
|
"id" : "242"
|
|
}, {
|
|
"id" : "245"
|
|
}, {
|
|
"id" : "301"
|
|
}, {
|
|
"id" : "303",
|
|
"vertices" : [ {
|
|
"x" : 2250,
|
|
"y" : 1935
|
|
} ]
|
|
}, {
|
|
"id" : "308"
|
|
}, {
|
|
"id" : "310"
|
|
}, {
|
|
"id" : "313"
|
|
}, {
|
|
"id" : "314"
|
|
}, {
|
|
"id" : "316"
|
|
} ]
|
|
}, {
|
|
"containerId" : "7",
|
|
"dimensions" : {
|
|
"height" : 2585,
|
|
"width" : 4005
|
|
},
|
|
"elements" : [ {
|
|
"id" : "11",
|
|
"x" : 284,
|
|
"y" : 2080
|
|
}, {
|
|
"id" : "47",
|
|
"x" : 1529,
|
|
"y" : 65
|
|
}, {
|
|
"id" : "79",
|
|
"x" : 479,
|
|
"y" : 490
|
|
}, {
|
|
"id" : "80",
|
|
"x" : 2519,
|
|
"y" : 500
|
|
}, {
|
|
"id" : "81",
|
|
"x" : 119,
|
|
"y" : 945
|
|
}, {
|
|
"id" : "82",
|
|
"x" : 694,
|
|
"y" : 950
|
|
}, {
|
|
"id" : "83",
|
|
"x" : 1884,
|
|
"y" : 970
|
|
}, {
|
|
"id" : "84",
|
|
"x" : 2400,
|
|
"y" : 970
|
|
}, {
|
|
"id" : "85",
|
|
"x" : 2916,
|
|
"y" : 970
|
|
}, {
|
|
"id" : "86",
|
|
"x" : 3434,
|
|
"y" : 970
|
|
}, {
|
|
"id" : "87",
|
|
"x" : 865,
|
|
"y" : 1620
|
|
}, {
|
|
"id" : "88",
|
|
"x" : 1884,
|
|
"y" : 1515
|
|
}, {
|
|
"id" : "89",
|
|
"x" : 2527,
|
|
"y" : 1515
|
|
}, {
|
|
"id" : "90",
|
|
"x" : 3170,
|
|
"y" : 1515
|
|
}, {
|
|
"id" : "91",
|
|
"x" : 1245,
|
|
"y" : 1300
|
|
}, {
|
|
"id" : "92",
|
|
"x" : 2545,
|
|
"y" : 2150
|
|
} ],
|
|
"externalContainerBoundariesVisible" : false,
|
|
"key" : "Events",
|
|
"order" : 4,
|
|
"relationships" : [ {
|
|
"id" : "263"
|
|
}, {
|
|
"id" : "275"
|
|
}, {
|
|
"id" : "276"
|
|
}, {
|
|
"id" : "278"
|
|
}, {
|
|
"id" : "279"
|
|
}, {
|
|
"id" : "280"
|
|
}, {
|
|
"id" : "281"
|
|
}, {
|
|
"id" : "282"
|
|
}, {
|
|
"id" : "284"
|
|
}, {
|
|
"id" : "287"
|
|
}, {
|
|
"id" : "297"
|
|
}, {
|
|
"id" : "298"
|
|
}, {
|
|
"id" : "299"
|
|
}, {
|
|
"id" : "300"
|
|
}, {
|
|
"id" : "325"
|
|
}, {
|
|
"id" : "327"
|
|
}, {
|
|
"id" : "330"
|
|
}, {
|
|
"id" : "332"
|
|
}, {
|
|
"id" : "334"
|
|
}, {
|
|
"id" : "335"
|
|
}, {
|
|
"id" : "337"
|
|
} ]
|
|
}, {
|
|
"containerId" : "98",
|
|
"dimensions" : {
|
|
"height" : 2510,
|
|
"width" : 1713
|
|
},
|
|
"elements" : [ {
|
|
"id" : "14",
|
|
"x" : 1035,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "99",
|
|
"x" : 1042,
|
|
"y" : 765
|
|
}, {
|
|
"id" : "100",
|
|
"x" : 292,
|
|
"y" : 765
|
|
}, {
|
|
"id" : "101",
|
|
"x" : 292,
|
|
"y" : 1365
|
|
}, {
|
|
"id" : "102",
|
|
"x" : 1042,
|
|
"y" : 1365
|
|
}, {
|
|
"id" : "108",
|
|
"x" : 199,
|
|
"y" : 1975
|
|
}, {
|
|
"id" : "112",
|
|
"x" : 789,
|
|
"y" : 1975
|
|
} ],
|
|
"externalContainerBoundariesVisible" : false,
|
|
"key" : "icons_service",
|
|
"order" : 7,
|
|
"relationships" : [ {
|
|
"id" : "103"
|
|
}, {
|
|
"id" : "106"
|
|
}, {
|
|
"id" : "107"
|
|
}, {
|
|
"id" : "109"
|
|
}, {
|
|
"id" : "113"
|
|
} ]
|
|
} ],
|
|
"configuration" : {
|
|
"branding" : { },
|
|
"lastSavedView" : "Events_RabbitMQ",
|
|
"metadataSymbols" : "SquareBrackets",
|
|
"styles" : {
|
|
"elements" : [ {
|
|
"background" : "#d34407",
|
|
"shape" : "Person",
|
|
"tag" : "Person"
|
|
}, {
|
|
"background" : "#3107d3",
|
|
"shape" : "Person",
|
|
"tag" : "MSP"
|
|
}, {
|
|
"color" : "#3c3b3b",
|
|
"tag" : "Element"
|
|
}, {
|
|
"background" : "#f88728",
|
|
"tag" : "Container"
|
|
}, {
|
|
"shape" : "Pipe",
|
|
"tag" : "Queue"
|
|
}, {
|
|
"shape" : "MobileDevicePortrait",
|
|
"tag" : "Mobile"
|
|
}, {
|
|
"shape" : "WebBrowser",
|
|
"tag" : "Web"
|
|
}, {
|
|
"shape" : "Cylinder",
|
|
"tag" : "Database"
|
|
}, {
|
|
"background" : "#b5b5b5",
|
|
"color" : "#000000",
|
|
"tag" : "External"
|
|
} ]
|
|
},
|
|
"terminology" : { },
|
|
"themes" : [ "https://static.structurizr.com/themes/default/theme.json" ]
|
|
},
|
|
"containerViews" : [ {
|
|
"dimensions" : {
|
|
"height" : 3997,
|
|
"width" : 6335
|
|
},
|
|
"elements" : [ {
|
|
"id" : "2",
|
|
"x" : 5735,
|
|
"y" : 2881
|
|
}, {
|
|
"id" : "3",
|
|
"x" : 5735,
|
|
"y" : 2336
|
|
}, {
|
|
"id" : "5",
|
|
"x" : 2165,
|
|
"y" : 1471
|
|
}, {
|
|
"id" : "7",
|
|
"x" : 1425,
|
|
"y" : 1735
|
|
}, {
|
|
"id" : "8",
|
|
"x" : 3755,
|
|
"y" : 1471
|
|
}, {
|
|
"id" : "9",
|
|
"x" : 3755,
|
|
"y" : 2771
|
|
}, {
|
|
"id" : "10",
|
|
"x" : 1645,
|
|
"y" : 2770
|
|
}, {
|
|
"id" : "11",
|
|
"x" : 2697,
|
|
"y" : 3371
|
|
}, {
|
|
"id" : "12",
|
|
"x" : 2914,
|
|
"y" : 2115
|
|
}, {
|
|
"id" : "13",
|
|
"x" : 3664,
|
|
"y" : 2115
|
|
}, {
|
|
"id" : "14",
|
|
"x" : 1360,
|
|
"y" : 865
|
|
}, {
|
|
"id" : "21",
|
|
"x" : 2110,
|
|
"y" : 865
|
|
}, {
|
|
"id" : "22",
|
|
"x" : 200,
|
|
"y" : 866
|
|
}, {
|
|
"id" : "23",
|
|
"x" : 3610,
|
|
"y" : 865
|
|
}, {
|
|
"id" : "25",
|
|
"x" : 3552,
|
|
"y" : 165
|
|
}, {
|
|
"id" : "26",
|
|
"x" : 2995,
|
|
"y" : 2771
|
|
}, {
|
|
"id" : "29",
|
|
"x" : 810,
|
|
"y" : 1471
|
|
}, {
|
|
"id" : "30",
|
|
"x" : 2405,
|
|
"y" : 2771
|
|
}, {
|
|
"id" : "31",
|
|
"x" : 2860,
|
|
"y" : 865
|
|
}, {
|
|
"id" : "32",
|
|
"x" : 4269,
|
|
"y" : 2115
|
|
}, {
|
|
"id" : "33",
|
|
"x" : 2125,
|
|
"y" : 2105
|
|
}, {
|
|
"id" : "47",
|
|
"x" : 2130,
|
|
"y" : 2110
|
|
}, {
|
|
"id" : "92",
|
|
"x" : 201,
|
|
"y" : 2775
|
|
}, {
|
|
"id" : "98",
|
|
"x" : 3005,
|
|
"y" : 1471
|
|
}, {
|
|
"id" : "108",
|
|
"x" : 5019,
|
|
"y" : 2115
|
|
}, {
|
|
"id" : "112",
|
|
"x" : 5019,
|
|
"y" : 2115
|
|
} ],
|
|
"externalSoftwareSystemBoundariesVisible" : false,
|
|
"key" : "Bitwarden_Server",
|
|
"order" : 9,
|
|
"relationships" : [ {
|
|
"id" : "104",
|
|
"position" : 15,
|
|
"vertices" : [ {
|
|
"x" : 1960,
|
|
"y" : 1165
|
|
}, {
|
|
"x" : 2710,
|
|
"y" : 1361
|
|
} ]
|
|
}, {
|
|
"id" : "110",
|
|
"vertices" : [ {
|
|
"x" : 3460,
|
|
"y" : 1765
|
|
}, {
|
|
"x" : 4869,
|
|
"y" : 2065
|
|
} ]
|
|
}, {
|
|
"id" : "114",
|
|
"vertices" : [ {
|
|
"x" : 3460,
|
|
"y" : 1765
|
|
}, {
|
|
"x" : 4869,
|
|
"y" : 2065
|
|
} ]
|
|
}, {
|
|
"id" : "125",
|
|
"vertices" : [ {
|
|
"x" : 5619,
|
|
"y" : 2065
|
|
}, {
|
|
"x" : 5619,
|
|
"y" : 2465
|
|
} ]
|
|
}, {
|
|
"id" : "128",
|
|
"vertices" : [ {
|
|
"x" : 1960,
|
|
"y" : 865
|
|
} ]
|
|
}, {
|
|
"id" : "129"
|
|
}, {
|
|
"id" : "131"
|
|
}, {
|
|
"id" : "135"
|
|
}, {
|
|
"id" : "147"
|
|
}, {
|
|
"id" : "153",
|
|
"position" : 10
|
|
}, {
|
|
"id" : "154"
|
|
}, {
|
|
"id" : "155",
|
|
"vertices" : [ {
|
|
"x" : 2764,
|
|
"y" : 2471
|
|
}, {
|
|
"x" : 3610,
|
|
"y" : 2771
|
|
}, {
|
|
"x" : 3585,
|
|
"y" : 3026
|
|
} ]
|
|
}, {
|
|
"id" : "156"
|
|
}, {
|
|
"id" : "157"
|
|
}, {
|
|
"id" : "158",
|
|
"vertices" : [ {
|
|
"x" : 3514,
|
|
"y" : 2071
|
|
} ]
|
|
}, {
|
|
"id" : "159"
|
|
}, {
|
|
"id" : "160"
|
|
}, {
|
|
"id" : "161"
|
|
}, {
|
|
"id" : "163"
|
|
}, {
|
|
"id" : "164",
|
|
"position" : 10,
|
|
"vertices" : [ {
|
|
"x" : 1375,
|
|
"y" : 3205
|
|
} ]
|
|
}, {
|
|
"id" : "165"
|
|
}, {
|
|
"id" : "167",
|
|
"position" : 65,
|
|
"vertices" : [ {
|
|
"x" : 3020,
|
|
"y" : 1240
|
|
} ]
|
|
}, {
|
|
"id" : "170",
|
|
"vertices" : [ {
|
|
"x" : 2710,
|
|
"y" : 1765
|
|
}, {
|
|
"x" : 4239,
|
|
"y" : 2065
|
|
} ]
|
|
}, {
|
|
"id" : "173",
|
|
"vertices" : [ {
|
|
"x" : 2616,
|
|
"y" : 1197
|
|
} ]
|
|
}, {
|
|
"id" : "176",
|
|
"position" : 30
|
|
}, {
|
|
"id" : "178",
|
|
"position" : 70
|
|
}, {
|
|
"id" : "180",
|
|
"position" : 70,
|
|
"vertices" : [ {
|
|
"x" : 1465,
|
|
"y" : 2240
|
|
} ]
|
|
}, {
|
|
"id" : "182",
|
|
"position" : 10
|
|
}, {
|
|
"id" : "184",
|
|
"position" : 10
|
|
}, {
|
|
"id" : "186"
|
|
}, {
|
|
"id" : "188",
|
|
"position" : 40
|
|
}, {
|
|
"id" : "190",
|
|
"vertices" : [ {
|
|
"x" : 1480,
|
|
"y" : 2245
|
|
} ]
|
|
}, {
|
|
"id" : "192"
|
|
}, {
|
|
"id" : "194"
|
|
}, {
|
|
"id" : "209"
|
|
}, {
|
|
"id" : "227"
|
|
}, {
|
|
"id" : "27"
|
|
}, {
|
|
"id" : "277",
|
|
"vertices" : [ {
|
|
"x" : 1750,
|
|
"y" : 2905
|
|
} ]
|
|
}, {
|
|
"id" : "305"
|
|
}, {
|
|
"id" : "329"
|
|
}, {
|
|
"id" : "343"
|
|
} ],
|
|
"softwareSystemId" : "4"
|
|
} ],
|
|
"dynamicViews" : [ {
|
|
"description" : "Event Integrations / ASB Detail",
|
|
"dimensions" : {
|
|
"height" : 3656,
|
|
"width" : 4760
|
|
},
|
|
"elementId" : "10",
|
|
"elements" : [ {
|
|
"id" : "11",
|
|
"x" : 4110,
|
|
"y" : 681
|
|
}, {
|
|
"id" : "34",
|
|
"x" : 230,
|
|
"y" : 681
|
|
}, {
|
|
"id" : "35",
|
|
"x" : 220,
|
|
"y" : 2320
|
|
}, {
|
|
"id" : "36",
|
|
"x" : 1014,
|
|
"y" : 172
|
|
}, {
|
|
"id" : "37",
|
|
"x" : 1014,
|
|
"y" : 884
|
|
}, {
|
|
"id" : "38",
|
|
"x" : 1014,
|
|
"y" : 1242
|
|
}, {
|
|
"id" : "39",
|
|
"x" : 1014,
|
|
"y" : 528
|
|
}, {
|
|
"id" : "42",
|
|
"x" : 1010,
|
|
"y" : 1685
|
|
}, {
|
|
"id" : "43",
|
|
"x" : 1010,
|
|
"y" : 2669
|
|
}, {
|
|
"id" : "44",
|
|
"x" : 1010,
|
|
"y" : 3000
|
|
}, {
|
|
"id" : "45",
|
|
"x" : 1010,
|
|
"y" : 2341
|
|
}, {
|
|
"id" : "46",
|
|
"x" : 1010,
|
|
"y" : 2013
|
|
}, {
|
|
"id" : "66",
|
|
"x" : 3300,
|
|
"y" : 191
|
|
}, {
|
|
"id" : "67",
|
|
"x" : 1983,
|
|
"y" : 191
|
|
}, {
|
|
"id" : "68",
|
|
"x" : 2005,
|
|
"y" : 2320
|
|
}, {
|
|
"id" : "69",
|
|
"x" : 2465,
|
|
"y" : 666
|
|
}, {
|
|
"id" : "70",
|
|
"x" : 2705,
|
|
"y" : 1720
|
|
}, {
|
|
"id" : "71",
|
|
"x" : 2705,
|
|
"y" : 2060
|
|
}, {
|
|
"id" : "72",
|
|
"x" : 2705,
|
|
"y" : 2544
|
|
}, {
|
|
"id" : "73",
|
|
"x" : 2705,
|
|
"y" : 2904
|
|
}, {
|
|
"id" : "74",
|
|
"x" : 3335,
|
|
"y" : 896
|
|
}, {
|
|
"id" : "75",
|
|
"x" : 3325,
|
|
"y" : 1720
|
|
}, {
|
|
"id" : "76",
|
|
"x" : 3325,
|
|
"y" : 2060
|
|
}, {
|
|
"id" : "77",
|
|
"x" : 3325,
|
|
"y" : 2709
|
|
}, {
|
|
"id" : "78",
|
|
"x" : 2880,
|
|
"y" : 1171
|
|
}, {
|
|
"id" : "93",
|
|
"x" : 4055,
|
|
"y" : 1720
|
|
}, {
|
|
"id" : "94",
|
|
"x" : 4055,
|
|
"y" : 2060
|
|
}, {
|
|
"id" : "95",
|
|
"x" : 4055,
|
|
"y" : 3108
|
|
}, {
|
|
"id" : "96",
|
|
"x" : 4055,
|
|
"y" : 2444
|
|
}, {
|
|
"id" : "97",
|
|
"x" : 4055,
|
|
"y" : 2776
|
|
} ],
|
|
"externalBoundariesVisible" : false,
|
|
"key" : "Events_Processor_Azure_Service_Bus",
|
|
"order" : 5,
|
|
"relationships" : [ {
|
|
"id" : "195",
|
|
"order" : "1",
|
|
"response" : false
|
|
}, {
|
|
"id" : "197",
|
|
"order" : "2",
|
|
"response" : false
|
|
}, {
|
|
"id" : "198",
|
|
"order" : "3",
|
|
"response" : false
|
|
}, {
|
|
"id" : "200",
|
|
"order" : "4",
|
|
"response" : false
|
|
}, {
|
|
"id" : "206",
|
|
"order" : "5",
|
|
"response" : false
|
|
}, {
|
|
"id" : "213",
|
|
"order" : "6",
|
|
"response" : false
|
|
}, {
|
|
"id" : "215",
|
|
"order" : "7",
|
|
"response" : false
|
|
}, {
|
|
"id" : "219",
|
|
"order" : "8",
|
|
"response" : false
|
|
}, {
|
|
"id" : "210",
|
|
"order" : "9",
|
|
"response" : false
|
|
}, {
|
|
"id" : "230",
|
|
"order" : "10",
|
|
"response" : false
|
|
}, {
|
|
"id" : "221",
|
|
"order" : "11",
|
|
"response" : false
|
|
}, {
|
|
"id" : "226",
|
|
"order" : "12",
|
|
"response" : false
|
|
}, {
|
|
"id" : "225",
|
|
"order" : "13",
|
|
"response" : false
|
|
}, {
|
|
"id" : "228",
|
|
"order" : "14",
|
|
"response" : false
|
|
}, {
|
|
"id" : "229",
|
|
"order" : "15",
|
|
"response" : false
|
|
}, {
|
|
"id" : "222",
|
|
"order" : "16",
|
|
"response" : false,
|
|
"vertices" : [ {
|
|
"x" : 2440,
|
|
"y" : 1615
|
|
}, {
|
|
"x" : 455,
|
|
"y" : 1615
|
|
} ]
|
|
}, {
|
|
"id" : "203",
|
|
"order" : "17",
|
|
"response" : false
|
|
}, {
|
|
"id" : "204",
|
|
"order" : "18",
|
|
"response" : false
|
|
}, {
|
|
"id" : "201",
|
|
"order" : "19",
|
|
"response" : false
|
|
}, {
|
|
"id" : "205",
|
|
"order" : "20",
|
|
"response" : false
|
|
}, {
|
|
"id" : "202",
|
|
"order" : "21",
|
|
"response" : false
|
|
}, {
|
|
"id" : "231",
|
|
"order" : "22",
|
|
"response" : false
|
|
}, {
|
|
"id" : "243",
|
|
"order" : "23",
|
|
"response" : false
|
|
}, {
|
|
"id" : "240",
|
|
"order" : "24",
|
|
"response" : false
|
|
}, {
|
|
"id" : "235",
|
|
"order" : "25",
|
|
"response" : false
|
|
}, {
|
|
"id" : "238",
|
|
"order" : "26",
|
|
"response" : false
|
|
}, {
|
|
"id" : "234",
|
|
"order" : "27",
|
|
"response" : false
|
|
}, {
|
|
"id" : "245",
|
|
"order" : "28",
|
|
"response" : false
|
|
}, {
|
|
"id" : "242",
|
|
"order" : "29",
|
|
"response" : false
|
|
}, {
|
|
"id" : "237",
|
|
"order" : "30",
|
|
"response" : false
|
|
}, {
|
|
"id" : "301",
|
|
"order" : "31",
|
|
"response" : false
|
|
}, {
|
|
"id" : "302",
|
|
"order" : "32",
|
|
"response" : false
|
|
}, {
|
|
"id" : "308",
|
|
"order" : "33",
|
|
"response" : false
|
|
}, {
|
|
"id" : "309",
|
|
"order" : "34",
|
|
"response" : false
|
|
}, {
|
|
"id" : "314",
|
|
"order" : "35",
|
|
"response" : false
|
|
}, {
|
|
"id" : "313",
|
|
"order" : "36",
|
|
"response" : false
|
|
}, {
|
|
"id" : "319",
|
|
"order" : "37",
|
|
"response" : false
|
|
}, {
|
|
"id" : "315",
|
|
"order" : "38",
|
|
"response" : false
|
|
}, {
|
|
"id" : "322",
|
|
"order" : "39",
|
|
"response" : false
|
|
} ]
|
|
}, {
|
|
"description" : "Event Integrations / RabbitMQ Detail",
|
|
"dimensions" : {
|
|
"height" : 3878,
|
|
"width" : 4330
|
|
},
|
|
"elementId" : "7",
|
|
"elements" : [ {
|
|
"id" : "11",
|
|
"x" : 3664,
|
|
"y" : 560
|
|
}, {
|
|
"id" : "48",
|
|
"x" : 219,
|
|
"y" : 706
|
|
}, {
|
|
"id" : "49",
|
|
"x" : 239,
|
|
"y" : 2465
|
|
}, {
|
|
"id" : "50",
|
|
"x" : 969,
|
|
"y" : 266
|
|
}, {
|
|
"id" : "51",
|
|
"x" : 969,
|
|
"y" : 952
|
|
}, {
|
|
"id" : "52",
|
|
"x" : 969,
|
|
"y" : 1296
|
|
}, {
|
|
"id" : "53",
|
|
"x" : 969,
|
|
"y" : 609
|
|
}, {
|
|
"id" : "56",
|
|
"x" : 969,
|
|
"y" : 1736
|
|
}, {
|
|
"id" : "57",
|
|
"x" : 969,
|
|
"y" : 2822
|
|
}, {
|
|
"id" : "58",
|
|
"x" : 969,
|
|
"y" : 3184
|
|
}, {
|
|
"id" : "59",
|
|
"x" : 969,
|
|
"y" : 2465
|
|
}, {
|
|
"id" : "60",
|
|
"x" : 969,
|
|
"y" : 2098
|
|
}, {
|
|
"id" : "79",
|
|
"x" : 1852,
|
|
"y" : 266
|
|
}, {
|
|
"id" : "80",
|
|
"x" : 1679,
|
|
"y" : 2465
|
|
}, {
|
|
"id" : "81",
|
|
"x" : 2715,
|
|
"y" : 266
|
|
}, {
|
|
"id" : "82",
|
|
"x" : 2155,
|
|
"y" : 815
|
|
}, {
|
|
"id" : "83",
|
|
"x" : 2334,
|
|
"y" : 1750
|
|
}, {
|
|
"id" : "84",
|
|
"x" : 2334,
|
|
"y" : 2115
|
|
}, {
|
|
"id" : "85",
|
|
"x" : 2334,
|
|
"y" : 2670
|
|
}, {
|
|
"id" : "86",
|
|
"x" : 2334,
|
|
"y" : 3230
|
|
}, {
|
|
"id" : "87",
|
|
"x" : 2929,
|
|
"y" : 1005
|
|
}, {
|
|
"id" : "88",
|
|
"x" : 2949,
|
|
"y" : 1750
|
|
}, {
|
|
"id" : "89",
|
|
"x" : 2934,
|
|
"y" : 2115
|
|
}, {
|
|
"id" : "90",
|
|
"x" : 2944,
|
|
"y" : 2890
|
|
}, {
|
|
"id" : "91",
|
|
"x" : 2489,
|
|
"y" : 1330
|
|
}, {
|
|
"id" : "93",
|
|
"x" : 3674,
|
|
"y" : 1750
|
|
}, {
|
|
"id" : "94",
|
|
"x" : 3679,
|
|
"y" : 2115
|
|
}, {
|
|
"id" : "95",
|
|
"x" : 3664,
|
|
"y" : 3330
|
|
}, {
|
|
"id" : "96",
|
|
"x" : 3679,
|
|
"y" : 2537
|
|
}, {
|
|
"id" : "97",
|
|
"x" : 3674,
|
|
"y" : 2933
|
|
} ],
|
|
"externalBoundariesVisible" : false,
|
|
"key" : "Events_RabbitMQ",
|
|
"order" : 6,
|
|
"relationships" : [ {
|
|
"id" : "246",
|
|
"order" : "1",
|
|
"response" : false
|
|
}, {
|
|
"id" : "248",
|
|
"order" : "2",
|
|
"response" : false
|
|
}, {
|
|
"id" : "249",
|
|
"order" : "3",
|
|
"response" : false
|
|
}, {
|
|
"id" : "251",
|
|
"order" : "4",
|
|
"response" : false
|
|
}, {
|
|
"id" : "262",
|
|
"order" : "5",
|
|
"response" : false
|
|
}, {
|
|
"id" : "267",
|
|
"order" : "6",
|
|
"response" : false
|
|
}, {
|
|
"id" : "269",
|
|
"order" : "7",
|
|
"response" : false
|
|
}, {
|
|
"id" : "273",
|
|
"order" : "8",
|
|
"response" : false
|
|
}, {
|
|
"id" : "275",
|
|
"order" : "9",
|
|
"response" : false
|
|
}, {
|
|
"id" : "276",
|
|
"order" : "10",
|
|
"response" : false
|
|
}, {
|
|
"id" : "278",
|
|
"order" : "11",
|
|
"response" : false
|
|
}, {
|
|
"id" : "279",
|
|
"order" : "12",
|
|
"response" : false
|
|
}, {
|
|
"id" : "281",
|
|
"order" : "13",
|
|
"response" : false
|
|
}, {
|
|
"id" : "280",
|
|
"order" : "14",
|
|
"response" : false
|
|
}, {
|
|
"id" : "282",
|
|
"order" : "15",
|
|
"response" : false
|
|
}, {
|
|
"id" : "283",
|
|
"order" : "16",
|
|
"response" : false,
|
|
"vertices" : [ {
|
|
"x" : 2365,
|
|
"y" : 1650
|
|
}, {
|
|
"x" : 474,
|
|
"y" : 1650
|
|
} ]
|
|
}, {
|
|
"id" : "254",
|
|
"order" : "17",
|
|
"response" : false
|
|
}, {
|
|
"id" : "256",
|
|
"order" : "18",
|
|
"response" : false
|
|
}, {
|
|
"id" : "253",
|
|
"order" : "19",
|
|
"response" : false
|
|
}, {
|
|
"id" : "255",
|
|
"order" : "20",
|
|
"response" : false
|
|
}, {
|
|
"id" : "252",
|
|
"order" : "21",
|
|
"response" : false
|
|
}, {
|
|
"id" : "286",
|
|
"order" : "22",
|
|
"response" : false
|
|
}, {
|
|
"id" : "295",
|
|
"order" : "23",
|
|
"response" : false
|
|
}, {
|
|
"id" : "293",
|
|
"order" : "24",
|
|
"response" : false
|
|
}, {
|
|
"id" : "289",
|
|
"order" : "25",
|
|
"response" : false
|
|
}, {
|
|
"id" : "291",
|
|
"order" : "26",
|
|
"response" : false
|
|
}, {
|
|
"id" : "297",
|
|
"order" : "27",
|
|
"response" : false
|
|
}, {
|
|
"id" : "298",
|
|
"order" : "28",
|
|
"response" : false
|
|
}, {
|
|
"id" : "299",
|
|
"order" : "29",
|
|
"response" : false
|
|
}, {
|
|
"id" : "300",
|
|
"order" : "30",
|
|
"response" : false
|
|
}, {
|
|
"id" : "325",
|
|
"order" : "31",
|
|
"response" : false
|
|
}, {
|
|
"id" : "326",
|
|
"order" : "32",
|
|
"response" : false
|
|
}, {
|
|
"id" : "330",
|
|
"order" : "33",
|
|
"response" : false
|
|
}, {
|
|
"id" : "331",
|
|
"order" : "34",
|
|
"response" : false
|
|
}, {
|
|
"id" : "334",
|
|
"order" : "35",
|
|
"response" : false
|
|
}, {
|
|
"id" : "335",
|
|
"order" : "36",
|
|
"response" : false
|
|
}, {
|
|
"id" : "339",
|
|
"order" : "37",
|
|
"response" : false
|
|
}, {
|
|
"id" : "336",
|
|
"order" : "38",
|
|
"response" : false
|
|
}, {
|
|
"id" : "341",
|
|
"order" : "39",
|
|
"response" : false
|
|
} ]
|
|
} ],
|
|
"filteredViews" : [ {
|
|
"baseViewKey" : "Bitwarden_Server",
|
|
"key" : "Cloud",
|
|
"mode" : "Exclude",
|
|
"order" : 10,
|
|
"tags" : [ "Self-Hosted-Only" ]
|
|
}, {
|
|
"baseViewKey" : "Bitwarden_Server",
|
|
"key" : "Self-Hosted",
|
|
"mode" : "Exclude",
|
|
"order" : 11,
|
|
"tags" : [ "Cloud-Only" ]
|
|
} ],
|
|
"systemLandscapeViews" : [ {
|
|
"dimensions" : {
|
|
"height" : 2820,
|
|
"width" : 4433
|
|
},
|
|
"elements" : [ {
|
|
"id" : "1",
|
|
"x" : 2425,
|
|
"y" : 208
|
|
}, {
|
|
"id" : "2",
|
|
"x" : 208,
|
|
"y" : 908
|
|
}, {
|
|
"id" : "3",
|
|
"x" : 908,
|
|
"y" : 908
|
|
}, {
|
|
"id" : "4",
|
|
"x" : 1635,
|
|
"y" : 1605
|
|
}, {
|
|
"id" : "14",
|
|
"x" : 3110,
|
|
"y" : 960
|
|
}, {
|
|
"id" : "21",
|
|
"x" : 2358,
|
|
"y" : 958
|
|
}, {
|
|
"id" : "22",
|
|
"x" : 1608,
|
|
"y" : 958
|
|
}, {
|
|
"id" : "23",
|
|
"x" : 3195,
|
|
"y" : 2210
|
|
}, {
|
|
"id" : "24",
|
|
"x" : 3125,
|
|
"y" : 208
|
|
}, {
|
|
"id" : "25",
|
|
"x" : 3825,
|
|
"y" : 208
|
|
}, {
|
|
"id" : "31",
|
|
"x" : 1633,
|
|
"y" : 2210
|
|
}, {
|
|
"id" : "32",
|
|
"x" : 883,
|
|
"y" : 2210
|
|
}, {
|
|
"id" : "92",
|
|
"x" : 265,
|
|
"y" : 2215
|
|
}, {
|
|
"id" : "108",
|
|
"x" : 2383,
|
|
"y" : 2210
|
|
}, {
|
|
"id" : "112",
|
|
"x" : 2383,
|
|
"y" : 2210
|
|
} ],
|
|
"enterpriseBoundaryVisible" : true,
|
|
"key" : "Bitwarden",
|
|
"order" : 8,
|
|
"paperSize" : "A3_Landscape",
|
|
"relationships" : [ {
|
|
"id" : "105",
|
|
"vertices" : [ {
|
|
"x" : 2958,
|
|
"y" : 1308
|
|
} ]
|
|
}, {
|
|
"id" : "111"
|
|
}, {
|
|
"id" : "115"
|
|
}, {
|
|
"id" : "117"
|
|
}, {
|
|
"id" : "124"
|
|
}, {
|
|
"id" : "126",
|
|
"vertices" : [ {
|
|
"x" : 3708,
|
|
"y" : 1308
|
|
} ]
|
|
}, {
|
|
"id" : "128"
|
|
}, {
|
|
"id" : "130"
|
|
}, {
|
|
"id" : "132",
|
|
"vertices" : [ {
|
|
"x" : 729,
|
|
"y" : 1308
|
|
} ]
|
|
}, {
|
|
"id" : "162"
|
|
}, {
|
|
"id" : "168",
|
|
"vertices" : [ {
|
|
"x" : 1708,
|
|
"y" : 2058
|
|
} ]
|
|
}, {
|
|
"id" : "171"
|
|
}, {
|
|
"id" : "174",
|
|
"vertices" : [ {
|
|
"x" : 2008,
|
|
"y" : 2058
|
|
} ]
|
|
}, {
|
|
"id" : "28"
|
|
}, {
|
|
"id" : "307"
|
|
}, {
|
|
"id" : "344"
|
|
} ]
|
|
} ]
|
|
}
|
|
} |