From c425a447a7c94a21ebb945fdcbfd2ae7c256daa9 Mon Sep 17 00:00:00 2001
From: Kosta Petan
Date: Fri, 19 Jul 2024 13:57:13 -0700
Subject: [PATCH] Marketing sample migration to AGNext (#234)
---
.devcontainer/devcontainer.json | 4 +-
dotnet/AGNext.sln | 68 +-
dotnet/Directory.Packages.props | 107 +-
.../Greeter/Greeter.AgentHost/Program.cs | 5 +-
.../{Client.cs => AgentClient.cs} | 7 +-
.../Greeter/Greeter.AgentWorker/Program.cs | 8 +-
.../Agents/Architect/Architect.cs | 3 +-
.../Agents/Developer/Developer.cs | 1 -
.../Agents/DeveloperLead/DeveloperLead.cs | 1 -
.../Agents/ProductManager/ProductManager.cs | 1 -
.../Microsoft.AI.DevTeam/Agents/Sandbox.cs | 1 -
.../Services/GithubWebHookProcessor.cs | 2 +-
dotnet/samples/marketing/.gitignore | 1 -
dotnet/samples/marketing/README.md | 40 -
dotnet/samples/marketing/azure.yaml | 20 -
.../marketing/infra/abbreviations.json | 135 -
.../samples/marketing/infra/app/backend.bicep | 133 -
.../marketing/infra/app/frontend.bicep | 132 -
dotnet/samples/marketing/infra/main.bicep | 135 -
.../marketing/infra/main.parameters.json | 59 -
.../infra/modules/fetch-container-image.bicep | 8 -
.../marketing/infra/shared/apps-env.bicep | 33 -
.../infra/shared/dashboard-web.bicep | 1231 --
.../marketing/infra/shared/keyvault.bicep | 31 -
.../marketing/infra/shared/monitoring.bicep | 34 -
.../marketing/infra/shared/registry.bicep | 36 -
dotnet/samples/marketing/next-steps.md | 96 -
.../samples/marketing/readme-media/agents.png | Bin 926329 -> 0 bytes
.../marketing/readme-media/screenshot.png | Bin 2518978 -> 0 bytes
dotnet/samples/marketing/run.ps1 | 13 -
dotnet/samples/marketing/run.sh | 16 -
.../samples/marketing/src/backend/.gitignore | 485 -
.../CommunityManager/CommunityManager.cs | 79 -
.../CommunityManagerPrompts.cs | 11 -
.../CommunityManager/CommunityManagerState.cs | 8 -
.../GraphicDesigner/GraphicDesignedState.cs | 8 -
.../Agents/GraphicDesigner/GraphicDesigner.cs | 74 -
.../GraphicDesigner/GraphicDesignerPrompts.cs | 11 -
.../backend/Agents/SignalR/SignalRAgent.cs | 48 -
.../src/backend/Agents/Writer/IWritter.cs | 5 -
.../src/backend/Agents/Writer/Writer.cs | 75 -
.../backend/Agents/Writer/WriterPrompts.cs | 12 -
.../src/backend/Agents/Writer/WriterState.cs | 8 -
.../src/backend/Controller/Articles.cs | 63 -
.../samples/marketing/src/backend/Dockerfile | 23 -
.../src/backend/Events/EventTypes.cs | 10 -
.../marketing/src/backend/Marketing.csproj | 51 -
.../marketing/src/backend/Marketing.sln | 37 -
.../marketing/src/backend/Options/Consts.cs | 6 -
.../src/backend/Options/OpenAIOptions.cs | 30 -
.../src/backend/Options/QdrantOptions.cs | 10 -
.../samples/marketing/src/backend/Program.cs | 160 -
.../backend/Properties/launchSettings.json | 33 -
.../src/backend/SignalRHub/AgentTypes.cs | 11 -
.../src/backend/SignalRHub/ArticleHub.cs | 78 -
.../src/backend/SignalRHub/FrontEndMessage.cs | 8 -
.../src/backend/SignalRHub/IArticleHub.cs | 10 -
.../src/backend/SignalRHub/ISignalRService.cs | 5 -
.../SignalRHub/SignalRConnectionsDB.cs | 9 -
.../src/backend/SignalRHub/SignalRService.cs | 24 -
.../backend/appsettings.local.template.json | 34 -
.../marketing/src/frontend/.eslintrc.json | 3 -
.../samples/marketing/src/frontend/.gitignore | 38 -
dotnet/samples/marketing/src/frontend/.npmrc | 2 -
.../samples/marketing/src/frontend/Dockerfile | 43 -
.../samples/marketing/src/frontend/README.MD | 11 -
.../marketing/src/frontend/next.config.mjs | 17 -
.../marketing/src/frontend/package-lock.json | 10363 ----------------
.../marketing/src/frontend/package.json | 52 -
.../frontend/public/static/background1.webp | Bin 384712 -> 0 bytes
.../src/frontend/public/static/check.png | Bin 2787 -> 0 bytes
.../src/frontend/public/static/face.jpg | Bin 5195 -> 0 bytes
.../src/frontend/public/static/face2.jpg | Bin 66564 -> 0 bytes
.../src/frontend/public/static/icons/docs.png | Bin 15771 -> 0 bytes
.../src/frontend/public/static/icons/edge.png | Bin 84596 -> 0 bytes
.../src/frontend/public/static/icons/pdf.png | Bin 28777 -> 0 bytes
.../src/frontend/public/static/icons/xslx.png | Bin 14950 -> 0 bytes
.../src/frontend/public/static/x.png | Bin 2490 -> 0 bytes
.../frontend/src/app/forgot-password/page.tsx | 23 -
.../marketing/src/frontend/src/app/icon.ico | Bin 7406 -> 0 bytes
.../marketing/src/frontend/src/app/layout.tsx | 68 -
.../src/frontend/src/app/login/page.tsx | 23 -
.../frontend/src/app/marketing/chat/chat.tsx | 147 -
.../community-manager/community-manager.tsx | 131 -
.../frontend/src/app/marketing/costs/cost.tsx | 111 -
.../frontend/src/app/marketing/docs/docs.tsx | 170 -
.../src/frontend/src/app/marketing/page.tsx | 187 -
.../marketing/stakeholders/stakeholders.tsx | 218 -
.../src/frontend/src/app/not-found.tsx | 15 -
.../marketing/src/frontend/src/app/page.tsx | 16 -
.../src/frontend/src/app/register/page.tsx | 23 -
.../src/components/auth-page/index.tsx | 14 -
.../frontend/src/components/header/index.tsx | 80 -
.../src/components/themed-layout/index.tsx | 11 -
.../src/contexts/color-mode/index.tsx | 72 -
.../src/frontend/src/interfaces/theme.d.ts | 15 -
.../auth-provider/auth-provider.server.ts | 21 -
.../providers/auth-provider/auth-provider.ts | 91 -
.../src/providers/auth-provider/index.ts | 2 -
.../src/providers/data-provider/index.ts | 7 -
.../frontend/src/providers/devtools/index.tsx | 16 -
.../marketing/src/frontend/tsconfig.json | 44 -
.../src/Microsoft.AI.Agents.Orleans/Agent.cs | 1 -
.../Microsoft.AI.Agents.Orleans/AiAgent.cs | 3 +-
.../Agent.cs | 13 -
.../AgentBase.cs | 14 +-
.../AgentWorkerRuntime.cs | 210 +-
.../AgentStateGrain.cs | 2 -
.../AgentWorkerRegistryGrain.cs | 2 +-
.../WorkerGateway.cs | 17 +-
.../WorkerProcessConnection.cs | 72 +-
.../Abstractions/ChatHistoryItem.cs | 1 -
python/samples/marketing-agents/app.py | 3 +
python/samples/marketing-agents/auditor.py | 2 +-
.../marketing-agents/graphic_designer.py | 21 +-
python/samples/marketing-agents/messages.py | 12 +-
python/samples/marketing-agents/test_usage.py | 12 +-
python/samples/marketing-agents/worker.py | 20 +-
python/src/agnext/worker/worker_runtime.py | 91 +-
python/worker_example.py | 4 +-
120 files changed, 441 insertions(+), 15880 deletions(-)
rename dotnet/samples/Greeter/Greeter.AgentWorker/{Client.cs => AgentClient.cs} (63%)
delete mode 100644 dotnet/samples/marketing/.gitignore
delete mode 100644 dotnet/samples/marketing/README.md
delete mode 100644 dotnet/samples/marketing/azure.yaml
delete mode 100644 dotnet/samples/marketing/infra/abbreviations.json
delete mode 100644 dotnet/samples/marketing/infra/app/backend.bicep
delete mode 100644 dotnet/samples/marketing/infra/app/frontend.bicep
delete mode 100644 dotnet/samples/marketing/infra/main.bicep
delete mode 100644 dotnet/samples/marketing/infra/main.parameters.json
delete mode 100644 dotnet/samples/marketing/infra/modules/fetch-container-image.bicep
delete mode 100644 dotnet/samples/marketing/infra/shared/apps-env.bicep
delete mode 100644 dotnet/samples/marketing/infra/shared/dashboard-web.bicep
delete mode 100644 dotnet/samples/marketing/infra/shared/keyvault.bicep
delete mode 100644 dotnet/samples/marketing/infra/shared/monitoring.bicep
delete mode 100644 dotnet/samples/marketing/infra/shared/registry.bicep
delete mode 100644 dotnet/samples/marketing/next-steps.md
delete mode 100644 dotnet/samples/marketing/readme-media/agents.png
delete mode 100644 dotnet/samples/marketing/readme-media/screenshot.png
delete mode 100644 dotnet/samples/marketing/run.ps1
delete mode 100644 dotnet/samples/marketing/run.sh
delete mode 100644 dotnet/samples/marketing/src/backend/.gitignore
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/CommunityManager/CommunityManager.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/CommunityManager/CommunityManagerPrompts.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/CommunityManager/CommunityManagerState.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/GraphicDesigner/GraphicDesignedState.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/GraphicDesigner/GraphicDesigner.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/GraphicDesigner/GraphicDesignerPrompts.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/SignalR/SignalRAgent.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/Writer/IWritter.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/Writer/Writer.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/Writer/WriterPrompts.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Agents/Writer/WriterState.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Controller/Articles.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Dockerfile
delete mode 100644 dotnet/samples/marketing/src/backend/Events/EventTypes.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Marketing.csproj
delete mode 100644 dotnet/samples/marketing/src/backend/Marketing.sln
delete mode 100644 dotnet/samples/marketing/src/backend/Options/Consts.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Options/OpenAIOptions.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Options/QdrantOptions.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Program.cs
delete mode 100644 dotnet/samples/marketing/src/backend/Properties/launchSettings.json
delete mode 100644 dotnet/samples/marketing/src/backend/SignalRHub/AgentTypes.cs
delete mode 100644 dotnet/samples/marketing/src/backend/SignalRHub/ArticleHub.cs
delete mode 100644 dotnet/samples/marketing/src/backend/SignalRHub/FrontEndMessage.cs
delete mode 100644 dotnet/samples/marketing/src/backend/SignalRHub/IArticleHub.cs
delete mode 100644 dotnet/samples/marketing/src/backend/SignalRHub/ISignalRService.cs
delete mode 100644 dotnet/samples/marketing/src/backend/SignalRHub/SignalRConnectionsDB.cs
delete mode 100644 dotnet/samples/marketing/src/backend/SignalRHub/SignalRService.cs
delete mode 100644 dotnet/samples/marketing/src/backend/appsettings.local.template.json
delete mode 100644 dotnet/samples/marketing/src/frontend/.eslintrc.json
delete mode 100644 dotnet/samples/marketing/src/frontend/.gitignore
delete mode 100644 dotnet/samples/marketing/src/frontend/.npmrc
delete mode 100644 dotnet/samples/marketing/src/frontend/Dockerfile
delete mode 100644 dotnet/samples/marketing/src/frontend/README.MD
delete mode 100644 dotnet/samples/marketing/src/frontend/next.config.mjs
delete mode 100644 dotnet/samples/marketing/src/frontend/package-lock.json
delete mode 100644 dotnet/samples/marketing/src/frontend/package.json
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/background1.webp
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/check.png
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/face.jpg
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/face2.jpg
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/icons/docs.png
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/icons/edge.png
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/icons/pdf.png
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/icons/xslx.png
delete mode 100644 dotnet/samples/marketing/src/frontend/public/static/x.png
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/forgot-password/page.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/icon.ico
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/layout.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/login/page.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/marketing/chat/chat.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/marketing/community-manager/community-manager.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/marketing/costs/cost.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/marketing/docs/docs.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/marketing/page.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/marketing/stakeholders/stakeholders.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/not-found.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/page.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/app/register/page.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/components/auth-page/index.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/components/header/index.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/components/themed-layout/index.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/contexts/color-mode/index.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/src/interfaces/theme.d.ts
delete mode 100644 dotnet/samples/marketing/src/frontend/src/providers/auth-provider/auth-provider.server.ts
delete mode 100644 dotnet/samples/marketing/src/frontend/src/providers/auth-provider/auth-provider.ts
delete mode 100644 dotnet/samples/marketing/src/frontend/src/providers/auth-provider/index.ts
delete mode 100644 dotnet/samples/marketing/src/frontend/src/providers/data-provider/index.ts
delete mode 100644 dotnet/samples/marketing/src/frontend/src/providers/devtools/index.tsx
delete mode 100644 dotnet/samples/marketing/src/frontend/tsconfig.json
delete mode 100644 dotnet/src/Microsoft.AI.Agents.Worker.Client/Agent.cs
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index e473cf1e0..f659ffa5e 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -27,7 +27,9 @@
"version": "8.0.302"
},
"ghcr.io/elanhasson/devcontainer-features/dotnet-aspire-daily:1": {},
- "ghcr.io/devcontainers/features/azure-cli:1": {}
+ "ghcr.io/devcontainers/features/azure-cli:1": {},
+ "ghcr.io/azure/azure-dev/azd:0": {},
+ "ghcr.io/devcontainers/features/node:1": {}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
diff --git a/dotnet/AGNext.sln b/dotnet/AGNext.sln
index fbf8179bc..cb1a8c075 100644
--- a/dotnet/AGNext.sln
+++ b/dotnet/AGNext.sln
@@ -21,18 +21,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AI.DevTeam", "sam
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AI.DevTeam.Dapr", "samples\gh-flow\src\Microsoft.AI.DevTeam.Dapr\Microsoft.AI.DevTeam.Dapr.csproj", "{A7677950-18F1-42FF-8018-870395417465}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "marketing", "marketing", "{1FF691E4-E27D-4A7E-861C-4D6291B6EE35}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{4225F3BA-A39D-4680-945E-F2869E98AEA2}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Marketing", "samples\marketing\src\backend\Marketing.csproj", "{62F276F3-9184-4908-A7FB-065B4E491BE2}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "seed-memory", "samples\gh-flow\src\seed-memory\seed-memory.csproj", "{EF5DF177-F4F2-49D5-9E1C-2E37869238D8}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkflowsApp", "samples\WorkflowsApp\WorkflowsApp.csproj", "{92CAAA29-8633-4984-B169-29BB89E0EA23}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflowsapp", "workflowsapp", "{65CF8F20-D740-46AC-A869-FA609D960A09}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E6A25E68-EA75-4294-9B45-3CF2BB3B4ACD}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
@@ -52,6 +42,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greeter.AgentHost", "sample
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greeter.AgentWorker", "samples\Greeter\Greeter.AgentWorker\Greeter.AgentWorker.csproj", "{7BA721F2-EE46-4A85-A8C8-3695C4ADF93E}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "marketing-team", "marketing-team", "{DD53D185-5C0A-4B45-BF4D-F597F899E671}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Marketing.AgentHost", "samples\marketing-team\src\Marketing.AgentHost\Marketing.AgentHost.csproj", "{5504D650-D013-4F5E-9A42-EDC9B4A36E1D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Marketing.Agents", "samples\marketing-team\src\Marketing.Agents\Marketing.Agents.csproj", "{62D6E39D-E452-47C3-B756-B8B6CE26C3E4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Marketing.AppHost", "samples\marketing-team\src\Marketing.AppHost\Marketing.AppHost.csproj", "{8E998B80-202E-4751-9FC4-0623C024AF25}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Marketing.Backend", "samples\marketing-team\src\Marketing.Backend\Marketing.Backend.csproj", "{BE82D56A-0281-4B01-9B99-D2F051585AF0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Marketing.ServiceDefaults", "samples\marketing-team\src\Marketing.ServiceDefaults\Marketing.ServiceDefaults.csproj", "{85A49174-5545-49D2-B5FD-BEDC9A401AB3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Marketing.Shared", "samples\marketing-team\src\Marketing.Shared\Marketing.Shared.csproj", "{C95DB5F8-6BDB-446E-B0B8-1A1D7F716C42}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -78,18 +82,10 @@ Global
{A7677950-18F1-42FF-8018-870395417465}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A7677950-18F1-42FF-8018-870395417465}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A7677950-18F1-42FF-8018-870395417465}.Release|Any CPU.Build.0 = Release|Any CPU
- {62F276F3-9184-4908-A7FB-065B4E491BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {62F276F3-9184-4908-A7FB-065B4E491BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {62F276F3-9184-4908-A7FB-065B4E491BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {62F276F3-9184-4908-A7FB-065B4E491BE2}.Release|Any CPU.Build.0 = Release|Any CPU
{EF5DF177-F4F2-49D5-9E1C-2E37869238D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF5DF177-F4F2-49D5-9E1C-2E37869238D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF5DF177-F4F2-49D5-9E1C-2E37869238D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF5DF177-F4F2-49D5-9E1C-2E37869238D8}.Release|Any CPU.Build.0 = Release|Any CPU
- {92CAAA29-8633-4984-B169-29BB89E0EA23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {92CAAA29-8633-4984-B169-29BB89E0EA23}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {92CAAA29-8633-4984-B169-29BB89E0EA23}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {92CAAA29-8633-4984-B169-29BB89E0EA23}.Release|Any CPU.Build.0 = Release|Any CPU
{20E5C8C3-CE40-4FC3-96F8-B4A2C51936E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{20E5C8C3-CE40-4FC3-96F8-B4A2C51936E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{20E5C8C3-CE40-4FC3-96F8-B4A2C51936E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -114,6 +110,30 @@ Global
{7BA721F2-EE46-4A85-A8C8-3695C4ADF93E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7BA721F2-EE46-4A85-A8C8-3695C4ADF93E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7BA721F2-EE46-4A85-A8C8-3695C4ADF93E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5504D650-D013-4F5E-9A42-EDC9B4A36E1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5504D650-D013-4F5E-9A42-EDC9B4A36E1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5504D650-D013-4F5E-9A42-EDC9B4A36E1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5504D650-D013-4F5E-9A42-EDC9B4A36E1D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {62D6E39D-E452-47C3-B756-B8B6CE26C3E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {62D6E39D-E452-47C3-B756-B8B6CE26C3E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {62D6E39D-E452-47C3-B756-B8B6CE26C3E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {62D6E39D-E452-47C3-B756-B8B6CE26C3E4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8E998B80-202E-4751-9FC4-0623C024AF25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8E998B80-202E-4751-9FC4-0623C024AF25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8E998B80-202E-4751-9FC4-0623C024AF25}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8E998B80-202E-4751-9FC4-0623C024AF25}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BE82D56A-0281-4B01-9B99-D2F051585AF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BE82D56A-0281-4B01-9B99-D2F051585AF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BE82D56A-0281-4B01-9B99-D2F051585AF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BE82D56A-0281-4B01-9B99-D2F051585AF0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {85A49174-5545-49D2-B5FD-BEDC9A401AB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85A49174-5545-49D2-B5FD-BEDC9A401AB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85A49174-5545-49D2-B5FD-BEDC9A401AB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {85A49174-5545-49D2-B5FD-BEDC9A401AB3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C95DB5F8-6BDB-446E-B0B8-1A1D7F716C42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C95DB5F8-6BDB-446E-B0B8-1A1D7F716C42}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C95DB5F8-6BDB-446E-B0B8-1A1D7F716C42}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C95DB5F8-6BDB-446E-B0B8-1A1D7F716C42}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -126,12 +146,7 @@ Global
{50809508-F830-4553-9C4E-C802E0A0F690} = {E0E93575-7187-4975-8D72-6F285CD01767}
{79981945-61F7-4E1A-8949-7808FD75471B} = {50809508-F830-4553-9C4E-C802E0A0F690}
{A7677950-18F1-42FF-8018-870395417465} = {50809508-F830-4553-9C4E-C802E0A0F690}
- {1FF691E4-E27D-4A7E-861C-4D6291B6EE35} = {943853E7-513D-45EA-870F-549CFC0AF8E8}
- {4225F3BA-A39D-4680-945E-F2869E98AEA2} = {1FF691E4-E27D-4A7E-861C-4D6291B6EE35}
- {62F276F3-9184-4908-A7FB-065B4E491BE2} = {4225F3BA-A39D-4680-945E-F2869E98AEA2}
{EF5DF177-F4F2-49D5-9E1C-2E37869238D8} = {943853E7-513D-45EA-870F-549CFC0AF8E8}
- {92CAAA29-8633-4984-B169-29BB89E0EA23} = {65CF8F20-D740-46AC-A869-FA609D960A09}
- {65CF8F20-D740-46AC-A869-FA609D960A09} = {943853E7-513D-45EA-870F-549CFC0AF8E8}
{20E5C8C3-CE40-4FC3-96F8-B4A2C51936E9} = {290F9824-BAD3-4703-B9B7-FE9C4BE3A1CF}
{B9188ADC-D322-4B38-B3D6-95338E89C34B} = {290F9824-BAD3-4703-B9B7-FE9C4BE3A1CF}
{320B05A6-4E1B-4B15-B3F6-745819D2BF22} = {943853E7-513D-45EA-870F-549CFC0AF8E8}
@@ -139,6 +154,13 @@ Global
{E45990FD-85B3-44A2-8646-4AB2E868BC5F} = {320B05A6-4E1B-4B15-B3F6-745819D2BF22}
{590BACCE-7310-4D7B-9618-46496F2EB171} = {320B05A6-4E1B-4B15-B3F6-745819D2BF22}
{7BA721F2-EE46-4A85-A8C8-3695C4ADF93E} = {320B05A6-4E1B-4B15-B3F6-745819D2BF22}
+ {DD53D185-5C0A-4B45-BF4D-F597F899E671} = {943853E7-513D-45EA-870F-549CFC0AF8E8}
+ {5504D650-D013-4F5E-9A42-EDC9B4A36E1D} = {DD53D185-5C0A-4B45-BF4D-F597F899E671}
+ {62D6E39D-E452-47C3-B756-B8B6CE26C3E4} = {DD53D185-5C0A-4B45-BF4D-F597F899E671}
+ {8E998B80-202E-4751-9FC4-0623C024AF25} = {DD53D185-5C0A-4B45-BF4D-F597F899E671}
+ {BE82D56A-0281-4B01-9B99-D2F051585AF0} = {DD53D185-5C0A-4B45-BF4D-F597F899E671}
+ {85A49174-5545-49D2-B5FD-BEDC9A401AB3} = {DD53D185-5C0A-4B45-BF4D-F597F899E671}
+ {C95DB5F8-6BDB-446E-B0B8-1A1D7F716C42} = {DD53D185-5C0A-4B45-BF4D-F597F899E671}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C9250809-2B94-4552-99DE-333E4646A16F}
diff --git a/dotnet/Directory.Packages.props b/dotnet/Directory.Packages.props
index 9b19e2243..d75d371fc 100644
--- a/dotnet/Directory.Packages.props
+++ b/dotnet/Directory.Packages.props
@@ -2,76 +2,75 @@
true
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
+
-
-
+
\ No newline at end of file
diff --git a/dotnet/samples/Greeter/Greeter.AgentHost/Program.cs b/dotnet/samples/Greeter/Greeter.AgentHost/Program.cs
index d7110ec27..19a49f43b 100644
--- a/dotnet/samples/Greeter/Greeter.AgentHost/Program.cs
+++ b/dotnet/samples/Greeter/Greeter.AgentHost/Program.cs
@@ -1,11 +1,8 @@
using Microsoft.AI.Agents.Worker;
var builder = WebApplication.CreateBuilder(args);
-builder.AddServiceDefaults();
-builder.Services.AddProblemDetails();
-builder.Services.AddGrpc();
-builder.Logging.SetMinimumLevel(LogLevel.Information);
+builder.AddServiceDefaults();
builder.AddAgentService();
var app = builder.Build();
diff --git a/dotnet/samples/Greeter/Greeter.AgentWorker/Client.cs b/dotnet/samples/Greeter/Greeter.AgentWorker/AgentClient.cs
similarity index 63%
rename from dotnet/samples/Greeter/Greeter.AgentWorker/Client.cs
rename to dotnet/samples/Greeter/Greeter.AgentWorker/AgentClient.cs
index a8503b11e..4f65a54ba 100644
--- a/dotnet/samples/Greeter/Greeter.AgentWorker/Client.cs
+++ b/dotnet/samples/Greeter/Greeter.AgentWorker/AgentClient.cs
@@ -4,9 +4,12 @@ using AgentId = Microsoft.AI.Agents.Worker.Client.AgentId;
namespace Greeter.AgentWorker;
-internal sealed class Client(ILogger logger, AgentWorkerRuntime runtime) : AgentBase(new ClientContext(logger, runtime))
+public sealed class AgentClient(ILogger logger, AgentWorkerRuntime runtime) : AgentBase(new ClientContext(logger, runtime))
{
- private sealed class ClientContext(ILogger logger, AgentWorkerRuntime runtime) : IAgentContext
+ public async ValueTask PublishEventAsync(Event @event) => await PublishEvent(@event);
+ public async ValueTask SendRequestAsync(AgentId target, string method, Dictionary parameters) => await RequestAsync(target, method, parameters);
+
+ private sealed class ClientContext(ILogger logger, AgentWorkerRuntime runtime) : IAgentContext
{
public AgentId AgentId { get; } = new AgentId("client", Guid.NewGuid().ToString());
public AgentBase? AgentInstance { get; set; }
diff --git a/dotnet/samples/Greeter/Greeter.AgentWorker/Program.cs b/dotnet/samples/Greeter/Greeter.AgentWorker/Program.cs
index b84df774a..ec2cfe01d 100644
--- a/dotnet/samples/Greeter/Greeter.AgentWorker/Program.cs
+++ b/dotnet/samples/Greeter/Greeter.AgentWorker/Program.cs
@@ -11,7 +11,7 @@ builder.AddServiceDefaults();
var agentBuilder = builder.AddAgentWorker("https://agenthost");
agentBuilder.AddAgent("greeter");
builder.Services.AddHostedService();
-builder.Services.AddSingleton();
+builder.Services.AddSingleton();
var app = builder.Build();
@@ -21,7 +21,7 @@ app.Run();
internal sealed class GreetingAgent(IAgentContext context, ILogger logger) : AgentBase(context)
{
- protected override Task HandleEvent(Microsoft.AI.Agents.Abstractions.Event @event)
+ protected override Task HandleEvent(Event @event)
{
logger.LogInformation("[{Id}] Received event: '{Event}'.", AgentId, @event);
return base.HandleEvent(@event);
@@ -34,7 +34,7 @@ internal sealed class GreetingAgent(IAgentContext context, ILogger logger, Client client) : BackgroundService
+internal sealed class MyBackgroundService(ILogger logger, AgentClient client) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
@@ -44,7 +44,7 @@ internal sealed class MyBackgroundService(ILogger logger, C
{
var generatedCodeId = Guid.NewGuid().ToString();
var instanceId = Guid.NewGuid().ToString();
- var response = await client.RequestAsync(
+ var response = await client.SendRequestAsync(
new AgentId("greeter", "foo"),
"echo",
new Dictionary { ["message"] = "Hello, agents!" }).ConfigureAwait(false);
diff --git a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Architect/Architect.cs b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Architect/Architect.cs
index ef20de8cb..cb08452d2 100644
--- a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Architect/Architect.cs
+++ b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Architect/Architect.cs
@@ -2,7 +2,6 @@ using Microsoft.AI.Agents.Abstractions;
using Microsoft.AI.Agents.Orleans;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Memory;
-using Orleans.Runtime;
namespace Microsoft.AI.DevTeam;
@@ -30,4 +29,4 @@ public class ArchitectState
[Id(1)]
public string HighLevelArchitecture { get; set; } = "";
-}
\ No newline at end of file
+}
diff --git a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Developer/Developer.cs b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Developer/Developer.cs
index 065e82d09..45f3d66ea 100644
--- a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Developer/Developer.cs
+++ b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Developer/Developer.cs
@@ -3,7 +3,6 @@ using Microsoft.AI.Agents.Orleans;
using Microsoft.AI.DevTeam.Events;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Memory;
-using Orleans.Runtime;
namespace Microsoft.AI.DevTeam;
diff --git a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/DeveloperLead/DeveloperLead.cs b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/DeveloperLead/DeveloperLead.cs
index 80eb0de6e..f70a670b2 100644
--- a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/DeveloperLead/DeveloperLead.cs
+++ b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/DeveloperLead/DeveloperLead.cs
@@ -4,7 +4,6 @@ using Microsoft.AI.DevTeam.Events;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Memory;
-using Orleans.Runtime;
namespace Microsoft.AI.DevTeam;
[ImplicitStreamSubscription(Consts.MainNamespace)]
diff --git a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/ProductManager/ProductManager.cs b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/ProductManager/ProductManager.cs
index a2debdb24..7d6a99496 100644
--- a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/ProductManager/ProductManager.cs
+++ b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/ProductManager/ProductManager.cs
@@ -3,7 +3,6 @@ using Microsoft.AI.Agents.Orleans;
using Microsoft.AI.DevTeam.Events;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Memory;
-using Orleans.Runtime;
namespace Microsoft.AI.DevTeam;
diff --git a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Sandbox.cs b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Sandbox.cs
index f0adcac8c..04f9b3b3e 100644
--- a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Sandbox.cs
+++ b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Agents/Sandbox.cs
@@ -1,7 +1,6 @@
using Microsoft.AI.Agents.Abstractions;
using Microsoft.AI.Agents.Orleans;
using Microsoft.AI.DevTeam.Events;
-using Orleans.Runtime;
using Orleans.Timers;
namespace Microsoft.AI.DevTeam;
diff --git a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Services/GithubWebHookProcessor.cs b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Services/GithubWebHookProcessor.cs
index cbe9b2c95..4ea8a1a01 100644
--- a/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Services/GithubWebHookProcessor.cs
+++ b/dotnet/samples/gh-flow/src/Microsoft.AI.DevTeam/Services/GithubWebHookProcessor.cs
@@ -6,9 +6,9 @@ using Octokit.Webhooks.Events;
using Octokit.Webhooks.Events.IssueComment;
using Octokit.Webhooks.Events.Issues;
using Octokit.Webhooks.Models;
-using Orleans.Runtime;
namespace Microsoft.AI.DevTeam;
+
public sealed class GithubWebHookProcessor : WebhookEventProcessor
{
private readonly ILogger _logger;
diff --git a/dotnet/samples/marketing/.gitignore b/dotnet/samples/marketing/.gitignore
deleted file mode 100644
index 8e8438024..000000000
--- a/dotnet/samples/marketing/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.azure
diff --git a/dotnet/samples/marketing/README.md b/dotnet/samples/marketing/README.md
deleted file mode 100644
index 37e9baaf6..000000000
--- a/dotnet/samples/marketing/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# [In progress] Marketing Saple application
-
-This is a demo application that showcase the different features of the AI Agent framework.
-There are five agents in this application that control the different areas of the UI autonomously.
-
-The agents are designed to be able to interact with each other and the user to achieve their goals.
-To do that each agent has
-
-
-
-
-
-## Requirements to run locally
-### Frontend
-The latest version of Node.js and npm
-
-### Backend
-Visual Studio or Visual Studio code and the latest version of dotnet
-
-## Running with azd
-To run the application with azd, you need to have the azd cli installed. You can install it following the instructions here:
-
-https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd?tabs=winget-windows%2Cbrew-mac%2Cscript-linux
-
-
-
-Then you can run the following command to start the application:
-```powers
-
-## How to run the application locally
-
-Execute Run.ps1. IF you are missing the config file the script will create an empty one for you and ask you to fill it out.
-```
-.\run.ps1
-```
-
-## How to debug the application locally
-To debug the backend, you can simply open the solution in Visual Studio, and press F5 to start debugging.
-Remember to copy `appsettings.local.template.json` to `appsettings.json` and fill out the values.
-The frontend is a NodeJS React application. You can debug it using Visual Studio code.
\ No newline at end of file
diff --git a/dotnet/samples/marketing/azure.yaml b/dotnet/samples/marketing/azure.yaml
deleted file mode 100644
index 5f5888574..000000000
--- a/dotnet/samples/marketing/azure.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
-
-name: marketing
-metadata:
- template: azd-init@1.8.2
-services:
- backend:
- project: "src/backend"
- host: containerapp
- language: dotnet
- docker:
- path: Dockerfile
- context: ../../../../
- frontend:
- project: "src/frontend"
- host: containerapp
- language: ts
- dist: build
- docker:
- path: Dockerfile
diff --git a/dotnet/samples/marketing/infra/abbreviations.json b/dotnet/samples/marketing/infra/abbreviations.json
deleted file mode 100644
index dc62141f9..000000000
--- a/dotnet/samples/marketing/infra/abbreviations.json
+++ /dev/null
@@ -1,135 +0,0 @@
-{
- "analysisServicesServers": "as",
- "apiManagementService": "apim-",
- "appConfigurationStores": "appcs-",
- "appManagedEnvironments": "cae-",
- "appContainerApps": "ca-",
- "authorizationPolicyDefinitions": "policy-",
- "automationAutomationAccounts": "aa-",
- "blueprintBlueprints": "bp-",
- "blueprintBlueprintsArtifacts": "bpa-",
- "cacheRedis": "redis-",
- "cdnProfiles": "cdnp-",
- "cdnProfilesEndpoints": "cdne-",
- "cognitiveServicesAccounts": "cog-",
- "cognitiveServicesFormRecognizer": "cog-fr-",
- "cognitiveServicesTextAnalytics": "cog-ta-",
- "computeAvailabilitySets": "avail-",
- "computeCloudServices": "cld-",
- "computeDiskEncryptionSets": "des",
- "computeDisks": "disk",
- "computeDisksOs": "osdisk",
- "computeGalleries": "gal",
- "computeSnapshots": "snap-",
- "computeVirtualMachines": "vm",
- "computeVirtualMachineScaleSets": "vmss-",
- "containerInstanceContainerGroups": "ci",
- "containerRegistryRegistries": "cr",
- "containerServiceManagedClusters": "aks-",
- "databricksWorkspaces": "dbw-",
- "dataFactoryFactories": "adf-",
- "dataLakeAnalyticsAccounts": "dla",
- "dataLakeStoreAccounts": "dls",
- "dataMigrationServices": "dms-",
- "dBforMySQLServers": "mysql-",
- "dBforPostgreSQLServers": "psql-",
- "devicesIotHubs": "iot-",
- "devicesProvisioningServices": "provs-",
- "devicesProvisioningServicesCertificates": "pcert-",
- "documentDBDatabaseAccounts": "cosmos-",
- "eventGridDomains": "evgd-",
- "eventGridDomainsTopics": "evgt-",
- "eventGridEventSubscriptions": "evgs-",
- "eventHubNamespaces": "evhns-",
- "eventHubNamespacesEventHubs": "evh-",
- "hdInsightClustersHadoop": "hadoop-",
- "hdInsightClustersHbase": "hbase-",
- "hdInsightClustersKafka": "kafka-",
- "hdInsightClustersMl": "mls-",
- "hdInsightClustersSpark": "spark-",
- "hdInsightClustersStorm": "storm-",
- "hybridComputeMachines": "arcs-",
- "insightsActionGroups": "ag-",
- "insightsComponents": "appi-",
- "keyVaultVaults": "kv-",
- "kubernetesConnectedClusters": "arck",
- "kustoClusters": "dec",
- "kustoClustersDatabases": "dedb",
- "logicIntegrationAccounts": "ia-",
- "logicWorkflows": "logic-",
- "machineLearningServicesWorkspaces": "mlw-",
- "managedIdentityUserAssignedIdentities": "id-",
- "managementManagementGroups": "mg-",
- "migrateAssessmentProjects": "migr-",
- "networkApplicationGateways": "agw-",
- "networkApplicationSecurityGroups": "asg-",
- "networkAzureFirewalls": "afw-",
- "networkBastionHosts": "bas-",
- "networkConnections": "con-",
- "networkDnsZones": "dnsz-",
- "networkExpressRouteCircuits": "erc-",
- "networkFirewallPolicies": "afwp-",
- "networkFirewallPoliciesWebApplication": "waf",
- "networkFirewallPoliciesRuleGroups": "wafrg",
- "networkFrontDoors": "fd-",
- "networkFrontdoorWebApplicationFirewallPolicies": "fdfp-",
- "networkLoadBalancersExternal": "lbe-",
- "networkLoadBalancersInternal": "lbi-",
- "networkLoadBalancersInboundNatRules": "rule-",
- "networkLocalNetworkGateways": "lgw-",
- "networkNatGateways": "ng-",
- "networkNetworkInterfaces": "nic-",
- "networkNetworkSecurityGroups": "nsg-",
- "networkNetworkSecurityGroupsSecurityRules": "nsgsr-",
- "networkNetworkWatchers": "nw-",
- "networkPrivateDnsZones": "pdnsz-",
- "networkPrivateLinkServices": "pl-",
- "networkPublicIPAddresses": "pip-",
- "networkPublicIPPrefixes": "ippre-",
- "networkRouteFilters": "rf-",
- "networkRouteTables": "rt-",
- "networkRouteTablesRoutes": "udr-",
- "networkTrafficManagerProfiles": "traf-",
- "networkVirtualNetworkGateways": "vgw-",
- "networkVirtualNetworks": "vnet-",
- "networkVirtualNetworksSubnets": "snet-",
- "networkVirtualNetworksVirtualNetworkPeerings": "peer-",
- "networkVirtualWans": "vwan-",
- "networkVpnGateways": "vpng-",
- "networkVpnGatewaysVpnConnections": "vcn-",
- "networkVpnGatewaysVpnSites": "vst-",
- "notificationHubsNamespaces": "ntfns-",
- "notificationHubsNamespacesNotificationHubs": "ntf-",
- "operationalInsightsWorkspaces": "log-",
- "portalDashboards": "dash-",
- "powerBIDedicatedCapacities": "pbi-",
- "purviewAccounts": "pview-",
- "recoveryServicesVaults": "rsv-",
- "resourcesResourceGroups": "rg-",
- "searchSearchServices": "srch-",
- "serviceBusNamespaces": "sb-",
- "serviceBusNamespacesQueues": "sbq-",
- "serviceBusNamespacesTopics": "sbt-",
- "serviceEndPointPolicies": "se-",
- "serviceFabricClusters": "sf-",
- "signalRServiceSignalR": "sigr",
- "sqlManagedInstances": "sqlmi-",
- "sqlServers": "sql-",
- "sqlServersDataWarehouse": "sqldw-",
- "sqlServersDatabases": "sqldb-",
- "sqlServersDatabasesStretch": "sqlstrdb-",
- "storageStorageAccounts": "st",
- "storageStorageAccountsVm": "stvm",
- "storSimpleManagers": "ssimp",
- "streamAnalyticsCluster": "asa-",
- "synapseWorkspaces": "syn",
- "synapseWorkspacesAnalyticsWorkspaces": "synw",
- "synapseWorkspacesSqlPoolsDedicated": "syndp",
- "synapseWorkspacesSqlPoolsSpark": "synsp",
- "timeSeriesInsightsEnvironments": "tsi-",
- "webServerFarms": "plan-",
- "webSitesAppService": "app-",
- "webSitesAppServiceEnvironment": "ase-",
- "webSitesFunctions": "func-",
- "webStaticSites": "stapp-"
-}
diff --git a/dotnet/samples/marketing/infra/app/backend.bicep b/dotnet/samples/marketing/infra/app/backend.bicep
deleted file mode 100644
index 8f36a473a..000000000
--- a/dotnet/samples/marketing/infra/app/backend.bicep
+++ /dev/null
@@ -1,133 +0,0 @@
-param name string
-param location string = resourceGroup().location
-param tags object = {}
-
-param identityName string
-param containerRegistryName string
-param containerAppsEnvironmentName string
-param applicationInsightsName string
-param allowedOrigins array
-param exists bool
-@secure()
-param appDefinition object
-
-var appSettingsArray = filter(array(appDefinition.settings), i => i.name != '')
-var secrets = map(filter(appSettingsArray, i => i.?secret != null), i => {
- name: i.name
- value: i.value
- secretRef: i.?secretRef ?? take(replace(replace(toLower(i.name), '_', '-'), '.', '-'), 32)
-})
-var env = map(filter(appSettingsArray, i => i.?secret == null), i => {
- name: i.name
- value: i.value
-})
-
-resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
- name: identityName
- location: location
-}
-
-resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-01-01-preview' existing = {
- name: containerRegistryName
-}
-
-resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2023-05-01' existing = {
- name: containerAppsEnvironmentName
-}
-
-resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = {
- name: applicationInsightsName
-}
-
-resource acrPullRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
- scope: containerRegistry
- name: guid(subscription().id, resourceGroup().id, identity.id, 'acrPullRole')
- properties: {
- roleDefinitionId: subscriptionResourceId(
- 'Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')
- principalType: 'ServicePrincipal'
- principalId: identity.properties.principalId
- }
-}
-
-module fetchLatestImage '../modules/fetch-container-image.bicep' = {
- name: '${name}-fetch-image'
- params: {
- exists: exists
- name: name
- }
-}
-
-resource app 'Microsoft.App/containerApps@2023-05-02-preview' = {
- name: name
- location: location
- tags: union(tags, {'azd-service-name': 'backend' })
- dependsOn: [ acrPullRole ]
- identity: {
- type: 'UserAssigned'
- userAssignedIdentities: { '${identity.id}': {} }
- }
- properties: {
- managedEnvironmentId: containerAppsEnvironment.id
- configuration: {
- ingress: {
- external: true
- targetPort: 5244
- transport: 'auto'
- corsPolicy: {
- allowedOrigins: union(allowedOrigins, [
- // define additional allowed origins here
- ])
- }
- }
- registries: [
- {
- server: '${containerRegistryName}.azurecr.io'
- identity: identity.id
- }
- ]
- secrets: union([
- ],
- map(secrets, secret => {
- name: secret.secretRef
- value: secret.value
- }))
- }
- template: {
- containers: [
- {
- image: fetchLatestImage.outputs.?containers[?0].?image ?? 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest'
- name: 'main'
- env: union([
- {
- name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
- value: applicationInsights.properties.ConnectionString
- }
- {
- name: 'PORT'
- value: '5244'
- }
- ],
- env,
- map(secrets, secret => {
- name: secret.name
- secretRef: secret.secretRef
- }))
- resources: {
- cpu: json('1.0')
- memory: '2.0Gi'
- }
- }
- ]
- scale: {
- minReplicas: 1
- maxReplicas: 10
- }
- }
- }
-}
-
-output defaultDomain string = containerAppsEnvironment.properties.defaultDomain
-output name string = app.name
-output uri string = 'https://${app.properties.configuration.ingress.fqdn}'
-output id string = app.id
diff --git a/dotnet/samples/marketing/infra/app/frontend.bicep b/dotnet/samples/marketing/infra/app/frontend.bicep
deleted file mode 100644
index a872c23cf..000000000
--- a/dotnet/samples/marketing/infra/app/frontend.bicep
+++ /dev/null
@@ -1,132 +0,0 @@
-param name string
-param location string = resourceGroup().location
-param tags object = {}
-
-param identityName string
-param containerRegistryName string
-param containerAppsEnvironmentName string
-param applicationInsightsName string
-param apiUrls array
-param exists bool
-@secure()
-param appDefinition object
-
-var appSettingsArray = filter(array(appDefinition.settings), i => i.name != '')
-var secrets = map(filter(appSettingsArray, i => i.?secret != null), i => {
- name: i.name
- value: i.value
- secretRef: i.?secretRef ?? take(replace(replace(toLower(i.name), '_', '-'), '.', '-'), 32)
-})
-var env = map(filter(appSettingsArray, i => i.?secret == null), i => {
- name: i.name
- value: i.value
-})
-
-resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
- name: identityName
- location: location
-}
-
-resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-01-01-preview' existing = {
- name: containerRegistryName
-}
-
-resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2023-05-01' existing = {
- name: containerAppsEnvironmentName
-}
-
-resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = {
- name: applicationInsightsName
-}
-
-resource acrPullRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
- scope: containerRegistry
- name: guid(subscription().id, resourceGroup().id, identity.id, 'acrPullRole')
- properties: {
- roleDefinitionId: subscriptionResourceId(
- 'Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')
- principalType: 'ServicePrincipal'
- principalId: identity.properties.principalId
- }
-}
-
-module fetchLatestImage '../modules/fetch-container-image.bicep' = {
- name: '${name}-fetch-image'
- params: {
- exists: exists
- name: name
- }
-}
-
-resource app 'Microsoft.App/containerApps@2023-05-02-preview' = {
- name: name
- location: location
- tags: union(tags, {'azd-service-name': 'frontend' })
- dependsOn: [ acrPullRole ]
- identity: {
- type: 'UserAssigned'
- userAssignedIdentities: { '${identity.id}': {} }
- }
- properties: {
- managedEnvironmentId: containerAppsEnvironment.id
- configuration: {
- ingress: {
- external: true
- targetPort: 3000
- transport: 'auto'
- }
- registries: [
- {
- server: '${containerRegistryName}.azurecr.io'
- identity: identity.id
- }
- ]
- secrets: union([
- ],
- map(secrets, secret => {
- name: secret.secretRef
- value: secret.value
- }))
- }
- template: {
- containers: [
- {
- image: fetchLatestImage.outputs.?containers[?0].?image ?? 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest'
- name: 'main'
- env: union([
- {
- name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
- value: applicationInsights.properties.ConnectionString
- }
- {
- name: 'BACKEND_BASE_URL'
- value: apiUrls[0]
- }
- {
- name: 'PORT'
- value: '3000'
- }
- ],
- env,
- map(secrets, secret => {
- name: secret.name
- secretRef: secret.secretRef
- }))
- resources: {
- cpu: json('1.0')
- memory: '2.0Gi'
- }
- }
- ]
- scale: {
- minReplicas: 1
- maxReplicas: 10
- }
- }
- }
-}
-
-output defaultDomain string = containerAppsEnvironment.properties.defaultDomain
-output name string = app.name
-output uri string = 'https://${app.properties.configuration.ingress.fqdn}'
-output id string = app.id
diff --git a/dotnet/samples/marketing/infra/main.bicep b/dotnet/samples/marketing/infra/main.bicep
deleted file mode 100644
index 578f9c120..000000000
--- a/dotnet/samples/marketing/infra/main.bicep
+++ /dev/null
@@ -1,135 +0,0 @@
-targetScope = 'subscription'
-
-@minLength(1)
-@maxLength(64)
-@description('Name of the environment that can be used as part of naming resource convention')
-param environmentName string
-
-@minLength(1)
-@description('Primary location for all resources')
-param location string
-
-param backendExists bool
-@secure()
-param backendDefinition object
-param frontendExists bool
-@secure()
-param frontendDefinition object
-
-@description('Id of the user or app to assign application roles')
-param principalId string
-
-// Tags that should be applied to all resources.
-//
-// Note that 'azd-service-name' tags should be applied separately to service host resources.
-// Example usage:
-// tags: union(tags, { 'azd-service-name': })
-var tags = {
- 'azd-env-name': environmentName
-}
-
-var abbrs = loadJsonContent('./abbreviations.json')
-var resourceToken = toLower(uniqueString(subscription().id, environmentName, location))
-
-resource rg 'Microsoft.Resources/resourceGroups@2022-09-01' = {
- name: 'rg-${environmentName}'
- location: location
- tags: tags
-}
-
-module monitoring './shared/monitoring.bicep' = {
- name: 'monitoring'
- params: {
- location: location
- tags: tags
- logAnalyticsName: '${abbrs.operationalInsightsWorkspaces}${resourceToken}'
- applicationInsightsName: '${abbrs.insightsComponents}${resourceToken}'
- }
- scope: rg
-}
-
-module dashboard './shared/dashboard-web.bicep' = {
- name: 'dashboard'
- params: {
- name: '${abbrs.portalDashboards}${resourceToken}'
- applicationInsightsName: monitoring.outputs.applicationInsightsName
- location: location
- tags: tags
- }
- scope: rg
-}
-
-module registry './shared/registry.bicep' = {
- name: 'registry'
- params: {
- location: location
- tags: tags
- name: '${abbrs.containerRegistryRegistries}${resourceToken}'
- }
- scope: rg
-}
-
-module keyVault './shared/keyvault.bicep' = {
- name: 'keyvault'
- params: {
- location: location
- tags: tags
- name: '${abbrs.keyVaultVaults}${resourceToken}'
- principalId: principalId
- }
- scope: rg
-}
-
-module appsEnv './shared/apps-env.bicep' = {
- name: 'apps-env'
- params: {
- name: '${abbrs.appManagedEnvironments}${resourceToken}'
- location: location
- tags: tags
- applicationInsightsName: monitoring.outputs.applicationInsightsName
- logAnalyticsWorkspaceName: monitoring.outputs.logAnalyticsWorkspaceName
- }
- scope: rg
-}
-
-module backend './app/backend.bicep' = {
- name: 'backend'
- params: {
- name: '${abbrs.appContainerApps}backend-${resourceToken}'
- location: location
- tags: tags
- identityName: '${abbrs.managedIdentityUserAssignedIdentities}backend-${resourceToken}'
- applicationInsightsName: monitoring.outputs.applicationInsightsName
- containerAppsEnvironmentName: appsEnv.outputs.name
- containerRegistryName: registry.outputs.name
- exists: backendExists
- appDefinition: backendDefinition
- allowedOrigins: [
- 'https://${abbrs.appContainerApps}frontend-${resourceToken}.${appsEnv.outputs.domain}'
- ]
- }
- scope: rg
-}
-
-module frontend './app/frontend.bicep' = {
- name: 'frontend'
- params: {
- name: '${abbrs.appContainerApps}frontend-${resourceToken}'
- location: location
- tags: tags
- identityName: '${abbrs.managedIdentityUserAssignedIdentities}frontend-${resourceToken}'
- applicationInsightsName: monitoring.outputs.applicationInsightsName
- containerAppsEnvironmentName: appsEnv.outputs.name
- containerRegistryName: registry.outputs.name
- exists: frontendExists
- appDefinition: frontendDefinition
- apiUrls: [
- backend.outputs.uri
- ]
- }
- scope: rg
-}
-
-output AZURE_CONTAINER_REGISTRY_ENDPOINT string = registry.outputs.loginServer
-output AZURE_KEY_VAULT_NAME string = keyVault.outputs.name
-output AZURE_KEY_VAULT_ENDPOINT string = keyVault.outputs.endpoint
diff --git a/dotnet/samples/marketing/infra/main.parameters.json b/dotnet/samples/marketing/infra/main.parameters.json
deleted file mode 100644
index c7fc26a4a..000000000
--- a/dotnet/samples/marketing/infra/main.parameters.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
- "contentVersion": "1.0.0.0",
- "parameters": {
- "environmentName": {
- "value": "${AZURE_ENV_NAME}"
- },
- "location": {
- "value": "${AZURE_LOCATION}"
- },
- "backendExists": {
- "value": "${SERVICE_BACKEND_RESOURCE_EXISTS=false}"
- },
- "backendDefinition": {
- "value": {
- "settings": [
- {
- "name": "",
- "value": "${VAR}",
- "_comment_name": "The name of the environment variable when running in Azure. If empty, ignored.",
- "_comment_value": "The value to provide. This can be a fixed literal, or an expression like ${VAR} to use the value of 'VAR' from the current environment."
- },
- {
- "name": "",
- "value": "${VAR_S}",
- "secret": true,
- "_comment_name": "The name of the environment variable when running in Azure. If empty, ignored.",
- "_comment_value": "The value to provide. This can be a fixed literal, or an expression like ${VAR_S} to use the value of 'VAR_S' from the current environment."
- }
- ]
- }
- },
- "frontendExists": {
- "value": "${SERVICE_FRONTEND_RESOURCE_EXISTS=false}"
- },
- "frontendDefinition": {
- "value": {
- "settings": [
- {
- "name": "",
- "value": "${VAR}",
- "_comment_name": "The name of the environment variable when running in Azure. If empty, ignored.",
- "_comment_value": "The value to provide. This can be a fixed literal, or an expression like ${VAR} to use the value of 'VAR' from the current environment."
- },
- {
- "name": "",
- "value": "${VAR_S}",
- "secret": true,
- "_comment_name": "The name of the environment variable when running in Azure. If empty, ignored.",
- "_comment_value": "The value to provide. This can be a fixed literal, or an expression like ${VAR_S} to use the value of 'VAR_S' from the current environment."
- }
- ]
- }
- },
- "principalId": {
- "value": "${AZURE_PRINCIPAL_ID}"
- }
- }
-}
diff --git a/dotnet/samples/marketing/infra/modules/fetch-container-image.bicep b/dotnet/samples/marketing/infra/modules/fetch-container-image.bicep
deleted file mode 100644
index 78d1e7eeb..000000000
--- a/dotnet/samples/marketing/infra/modules/fetch-container-image.bicep
+++ /dev/null
@@ -1,8 +0,0 @@
-param exists bool
-param name string
-
-resource existingApp 'Microsoft.App/containerApps@2023-05-02-preview' existing = if (exists) {
- name: name
-}
-
-output containers array = exists ? existingApp.properties.template.containers : []
diff --git a/dotnet/samples/marketing/infra/shared/apps-env.bicep b/dotnet/samples/marketing/infra/shared/apps-env.bicep
deleted file mode 100644
index 030b82331..000000000
--- a/dotnet/samples/marketing/infra/shared/apps-env.bicep
+++ /dev/null
@@ -1,33 +0,0 @@
-param name string
-param location string = resourceGroup().location
-param tags object = {}
-
-param logAnalyticsWorkspaceName string
-param applicationInsightsName string = ''
-
-resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2022-10-01' = {
- name: name
- location: location
- tags: tags
- properties: {
- appLogsConfiguration: {
- destination: 'log-analytics'
- logAnalyticsConfiguration: {
- customerId: logAnalyticsWorkspace.properties.customerId
- sharedKey: logAnalyticsWorkspace.listKeys().primarySharedKey
- }
- }
- daprAIConnectionString: applicationInsights.properties.ConnectionString
- }
-}
-
-resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2022-10-01' existing = {
- name: logAnalyticsWorkspaceName
-}
-
-resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = {
- name: applicationInsightsName
-}
-
-output name string = containerAppsEnvironment.name
-output domain string = containerAppsEnvironment.properties.defaultDomain
diff --git a/dotnet/samples/marketing/infra/shared/dashboard-web.bicep b/dotnet/samples/marketing/infra/shared/dashboard-web.bicep
deleted file mode 100644
index eccce0dbf..000000000
--- a/dotnet/samples/marketing/infra/shared/dashboard-web.bicep
+++ /dev/null
@@ -1,1231 +0,0 @@
-param name string
-param applicationInsightsName string
-param location string = resourceGroup().location
-param tags object = {}
-
-// 2020-09-01-preview because that is the latest valid version
-resource applicationInsightsDashboard 'Microsoft.Portal/dashboards@2020-09-01-preview' = {
- name: name
- location: location
- tags: tags
- properties: {
- lenses: [
- {
- order: 0
- parts: [
- {
- position: {
- x: 0
- y: 0
- colSpan: 2
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'id'
- value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- {
- name: 'Version'
- value: '1.0'
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/AspNetOverviewPinnedPart'
- asset: {
- idInputName: 'id'
- type: 'ApplicationInsights'
- }
- defaultMenuItemId: 'overview'
- }
- }
- {
- position: {
- x: 2
- y: 0
- colSpan: 1
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'ComponentId'
- value: {
- Name: applicationInsightsName
- SubscriptionId: subscription().subscriptionId
- ResourceGroup: resourceGroup().name
- }
- }
- {
- name: 'Version'
- value: '1.0'
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/ProactiveDetectionAsyncPart'
- asset: {
- idInputName: 'ComponentId'
- type: 'ApplicationInsights'
- }
- defaultMenuItemId: 'ProactiveDetection'
- }
- }
- {
- position: {
- x: 3
- y: 0
- colSpan: 1
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'ComponentId'
- value: {
- Name: applicationInsightsName
- SubscriptionId: subscription().subscriptionId
- ResourceGroup: resourceGroup().name
- }
- }
- {
- name: 'ResourceId'
- value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/QuickPulseButtonSmallPart'
- asset: {
- idInputName: 'ComponentId'
- type: 'ApplicationInsights'
- }
- }
- }
- {
- position: {
- x: 4
- y: 0
- colSpan: 1
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'ComponentId'
- value: {
- Name: applicationInsightsName
- SubscriptionId: subscription().subscriptionId
- ResourceGroup: resourceGroup().name
- }
- }
- {
- name: 'TimeContext'
- value: {
- durationMs: 86400000
- endTime: null
- createdTime: '2018-05-04T01:20:33.345Z'
- isInitialTime: true
- grain: 1
- useDashboardTimeRange: false
- }
- }
- {
- name: 'Version'
- value: '1.0'
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/AvailabilityNavButtonPart'
- asset: {
- idInputName: 'ComponentId'
- type: 'ApplicationInsights'
- }
- }
- }
- {
- position: {
- x: 5
- y: 0
- colSpan: 1
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'ComponentId'
- value: {
- Name: applicationInsightsName
- SubscriptionId: subscription().subscriptionId
- ResourceGroup: resourceGroup().name
- }
- }
- {
- name: 'TimeContext'
- value: {
- durationMs: 86400000
- endTime: null
- createdTime: '2018-05-08T18:47:35.237Z'
- isInitialTime: true
- grain: 1
- useDashboardTimeRange: false
- }
- }
- {
- name: 'ConfigurationId'
- value: '78ce933e-e864-4b05-a27b-71fd55a6afad'
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/AppMapButtonPart'
- asset: {
- idInputName: 'ComponentId'
- type: 'ApplicationInsights'
- }
- }
- }
- {
- position: {
- x: 0
- y: 1
- colSpan: 3
- rowSpan: 1
- }
- metadata: {
- inputs: []
- type: 'Extension/HubsExtension/PartType/MarkdownPart'
- settings: {
- content: {
- settings: {
- content: '# Usage'
- title: ''
- subtitle: ''
- }
- }
- }
- }
- }
- {
- position: {
- x: 3
- y: 1
- colSpan: 1
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'ComponentId'
- value: {
- Name: applicationInsightsName
- SubscriptionId: subscription().subscriptionId
- ResourceGroup: resourceGroup().name
- }
- }
- {
- name: 'TimeContext'
- value: {
- durationMs: 86400000
- endTime: null
- createdTime: '2018-05-04T01:22:35.782Z'
- isInitialTime: true
- grain: 1
- useDashboardTimeRange: false
- }
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/UsageUsersOverviewPart'
- asset: {
- idInputName: 'ComponentId'
- type: 'ApplicationInsights'
- }
- }
- }
- {
- position: {
- x: 4
- y: 1
- colSpan: 3
- rowSpan: 1
- }
- metadata: {
- inputs: []
- type: 'Extension/HubsExtension/PartType/MarkdownPart'
- settings: {
- content: {
- settings: {
- content: '# Reliability'
- title: ''
- subtitle: ''
- }
- }
- }
- }
- }
- {
- position: {
- x: 7
- y: 1
- colSpan: 1
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'ResourceId'
- value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- {
- name: 'DataModel'
- value: {
- version: '1.0.0'
- timeContext: {
- durationMs: 86400000
- createdTime: '2018-05-04T23:42:40.072Z'
- isInitialTime: false
- grain: 1
- useDashboardTimeRange: false
- }
- }
- isOptional: true
- }
- {
- name: 'ConfigurationId'
- value: '8a02f7bf-ac0f-40e1-afe9-f0e72cfee77f'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/CuratedBladeFailuresPinnedPart'
- isAdapter: true
- asset: {
- idInputName: 'ResourceId'
- type: 'ApplicationInsights'
- }
- defaultMenuItemId: 'failures'
- }
- }
- {
- position: {
- x: 8
- y: 1
- colSpan: 3
- rowSpan: 1
- }
- metadata: {
- inputs: []
- type: 'Extension/HubsExtension/PartType/MarkdownPart'
- settings: {
- content: {
- settings: {
- content: '# Responsiveness\r\n'
- title: ''
- subtitle: ''
- }
- }
- }
- }
- }
- {
- position: {
- x: 11
- y: 1
- colSpan: 1
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'ResourceId'
- value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- {
- name: 'DataModel'
- value: {
- version: '1.0.0'
- timeContext: {
- durationMs: 86400000
- createdTime: '2018-05-04T23:43:37.804Z'
- isInitialTime: false
- grain: 1
- useDashboardTimeRange: false
- }
- }
- isOptional: true
- }
- {
- name: 'ConfigurationId'
- value: '2a8ede4f-2bee-4b9c-aed9-2db0e8a01865'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/CuratedBladePerformancePinnedPart'
- isAdapter: true
- asset: {
- idInputName: 'ResourceId'
- type: 'ApplicationInsights'
- }
- defaultMenuItemId: 'performance'
- }
- }
- {
- position: {
- x: 12
- y: 1
- colSpan: 3
- rowSpan: 1
- }
- metadata: {
- inputs: []
- type: 'Extension/HubsExtension/PartType/MarkdownPart'
- settings: {
- content: {
- settings: {
- content: '# Browser'
- title: ''
- subtitle: ''
- }
- }
- }
- }
- }
- {
- position: {
- x: 15
- y: 1
- colSpan: 1
- rowSpan: 1
- }
- metadata: {
- inputs: [
- {
- name: 'ComponentId'
- value: {
- Name: applicationInsightsName
- SubscriptionId: subscription().subscriptionId
- ResourceGroup: resourceGroup().name
- }
- }
- {
- name: 'MetricsExplorerJsonDefinitionId'
- value: 'BrowserPerformanceTimelineMetrics'
- }
- {
- name: 'TimeContext'
- value: {
- durationMs: 86400000
- createdTime: '2018-05-08T12:16:27.534Z'
- isInitialTime: false
- grain: 1
- useDashboardTimeRange: false
- }
- }
- {
- name: 'CurrentFilter'
- value: {
- eventTypes: [
- 4
- 1
- 3
- 5
- 2
- 6
- 13
- ]
- typeFacets: {}
- isPermissive: false
- }
- }
- {
- name: 'id'
- value: {
- Name: applicationInsightsName
- SubscriptionId: subscription().subscriptionId
- ResourceGroup: resourceGroup().name
- }
- }
- {
- name: 'Version'
- value: '1.0'
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/AppInsightsExtension/PartType/MetricsExplorerBladePinnedPart'
- asset: {
- idInputName: 'ComponentId'
- type: 'ApplicationInsights'
- }
- defaultMenuItemId: 'browser'
- }
- }
- {
- position: {
- x: 0
- y: 2
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'sessions/count'
- aggregationType: 5
- namespace: 'microsoft.insights/components/kusto'
- metricVisualization: {
- displayName: 'Sessions'
- color: '#47BDF5'
- }
- }
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'users/count'
- aggregationType: 5
- namespace: 'microsoft.insights/components/kusto'
- metricVisualization: {
- displayName: 'Users'
- color: '#7E58FF'
- }
- }
- ]
- title: 'Unique sessions and users'
- visualization: {
- chartType: 2
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- openBladeOnClick: {
- openBlade: true
- destinationBlade: {
- extensionName: 'HubsExtension'
- bladeName: 'ResourceMenuBlade'
- parameters: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- menuid: 'segmentationUsers'
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 4
- y: 2
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'requests/failed'
- aggregationType: 7
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Failed requests'
- color: '#EC008C'
- }
- }
- ]
- title: 'Failed requests'
- visualization: {
- chartType: 3
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- openBladeOnClick: {
- openBlade: true
- destinationBlade: {
- extensionName: 'HubsExtension'
- bladeName: 'ResourceMenuBlade'
- parameters: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- menuid: 'failures'
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 8
- y: 2
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'requests/duration'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Server response time'
- color: '#00BCF2'
- }
- }
- ]
- title: 'Server response time'
- visualization: {
- chartType: 2
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- openBladeOnClick: {
- openBlade: true
- destinationBlade: {
- extensionName: 'HubsExtension'
- bladeName: 'ResourceMenuBlade'
- parameters: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- menuid: 'performance'
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 12
- y: 2
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'browserTimings/networkDuration'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Page load network connect time'
- color: '#7E58FF'
- }
- }
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'browserTimings/processingDuration'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Client processing time'
- color: '#44F1C8'
- }
- }
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'browserTimings/sendDuration'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Send request time'
- color: '#EB9371'
- }
- }
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'browserTimings/receiveDuration'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Receiving response time'
- color: '#0672F1'
- }
- }
- ]
- title: 'Average page load time breakdown'
- visualization: {
- chartType: 3
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 0
- y: 5
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'availabilityResults/availabilityPercentage'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Availability'
- color: '#47BDF5'
- }
- }
- ]
- title: 'Average availability'
- visualization: {
- chartType: 3
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- openBladeOnClick: {
- openBlade: true
- destinationBlade: {
- extensionName: 'HubsExtension'
- bladeName: 'ResourceMenuBlade'
- parameters: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- menuid: 'availability'
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 4
- y: 5
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'exceptions/server'
- aggregationType: 7
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Server exceptions'
- color: '#47BDF5'
- }
- }
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'dependencies/failed'
- aggregationType: 7
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Dependency failures'
- color: '#7E58FF'
- }
- }
- ]
- title: 'Server exceptions and Dependency failures'
- visualization: {
- chartType: 2
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 8
- y: 5
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'performanceCounters/processorCpuPercentage'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Processor time'
- color: '#47BDF5'
- }
- }
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'performanceCounters/processCpuPercentage'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Process CPU'
- color: '#7E58FF'
- }
- }
- ]
- title: 'Average processor and process CPU utilization'
- visualization: {
- chartType: 2
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 12
- y: 5
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'exceptions/browser'
- aggregationType: 7
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Browser exceptions'
- color: '#47BDF5'
- }
- }
- ]
- title: 'Browser exceptions'
- visualization: {
- chartType: 2
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 0
- y: 8
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'availabilityResults/count'
- aggregationType: 7
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Availability test results count'
- color: '#47BDF5'
- }
- }
- ]
- title: 'Availability test results count'
- visualization: {
- chartType: 2
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 4
- y: 8
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'performanceCounters/processIOBytesPerSecond'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Process IO rate'
- color: '#47BDF5'
- }
- }
- ]
- title: 'Average process I/O rate'
- visualization: {
- chartType: 2
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- {
- position: {
- x: 8
- y: 8
- colSpan: 4
- rowSpan: 3
- }
- metadata: {
- inputs: [
- {
- name: 'options'
- value: {
- chart: {
- metrics: [
- {
- resourceMetadata: {
- id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsightsName}'
- }
- name: 'performanceCounters/memoryAvailableBytes'
- aggregationType: 4
- namespace: 'microsoft.insights/components'
- metricVisualization: {
- displayName: 'Available memory'
- color: '#47BDF5'
- }
- }
- ]
- title: 'Average available memory'
- visualization: {
- chartType: 2
- legendVisualization: {
- isVisible: true
- position: 2
- hideSubtitle: false
- }
- axisVisualization: {
- x: {
- isVisible: true
- axisType: 2
- }
- y: {
- isVisible: true
- axisType: 1
- }
- }
- }
- }
- }
- }
- {
- name: 'sharedTimeRange'
- isOptional: true
- }
- ]
- #disable-next-line BCP036
- type: 'Extension/HubsExtension/PartType/MonitorChartPart'
- settings: {}
- }
- }
- ]
- }
- ]
- }
-}
diff --git a/dotnet/samples/marketing/infra/shared/keyvault.bicep b/dotnet/samples/marketing/infra/shared/keyvault.bicep
deleted file mode 100644
index f84f7508d..000000000
--- a/dotnet/samples/marketing/infra/shared/keyvault.bicep
+++ /dev/null
@@ -1,31 +0,0 @@
-param name string
-param location string = resourceGroup().location
-param tags object = {}
-
-@description('Service principal that should be granted read access to the KeyVault. If unset, no service principal is granted access by default')
-param principalId string = ''
-
-var defaultAccessPolicies = !empty(principalId) ? [
- {
- objectId: principalId
- permissions: { secrets: [ 'get', 'list' ] }
- tenantId: subscription().tenantId
- }
-] : []
-
-resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' = {
- name: name
- location: location
- tags: tags
- properties: {
- tenantId: subscription().tenantId
- sku: { family: 'A', name: 'standard' }
- enabledForTemplateDeployment: true
- accessPolicies: union(defaultAccessPolicies, [
- // define access policies here
- ])
- }
-}
-
-output endpoint string = keyVault.properties.vaultUri
-output name string = keyVault.name
diff --git a/dotnet/samples/marketing/infra/shared/monitoring.bicep b/dotnet/samples/marketing/infra/shared/monitoring.bicep
deleted file mode 100644
index 4ae9796cc..000000000
--- a/dotnet/samples/marketing/infra/shared/monitoring.bicep
+++ /dev/null
@@ -1,34 +0,0 @@
-param logAnalyticsName string
-param applicationInsightsName string
-param location string = resourceGroup().location
-param tags object = {}
-
-resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2021-12-01-preview' = {
- name: logAnalyticsName
- location: location
- tags: tags
- properties: any({
- retentionInDays: 30
- features: {
- searchVersion: 1
- }
- sku: {
- name: 'PerGB2018'
- }
- })
-}
-
-resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
- name: applicationInsightsName
- location: location
- tags: tags
- kind: 'web'
- properties: {
- Application_Type: 'web'
- WorkspaceResourceId: logAnalytics.id
- }
-}
-
-output applicationInsightsName string = applicationInsights.name
-output logAnalyticsWorkspaceId string = logAnalytics.id
-output logAnalyticsWorkspaceName string = logAnalytics.name
diff --git a/dotnet/samples/marketing/infra/shared/registry.bicep b/dotnet/samples/marketing/infra/shared/registry.bicep
deleted file mode 100644
index d6629f862..000000000
--- a/dotnet/samples/marketing/infra/shared/registry.bicep
+++ /dev/null
@@ -1,36 +0,0 @@
-param name string
-param location string = resourceGroup().location
-param tags object = {}
-
-param adminUserEnabled bool = true
-param anonymousPullEnabled bool = false
-param dataEndpointEnabled bool = false
-param encryption object = {
- status: 'disabled'
-}
-param networkRuleBypassOptions string = 'AzureServices'
-param publicNetworkAccess string = 'Enabled'
-param sku object = {
- name: 'Standard'
-}
-param zoneRedundancy string = 'Disabled'
-
-// 2023-01-01-preview needed for anonymousPullEnabled
-resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-01-01-preview' = {
- name: name
- location: location
- tags: tags
- sku: sku
- properties: {
- adminUserEnabled: adminUserEnabled
- anonymousPullEnabled: anonymousPullEnabled
- dataEndpointEnabled: dataEndpointEnabled
- encryption: encryption
- networkRuleBypassOptions: networkRuleBypassOptions
- publicNetworkAccess: publicNetworkAccess
- zoneRedundancy: zoneRedundancy
- }
-}
-
-output loginServer string = containerRegistry.properties.loginServer
-output name string = containerRegistry.name
diff --git a/dotnet/samples/marketing/next-steps.md b/dotnet/samples/marketing/next-steps.md
deleted file mode 100644
index daae17078..000000000
--- a/dotnet/samples/marketing/next-steps.md
+++ /dev/null
@@ -1,96 +0,0 @@
-# Next Steps after `azd init`
-
-## Table of Contents
-
-1. [Next Steps](#next-steps)
-2. [What was added](#what-was-added)
-3. [Billing](#billing)
-4. [Troubleshooting](#troubleshooting)
-
-## Next Steps
-
-### Define environment variables for running services
-
-1. Modify or add environment variables to configure the running application. Environment variables can be configured by updating the `settings` node(s) for each service in [main.parameters.json](./infra/main.parameters.json).
-2. For services using a database, environment variables have been pre-configured under the `env` node in the following files to allow connection to the database. Modify the name of these variables as needed to match your application.
- - [app/backend.bicep](./infra/app/backend.bicep)
- - [app/frontend.bicep](./infra/app/frontend.bicep)
-3. For services using Redis, environment variables will not show up under `env` explicitly, but are available as: `REDIS_ENDPOINT`, `REDIS_HOST`, `REDIS_PASSWORD`, and `REDIS_PORT`.
-
-### Provision infrastructure and deploy application code
-
-Run `azd up` to provision your infrastructure and deploy to Azure in one step (or run `azd provision` then `azd deploy` to accomplish the tasks separately). Visit the service endpoints listed to see your application up-and-running!
-
-To troubleshoot any issues, see [troubleshooting](#troubleshooting).
-
-### Configure CI/CD pipeline
-
-1. Create a workflow pipeline file locally. The following starters are available:
- - [Deploy with GitHub Actions](https://github.com/Azure-Samples/azd-starter-bicep/blob/main/.github/workflows/azure-dev.yml)
- - [Deploy with Azure Pipelines](https://github.com/Azure-Samples/azd-starter-bicep/blob/main/.azdo/pipelines/azure-dev.yml)
-2. Run `azd pipeline config -e ` to configure the deployment pipeline to connect securely to Azure. An environment name is specified here to configure the pipeline with a different environment for isolation purposes. Run `azd env list` and `azd env set` to reselect the default environment after this step.
-
-## What was added
-
-### Infrastructure configuration
-
-To describe the infrastructure and application, `azure.yaml` along with Infrastructure as Code files using Bicep were added with the following directory structure:
-
-```yaml
-- azure.yaml # azd project configuration
-- infra/ # Infrastructure as Code (bicep) files
- - main.bicep # main deployment module
- - app/ # Application resource modules
- - shared/ # Shared resource modules
- - modules/ # Library modules
-```
-
-Each bicep file declares resources to be provisioned. The resources are provisioned when running `azd up` or `azd provision`.
-
-- [app/backend.bicep](./infra/app/backend.bicep) - Azure Container Apps resources to host the 'backend' service.
-- [app/frontend.bicep](./infra/app/frontend.bicep) - Azure Container Apps resources to host the 'frontend' service.
-- [shared/keyvault.bicep](./infra/shared/keyvault.bicep) - Azure KeyVault to store secrets.
-- [shared/monitoring.bicep](./infra/shared/monitoring.bicep) - Azure Log Analytics workspace and Application Insights to log and store instrumentation logs.
-- [shared/registry.bicep](./infra/shared/registry.bicep) - Azure Container Registry to store docker images.
-
-More information about [Bicep](https://aka.ms/bicep) language.
-
-### Build from source (no Dockerfile)
-
-#### Build with Buildpacks using Oryx
-
-If your project does not contain a Dockerfile, we will use [Buildpacks](https://buildpacks.io/) using [Oryx](https://github.com/microsoft/Oryx/blob/main/doc/README.md) to create an image for the services in `azure.yaml` and get your containerized app onto Azure.
-
-To produce and run the docker image locally:
-
-1. Run `azd package` to build the image.
-2. Copy the *Image Tag* shown.
-3. Run `docker run -it ` to run the image locally.
-
-#### Exposed port
-
-Oryx will automatically set `PORT` to a default value of `80`. Additionally, it will auto-configure supported web servers such as `gunicorn` and `ASP .NET Core` to listen to the target `PORT`. If your application already listens to the port specified by the `PORT` variable, the application will work out-of-the-box. Otherwise, you may need to perform one of the steps below:
-
-1. Update your application code or configuration to listen to the port specified by the `PORT` variable
-1. (Alternatively) Search for `targetPort` in a .bicep file under the `infra/app` folder, and update the variable to match the port used by the application.
-
-## Billing
-
-Visit the *Cost Management + Billing* page in Azure Portal to track current spend. For more information about how you're billed, and how you can monitor the costs incurred in your Azure subscriptions, visit [billing overview](https://learn.microsoft.com/azure/developer/intro/azure-developer-billing).
-
-## Troubleshooting
-
-Q: I visited the service endpoint listed, and I'm seeing a blank or error page.
-
-A: Your service may have failed to start or misconfigured. To investigate further:
-
-1. Click on the resource group link shown to visit Azure Portal.
-2. Navigate to the specific Azure Container App resource for the service.
-3. Select *Monitoring -> Log stream* under the navigation pane.
-4. Observe the log output to identify any errors.
-5. If there are no errors, ensure that the ingress target port matches the port that your service listens on:
- 1. Under *Settings -> Ingress*, ensure the *Target port* matches the desired port.
- 2. After modifying this setting, also update the `targetPort` setting in the .bicep file for the service under `infra/app`.
-6. If logs are written to disk, examine the local logs or debug the application by using the *Console* to connect to a shell within the running container.
-
-For additional information about setting up your `azd` project, visit our official [docs](https://learn.microsoft.com/azure/developer/azure-developer-cli/make-azd-compatible?pivots=azd-convert).
diff --git a/dotnet/samples/marketing/readme-media/agents.png b/dotnet/samples/marketing/readme-media/agents.png
deleted file mode 100644
index 0eb6203c6d1da1f7ec112d1d7d207459ad60dddc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 926329
zcmeFZWl&t(7Bz~yyEegsyGui$ao3RGZVB#<1$PVX76^d=3GVJraCdiic%5_3J@wvK
z@7{BNysG!-Ry9R6RqWn-&AH|rW6ZHSOhri=9fbr13JMBcRz^Y%3JSp!3JSIv2?6pK
zIi_DokYCVFYSQ9RWg}#JkT-A^Vv1r=P(Nc(AC2H4?~(0g-aA1-5zzkrftFRHIfa6H
zDUg*A({R^6e1iAN=$&fCeDOWGkYM;?6`)wsV0-XIHvTokm(wcm92+&;341k+uh3jH
z9DN^CQ)vQHQd3inx`&1gWrI(IEZ){Oz3r)(POAFsvVBos(a1N1-Waztbp9EGx$C*+Ho{$uK(Bc4Ew_nw
zOAk9&+f4a@Z(8^$`$dc$`w-p_OJfnCiywy^wC0tV)tlogF3wy-UcDKq5%gQ|CS=xY
z#&VOH_h|XX(D}J|=#hJ>sA%TrML`1}%_%|j@NisCMS|PJ=EbTJ0C5ImbC?1&Lt9%7
z@*6Z0=7`r)lqQ9wNx;IckJq_L!X(Afw!x_>o*o2$!1$*MXpmo^aZMFT
zV&>v;aQUeru=DX1M|%cyBuV1t$8t=d4+7MUc^_2d0qC02e4RsXL#g$lYWnOwxdg0*
z5=-Ak*%=AgN#w@cQUKL$hOc9^i-ybzI0Mz*uychJn`9Xkl2q?fCQzBbRvCcW-jV}a5F^~{V
zzWraSdtY695C%x`yE7h}#wyiv*8}d)^T!MvC_+@G*NT
zgv}j-SUk8j$d}N#RyZuSspLG`i9)pNQgB?pigXseYqO-6gf#(A!UUuWTjz47zwg76
zgKi%pD~|REPPLxQ3sDJANqxfro03kd*$eC>8q5n*?MvAUHj824NcS$HjR`K!PdC~Y
zg5AhX)r&?f
zgb@}#kl)oV#pr~NdgInEDhY?`h`eCg-gSW3A3AC;7tc=3j=j1**>xV4oe2vbH&X^L
ze494N)G5CeZfISrx7?B5k>61ss~+R=K89}Jb-_8GM?dcV4$4@Ouv}R}>-Z<~;S@A9
zq_8c>z``Qw=_!POfM9>TC=g5>;Dbv}PEOCnr2gzm6m0azivuGG7)kPP`39q3+Yq@%
zlqEhfF|nM+!t&vm%gpq&v8AO<-u|Hl(b0{nfkF8rIR{!N`|lT*$GdBG>wixK;9$7i
zRCw|mDx#;CzN<$O;y;&c
z+r0bm0&{;yso}_{*|c8#nTTBpLR|hMP5JA#xZ^1M1_wbpIzsdF3*+;@!tdt=10Os)
zhqq}s=OfFeUprTEQ?c>gGz2M^%_h?*ySwv8Q;0^_)$x0LoT{0Dol=ffAQ`>t
zqfLvD)o
z&FRLLD4i1@wA$s1Isn*rCZD}=!zji3nR3ywQ6Fwe97c-PFVx|)d9mStJ
zHZ3ExDiEp4%{i~S8b2y3ir?#$==t>GrPCnmky!s}LtQ2;>Wx;q{%sZaBr%JkOwE``
zbaeFXY5?Zxh|r1Q)<7b^{VG&bbMqFjfPg^u>?o1Ud4_-!LhJoh`Kj;AjqmNImY-&oA#G+$9dGh(s{5L8?46olc5&~n{GEy{fNeBh6aSCQ}
z9O;3Ks0%R6?!2BUn-A;NY5iNg-^1xKQTM%B)W!U7V(t9)EpG=b5F4->etoSZ5U69M
z%CYQo0VMk|3w2PQJkogmy_a;3pI)(vfMr|CBN5WPADKC
z;73hO`%UZ1iu@z(OYFXr+t~Fzt>3KitYfc2&q`q_rB6h0{*$hhpNQRaJt2Oe0~M
zFMQ)M6=ibEV#-Y;`3~TPEqy0DQ%Z;4=$_`N?ux`+3QAXI*
z+_e4v)F^NvOMEjf(_a6AKNRkxy%nbd3x|p&{+-hzlfTZTg&i8?I
z+2_HguCDIYt5;A5Gv&Pp<*m^c+1>;rBO^2T_9|F$2?>F}bFN3(=Nwn~v<>!l>BJ{w
z<#C%22mI27tK9c7?^`TTgZJZXxQ^`|%yGR1<>6t5#1ChrhZ~CaucF?3A`f$(tDBpz
zYt@fD?=P+1y?;;1%#7CPdh~g4mmdxvB~a!vmWKKa6m(5H{wCIoh=?e*y!gVT5TT*=
z>FJ4|`PsLqv@~%AsQ=BMTo@pD{8{Da+QWO=;AX
z+HDo@bXf5Hra#txQ_atxacUNWNi65coG8ZAr8;y4G1b-8A1@~a_a(9qC-j3=pg>f6
z)ie6>$|b5bDn>@RXu3$?lhxHvnk8=`(o62>&Zt3~(`a+#sMofw@a34BmubcOE{Fe
zbp3Lx#<2!_5agFiE0<0a~73&=&=5y+DD6(Qr}5OGJYATWz7jAJo1Wamb{e4
zQ+r{2c^O(yiqR|jIArwLX7*v<=~UPSZzzWtz$BWM&rwCyXf9o5fa>)C-A8Vl(j!KJ>dxk+c27qUW~rrXWtD0>t3FvRSi~N
z(JG0Ha~?MwlyEj$JlzjFra}UdSZOgjz)X!&VHy1e=y~1uAU>nKBTN3mz`(!>_2m#C
zXqToORzs=!#*Y|Y!5LHb&DfaTMogyyxrQ(h=r9Vrk+G7ItX?uT!vw0{t%XnwywD}F
z>M>T1?>@~}f7o&qoQ@hX>iz?#bPnkkl}ckeHs36Ja$a;}k!-s$nqhWp``%AvZ>r2E
zCMKS*@q=eACkhqMDGR^Zx~X~A78S|#FhbPtCsBqU^yaEIo;<9B_@7yD4e8xpNBGsn
zg__+fH`y16o=xYrRjU^9Grn%B9?EvK{;
zJ#p%azsZ6kx=i2S_j$dSzupYjIrWa7g;`8blSiAxI*x_pEc^RKyk&(&XD~Vr3TIPO
z)8-G`H1}LB6yELd!(0KKEZ=7{ulor%qj4(GTs)20=vNUJ#Ocxn`efo`c@+Vd{RFZ?
z79Ji=*T)H57v~sbV`Eb&sT)cT4%Gp`XF={`9&|dXb|N$QxWllhs6@~w7gtxGb+XiN
z0TLw00t1J+ADM8RA%ID)otJnHGUH=jF{w_H=))E%x=6#fl9k7|>lZ)ZbdekHLc!me#@0xD>;HO(|Uh_6xDQC<(
zp)SNNbkTjdzyA#{l821#ot+cJrQ(5jXk+pE+=1;^0|1oJ
zqKS-PhYLu7%W!ZF-HdL`YH?RTd?I)eis<#K2+qbK;0O
z8}!bMDv)0;VPaqmtgx6Zs34=Dd~VfD
zF7qj#kVb_s(0m|CJTNkJ7l$olx*?R^7tT8gqv
zIzx}jGnO&&KbDGsVr<1Z;5S)^KE<#%AGK*+GZlLQ3uH|#^RR4>3nbDvSzTGf4`;tt
zn149MU@B$EwzW`WBO&EDe4!I{C`$4G8E?#4WG52iq`6ZfgHjpGo6f_BT<2{Pr!n5!+bc^+HJmZLO#b+q3nSB^
z0(IJf%C>qnW03rwKcQZ{Vp~eEi6JE?l8~e$iqlKxmDQO0IJYwtyg&~ek5)X8#-K_Z
z)BukdV)S&+lK1S);8z6!#i^c=6cvi`b{iaTudx!oNxq0GNdFlAR}NM4SP}6=?S1rA
z)8!Q@Q)fv>`mdNFm3(Y$0=!VG_@mR=`@_mnzeG=w>Enp50UN*B51IZG#~%C}xdD~Z
zBx-70681S|2ihtsxjdH)nb}##c?#*@Q22{%i!wmWmTy88M~QJp
z_txL>j!a#f*y`^J@j>pHk4oTg5*A>FncwqohkJ6b*qsnHskH+(6~SPFYcj`9{RM?O
z$tk0YTuZMiE;t>Gz>TU87%Apkl$u?%A)6<~Rdy@|^N>f4!S$j}P);;>M#u
z*W}Q{UFQ4?{0?Ib0;Hn;?KJ8yns@2$SWy|9k`Y!{MRki%&@sV=EVjmA{2rmAoGaae
zRU9;sn4Da>YZMvm!}Yt>@O`^-kV;{@Y2Of@=@)9D2)Gzt
z({%7cJ%US{K}1y*H-uTIPJuFSAS?il%W9VoGzWx$@$=d*_fda-ghF63`5^lR@;?Vx
z#&AfwO2F&2yrd*N7z}=Q$vzYH+H3d!b}0hQha@9g*MH{xIT*WlUAGvwetyuhzP>L+
zla!)aXAA5@SK_U-Q+APm;39M3;3Guz&YJJV&4cWGO#i$LMI_^VOu>FXr`MD^D^z=w
z+}v*Pon2i1TFFRRq7~kPYsP9Fo->o#GR(5n~Xn6$&V|)W`0^Ban5i5?OQo$jK578n2%`$;2EIYHlO)J7{Z%4VJp?pNvR_X<`
zHlu*XK_GoBX7Jw+S2wgJe)QgY#=2ui$`q2Wi;&w&IG|ex(}Zx?+>we!(3b6x(ZQmZ
zORvC^2P_+mKBc2+4;APkl1GS49NgMikkWvI;iqZIZ%w?od?@HbvAb$k8OmY2Zk}M>
zT`SRx)8{!jy^c=yDh}&|FaLS4`&U4+(C}t8w6v&&ggmwVd5Ys<-nzNDd0mc6zpHno
zt+81Mj*Z3Q=H=~}nQ>F=EfCzbk_O+$_3(dfv#bb$p>GfoO#1qj4nlUv#>Util72_=
z&z1g2PXm#6=1mvu1W{eK>1b(ltE*j{`zP_NOU%v92Wm<=g669yTMAr{uS{<&JBhy*
z6s$entRx@VGERc0f^4gBGP^!!$-#
z3{1+RJXp-egf+?#W3Rznq!mXz{>1gch*F1}2!gteYHxl(7Oju_P63(PRKCMO^NQbG
zX3T2R0!0@~b~A-mqUgVyZF`C9viIcwwh{c5kKQcw^h~U*J&h+VOt2GsNF#!RfD!i@JGKef3OoclF3MGISVd+QF--ume1
z1_uUK_xHoQy1K?o%k+vPT#8Oo9v#?{Bj~YbmU!4hE5ym~gIOb4Tb~_$Oo?_Ray-Wk
z)2Ot0g&p62(ra)QL+DJd&85Q+VR!V={139J7u7d|?tGK6geRuCGzX#t7
zsxEL>XR`dYDU<8fi&$iiIDLJ614BXv5uJ;0y^2v?YSbSR=ouOP)6+@Q($b`6mfdBQ
zl!76e*T(}A9khk|_(b63G_|UUon1^6Dc^dkMONI->2FvgVk&vG)Zd5wSz%J-ZRtb~
zcz1F4T{^E#$M$e~@AAU@{J_Qptlnj_;ufr_hEk?r&~KgL++9Osff)4(L8d|_L;UAh
znO-9nK7LSI8cEaB^}@MeAtP_zgII<2RIw)K_1*18%$8jYz+b1;2e|CMfzCi-QF2P@
z!1c-}#uxcp2W$}hOHps22S+l6
zut`W5W2B*RS@IRA5D^g{XMCTM(aMU7u4mX2fR~fh@agdk&dh>J9v=0N3NGWgp&Gkj
zps?_lPiYDQHP^7Sz4$RcoP}uZ>zRCUy6?kSn38jTjPo05l*vo_m@Vwmt**<6;^c|1
z9qmQ`xK*hC-du>4wXUtJyQDfjM$39kW(;~-WA*P_-Q})VOk^bo93R_Xor-~Gw!WHO
zOsvOYQNU_tv+HJ;)kFDOkS1{Jz2MftW)9OcmlHoZ*H=wy=KUf^txEc@g#}WyIYp!L>
zTwca0*^c1-jE|n0OjXTEOI+{gKs$;@w_AhBgSEC~8)kIp0pV
zlS2lTU!D>?iCB_OwZsRZbi>f-6p3`=5EC{*fZT_cVe=(A4KYz9P
zY5SEkOXzZ5zavvvN3gLvskT4LQF>e)$GxnmGfe+0l+7~D=yC&?-a56jW0+qXoon02
z0p~p!PXnksu>_%01#Pp0n
z*MG44zyjkXj75|h>V#*ZPbO7dG&m>Dmdz-DiaW(azqBj#7UaalljN;Yp%X-;9
zJV#9442yK_Ds8ia1m1VCzlacbF%tC8+Y@A??3+LjO4K~Px|E11Y8B+eZi)M5oXJ1=
zCZtZZy{HW9;VyX4>?xC_Z+Jx9B|x8Dj|}i8j+L;xz^tgurVZZVFuIV$)WR&ktX}=2
z1G3-oHN8!X+O@8*FNT@qUEeTUM;p7<7t|tFCUIAN==<&+Xa^gCb$-pLBO>BMNt2SI
zgI^vRi39`Q_xBI08}2x)K5@Ip6jEC9nf&Gi)@gfL2IA`8
z75j>^J->P$o_yR*?Bp9O<7L({ZsI|Gw0tLsUsWTd
z*Gv5@(3jH(D$rtMKgxTYC8#^!q$^#RlAa5etzp6$549YtFx
zRp$P?IY7kb{I_AnP*t|@a}_ceif$boJ8
zNH`dZ&9muZ#F6_tE2MXAc=pEu5ex`|c76q8QDDN|HmsHMt$<8?DQcQuFw{Qm8=mc7
z%zE_^T!-+jdq-^4v5!S!CVNA9p1dJjszGQRg`*ldpig>7CgE-mN1~nn<8Fn`q@Ume
z@#QvQLf>Kfa+xdM&X-s0oY1g9a{HT8m~Z(JAo5ek3n`62ieC}hn;tve2vn~)$wZ*<
zznX=l$*&!jj#d>9DZWuKCvG5(SlcIL@Ncz+ySt-e;zP_TV=c1Y6E_a!6F2!B7l#!b
zKzBGMD(wF_o#uxU!b_MR;4le3x?T86<&Ds9jT-0
zZwWx>$hNjOa|pC+`NK;xdBGJLXqDlS3<(8doi$c-uY-d`)OiQyDlO=yroT9SaXp6U
zoG$wlPkEFJ^jvcBa8(&J2xhafpYpCxss(SO;vfp@Vcd>4!1I`O#?N|lwk2~1M;zRdC=#SN=p
zHT5Vl?-Mo_4&=_ddK?q@uEM6WAEQ|Z6D3htBa(G&8!61QeUWOH?`*vGmrr)Ne7g=x
z-MmR_L$`3vpNLo~V%{mcten>)+7BMBB=p9D2E#V~x!L@&omf=zUYT6&PjNm3lf2-4
zCl(hQj)GH}+*4LwBNz42Mfg-~Q>5|@>*L#1k%}+l>7^=^Avs?^(zt{vv2%HW+5rFmhKInued~UZ2{1+)cH})9ZQ|0
z%>mT({ey2zCFqsNgu=tOeF8lM@|rxb;E5ehF_FaIdkY~n>crtuz=|p(&bkNYmlhI@
zupW;kPKTe^Az}LfkiwM2Z|Wl~*+%`PWpL7pQPkfg2`t=Sanso_ZLIn*3MP38o1_Vp3GGSl_^T*
zMpAy}q;V~p$mDb=8tasroGyq=IAEDnRnENCh%utHdP9CP`JACp510d;n{|idJEj3@R7$WUC!n$Hn0x4oj9cfaiYM@3(n9?{319y=+XUrB!DxcT_bE2h-=#X>Fr
zYz5ixR#FYhCv`m}`>XpJxgH+E2zpNS4w;Y1N|^LD-`dZmEBB!a0!+Ko9=jNxylT%k
z0tpLdXL-n3C59>9ApdPA%(g?+70#5CoyNMWIA6w}FEs#)
z!gB3Bw+*{w^f}&FQ(9(Y9IA$(cGlc}K(QTXP_(j%>4zW~6%?Opak09Hh=``^4~ZKG
z$sH_=en|B0H@Wr)`5BW{9QLud0WK$x=py}^ry@-l
zblz;3KInuL7uF<(V171`nhNkC(9ET`_KS<&9nQF_G#d+cVib9o#V
z->lyL3I%^fo?`K1smlBq-H3@ZQEkNi*~B*q4HJdS
zpbb7U^up2pyyG;;r%q5X-0-recX8)W4XJMEBjwy1+-dc}zL|u-RC3Dv%
z>DBY=>fXuGrj-Om3uw~v@LYu>Miz}#6H%8Gd4D)$x2?idd~9_&c>6wNI;(KR3%t9x
zm28kS<5@c5Z30nj;E201Y2vvdMCI4=vQKAcos|lugV>C8P_(p-hae&jAu=+uTJ&O{
zLlJ-Y^+qlz#L&iuB}V!^hqA~W&GX}q=-`K?3bTkupS^nx7X^e;Zv`jlaR-@^Qtf(_
zRI|NzdsTSyM=R1|-q0g4i?dj^aOCn2`_m_F&p!C$%b
z&ORn_J!hE2RH9q0M^K1~9|?Hvd}ITN&iVDmRIU9C7`~m(dd+-wfb&ptK#t4L*lvQ<
zpRSBnd+l<^Sn1Pp%EDkN@>FoLF>&KX1?d`yE#!9?U
z?wkMP=75-)==@0@XiO~^Z9a?OZ7x}=@B&c6>EHayik!&G`m&*xOSk2EI7_)way>I<
zikV3b-|l=2p}J%w6gs5E0sDEBxK-jCRTG;P@eI64AJ*bk0|qoine{8k2naqHc??Nn
zlq3-xe!3BP=TGh#LoLKaTteXcDf8iGZENSn|FQvr?9rWv)B3|t-wDBl8uSfgH|!*~
zxlb*qApS}V*tew%pLjlqNI2`WoUeNsQTlIR9k9f%uzxzI!ECzTHtsUpe8tNFOU}Y`
zdUY-FsTI?o3RldnqKuuKwG422c`5$hq&D=@6Kiwp^@*pj`Nn?Nbwo&mv{^S20rF9sn2^nAHu^Py6>^i4b^7
z_CAVn26)SoUzD#n(W?vUPchLF7Pwu}bL*K&T}N!`85x3W(^17io%Yw0Ru11WBoGjC
zY))aM!0D@d_(&u{!W@&N`hKdrq^Y{wgnzMivuiwS>dz@T(JnUhM%E>9IrVYk?}a82
zIGAY|dN7YXse`&;tNFe)%XQMKlO~L$M{~`IAL%GwTiUFg*{q+b=%mkAe3LWhdJ!TW0D!BCNGnclUFRMOR*
zLvXWcw1;uAI>i0^_nceegyq8_iHT$AzHNP
z>`DmqSok!ZQKwI}Di$*g&;F6xbU4I=S#z9oqEFxDtk|P<3;soy|cKLDGD0aG*O<$9*
zyar${QGCXykzDq^(VMF&r0mppUxODACN?Wp0nY4ieihvHDVnxYAy2?pwgDHX2Z!b7
zo>|K9kibL*hZN=x&wF|WuE7XW?0cDH)MdwoZrbq^s47E=r-%(6`=B@_oXiU
zrFR~IE^f|*-UTgKw{hal?il+A5`)JwU0W%q>(HZT^^Y&v*^Lx0l-FOslleoWZOgUMYdqMIDbX(ub9^Ydezp68SF{Z%G*}L
zEUQ!7N4fV!%l!l>X;%IQBo$Fvi%xECt!rN;cBJbA7ZZr!5a8RVhRGWSlE%0Go*;3l
z7nRB!waw{T?i$+Q_%crV(C&%NvBfi7Vh!F>E{2}j7~|8>$VA3Q^1B|UWDo{NE1Fec
zI;!fV0)o{_xdNjlU95ivRfHAUCaVOkiR9?Wnqa0QgX&1LV;I?Iy9dJg}({o9Ahm~H;DlV5P
z)KZWQk{%qp3mo&%$WAnQ>hCpa2HtL-L~GIYrP;E=$>*d
zHbY38r$Tt@-W|kpu|60h8Yb;?!+_(j0r5`@p4{XGXOvxZ5&*V~Dgg@l8Zz
zO1gLd=tNS+6|2LkbBu0Txf{!NVz}>AV3Hesm5yR^-Klk`XQl>kJ#5$9i>-=$1@*Yc
z1lrsEH5e-~lY1qm0mE2ffANWE=-3Oc7UG9}+_AybrF0f?S>QXH8}&sssJq};bUL{)
zdfuXtPrYcH@u94AxJ>20|48;(5Hqgpt|$JsXU5kr$lyUVsB^aEQZ+A{jDo*ixU$wry7Hw(_1
z9%c0bqw?_}7xbBsJ0co4pJ&nXjZ)v^pbH0bV`0x&Vi?&ZsUOf{;I7svFw7NPR%v$&
zdb|6>iKh|ka}FsWAeHLxv%Y_M?|0`A;CV@kuW)nWTj1b3<|ks9?fxYr>DCQ(iyyt~
zbS?e)9>`dztuVxgwvo8klC1GkaFI+i;r;zvV4!kZ8ES|(iJ`$VM#w%ZzlLjPOCI4!
z;#1K+N!J~+1ZJ)*c^cOaSFLF1!pSY~am$XUV+s$B;L77Yn;8K{7+Les9ePXkE&~I&
z<$3C*TdU<xZ7|qBHTf`U7R#>h9tcC|wh6KwNiqCQo
zJEG!~@SF8nN7fuR;Yj82SO*%PE|ClE>n5zS&Q{V-Zty3>r!A`issu9!9$$Y*zwbrQ
z#o|;)N6rfIydqFQswvtV&_1gpWB|4l_RL12jZHq;gaL$L55tUs82S7ps~XO!6IQ?hNUU$d
zFRsU+vk=^^HV@7K-O{TmkU>;jaoOJbvviiYf0xpBiZJc||c7^7lFEzdZGJyj82oFh(emdsaeVoX=U2
z8-F!*h+V*}3~zvjV`w)OWxSJ}t2^id)YeU@OM;D--RK|23Ffx!tG4sH@;w{l%Sxcy
zQDtzE*?p8l$t-8NwPWx(zFWt=?EtQH+uR68kH*Gg$9CmLk^$GBnvLfygRzEhK%lO;
zuH3_%p8|em-4?AJj6N+qzGkCKF`@!i;~-{i;m30|GrgH8@eu`l8V{e=ITX@!&mYYQ
zvtpkuG%g`FM5^(8vn$KIUX^Rhyq&h9T>;ZJqxQmEZQREF^luYihP
zmCML}K+ta7CNu>(%G+rkJSgq0hlf9NjFK9y
zk3B({j|z-tiWvq7YrXZg13pO&rG69tKg(+iu_`jfk(G?L@_IMHU#6q(
z<0kZ;ubIGK4jEe1E{O&p{{^v4j1m&+GkBKKf{_f`^F^~7z88HEtJu-b>$RNY3XxE@
zo{Z|xLZkriS8S%ffvjs5DISp7vk?04FFW{aID2p2%}zA^CFa`n3j+MupLP~BE>iZ7
zUn@2t=ij;QqItDON-v9%$r&75LX=f&M)Z