Skip to content

Commit

Permalink
Convert to azure-native (pulumi#925)
Browse files Browse the repository at this point in the history
* Converting Azure examples to azure-native

Co-authored-by: Levi Blackstone <[email protected]>
  • Loading branch information
mikhailshilkov and lblackstone committed Mar 2, 2021
1 parent dc1c3e0 commit 2e9e18b
Show file tree
Hide file tree
Showing 781 changed files with 2,890 additions and 36,313 deletions.
44 changes: 32 additions & 12 deletions Examples.sln
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,35 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29411.138
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.WebServer", "azure-cs-webserver\Azure.WebServer.csproj", "{0BE49450-B90C-4CC5-BEA5-4D5A74C7C7DE}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.WebServer", "classic-azure-cs-webserver\Azure.WebServer.csproj", "{0BE49450-B90C-4CC5-BEA5-4D5A74C7C7DE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.AppService", "azure-cs-appservice\Azure.AppService.csproj", "{80AAC51F-54AE-4344-99D0-E2F2B6A959E8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.CosmosAppComponent", "azure-cs-cosmosapp-component\Azure.CosmosAppComponent.csproj", "{FA754E4A-319E-4E9A-A3CC-2E35C94115A7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.CosmosAppComponent", "classic-azure-cs-cosmosapp-component\Azure.CosmosAppComponent.csproj", "{FA754E4A-319E-4E9A-A3CC-2E35C94115A7}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Azure.AppService", "azure-fs-appservice\Azure.AppService.fsproj", "{F420C993-DAE7-49DD-8D4D-C908C6842636}"
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Azure.AppService", "classic-azure-fs-appservice\Azure.AppService.fsproj", "{F420C993-DAE7-49DD-8D4D-C908C6842636}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.Aks", "azure-cs-aks\Azure.Aks.csproj", "{87A11F4D-063D-4374-9D22-156F04C767BE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.KeyVault", "azure-cs-msi-keyvault-rbac\Azure.KeyVault.csproj", "{79319396-C17A-4DBB-92B2-7291D39E0B70}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.KeyVault", "classic-azure-cs-msi-keyvault-rbac\Azure.KeyVault.csproj", "{79319396-C17A-4DBB-92B2-7291D39E0B70}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.Functions", "azure-cs-functions-consumption\Azure.Functions.csproj", "{8C01B8EF-B770-4817-98F2-F7FC6F2B2A74}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.Functions", "azure-cs-functions\Azure.Functions.csproj", "{8C01B8EF-B770-4817-98F2-F7FC6F2B2A74}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aws.WebServer", "aws-cs-webserver\Aws.WebServer.csproj", "{C0F20B39-07D0-4118-A48F-6D3911673424}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gcp.Functions", "gcp-cs-functions\Gcp.Functions.csproj", "{EAA745CE-CB4E-4F33-B373-051DE1C154B3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.BotService", "azure-cs-botservice\Azure.BotService.csproj", "{BF0F5532-EDDE-4AD4-8FA2-2D11CDED65D3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.BotService", "classic-azure-cs-botservice\Azure.BotService.csproj", "{BF0F5532-EDDE-4AD4-8FA2-2D11CDED65D3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Digitalocean.LoadbalancedDroplets", "digitalocean-cs-loadbalanced-droplets\Digitalocean.LoadbalancedDroplets.csproj", "{C21DF417-3E59-45D0-911F-772E3793E0A2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Digitalocean.K8s", "digitalocean-cs-k8s\Digitalocean.K8s.csproj", "{CA1DB6A6-4B5D-41D7-AED6-43C096F5C7F4}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Azure.Aci", "azure-fs-aci\Azure.Aci.fsproj", "{9F646ECF-9CD3-4686-8C4C-FE6AAAD29FEC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Aks.PrivateContainerRegistry", "azure-cs-aks-private-container-registry\Azure.Aks.PrivateContainerRegistry.csproj", "{23099098-BEE1-4199-B1AB-8864DE7276DA}"
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Azure.Aci", "classic-azure-fs-aci\Azure.Aci.fsproj", "{9F646ECF-9CD3-4686-8C4C-FE6AAAD29FEC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.StaticWebsite", "azure-cs-static-website\Azure.StaticWebsite.csproj", "{4DEEF787-D589-44C5-AAB1-570D2D920043}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Azure.Aks", "azure-fs-aks\Azure.Aks.fsproj", "{555DED90-15AE-4620-ACEE-B53EC237C62B}"
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Azure.Aks", "classic-azure-fs-aks\Azure.Aks.fsproj", "{555DED90-15AE-4620-ACEE-B53EC237C62B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aws.Fargate", "aws-cs-fargate\Infra\Aws.Fargate.csproj", "{DCE03BA3-B0AA-4897-85D3-4EFEA7D1054C}"
EndProject
Expand All @@ -49,9 +47,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kubernetes.Guestbook.Compon
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "testing-unit-cs\UnitTesting.csproj", "{7A9FC7DC-DC35-4033-B4FF-E9EFB3E6EBB8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Functions.LinuxApp", "azure-cs-functions-linux-app\Azure.Functions.LinuxApp.csproj", "{B3739A06-5343-4990-A48B-E5BEFAC5678A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.CredentialRotation.OneSet", "azure-cs-credential-rotation-one-set\Azure.CredentialRotation.OneSet.csproj", "{34988495-6782-4AE3-9224-DE26A8FA1C61}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Aci", "azure-cs-aci\Azure.Aci.csproj", "{2A1D8162-FEB3-44DA-B8AD-BEA9E8C04B65}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.AppService.Docker", "azure-cs-appservice-docker\Azure.AppService.Docker.csproj", "{ACF69586-B1BF-4659-B084-CF57CDD70A68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Dotnet5", "azure-cs-net5-aks-webapp\Azure.Dotnet5.csproj", "{515727EA-8AE7-40CC-90CC-7FB209CC16B2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.CredentialRotation.OneSet", "azure-nextgen-cs-credential-rotation-one-set\Azure.CredentialRotation.OneSet.csproj", "{34988495-6782-4AE3-9224-DE26A8FA1C61}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Synapse", "azure-cs-synapse\Azure.Synapse.csproj", "{587D3AE3-0DF4-40AC-8452-3ABA8EF1DDCB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -159,6 +163,22 @@ Global
{34988495-6782-4AE3-9224-DE26A8FA1C61}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34988495-6782-4AE3-9224-DE26A8FA1C61}.Release|Any CPU.ActiveCfg = Release|Any CPU
{34988495-6782-4AE3-9224-DE26A8FA1C61}.Release|Any CPU.Build.0 = Release|Any CPU
{2A1D8162-FEB3-44DA-B8AD-BEA9E8C04B65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2A1D8162-FEB3-44DA-B8AD-BEA9E8C04B65}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2A1D8162-FEB3-44DA-B8AD-BEA9E8C04B65}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2A1D8162-FEB3-44DA-B8AD-BEA9E8C04B65}.Release|Any CPU.Build.0 = Release|Any CPU
{ACF69586-B1BF-4659-B084-CF57CDD70A68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ACF69586-B1BF-4659-B084-CF57CDD70A68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ACF69586-B1BF-4659-B084-CF57CDD70A68}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ACF69586-B1BF-4659-B084-CF57CDD70A68}.Release|Any CPU.Build.0 = Release|Any CPU
{515727EA-8AE7-40CC-90CC-7FB209CC16B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{515727EA-8AE7-40CC-90CC-7FB209CC16B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{515727EA-8AE7-40CC-90CC-7FB209CC16B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{515727EA-8AE7-40CC-90CC-7FB209CC16B2}.Release|Any CPU.Build.0 = Release|Any CPU
{587D3AE3-0DF4-40AC-8452-3ABA8EF1DDCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{587D3AE3-0DF4-40AC-8452-3ABA8EF1DDCB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{587D3AE3-0DF4-40AC-8452-3ABA8EF1DDCB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{587D3AE3-0DF4-40AC-8452-3ABA8EF1DDCB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
97 changes: 35 additions & 62 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,19 @@ $ git pull origin master
- [F#](#f)
- [Azure](#azure)
- [TypeScript](#typescript-1)
- [JavaScript](#javascript-1)
- [Python](#python-1)
- [Go](#go-1)
- [C#](#c-1)
- [F#](#f-1)
- [GCP](#gcp)
- [TypeScript](#typescript-2)
- [JavaScript](#javascript-2)
- [JavaScript](#javascript-1)
- [Python](#python-2)
- [Go](#go-2)
- [C#](#c-2)
- [Kubernetes](#kubernetes)
- [TypeScript](#typescript-3)
- [JavaScript](#javascript-3)
- [JavaScript](#javascript-2)
- [Python](#python-3)
- [Go](#go-3)
- [C#](#c-3)
Expand Down Expand Up @@ -154,82 +153,56 @@ Example | Description |

Example | Description |
--------- | --------- |
[AKS - Helm](azure-ts-aks-helm) | Create an Azure Kubernetes Service (AKS) Cluster and deploy a Helm Chart into it.
[AKS - KEDA](azure-ts-aks-keda) | Create an Azure Kubernetes Service (AKS) Cluster and deploy an Azure Function App with Kubernetes-based Event Driven Autoscaling (KEDA) into it.
[AKS - Mean](azure-ts-aks-mean) | Stand up an Azure Kubernetes Service (AKS) Cluster and a MongoDB-flavored instance of CosmosDB.
[AKS - Multicluster](azure-ts-aks-multicluster) | Create multiple Azure Kubernetes Service (AKS) Clusters in different regions and with different node counts.
[API Management](azure-ts-api-management) | Deploy an instance of Azure API Management.
[App Service - DevOps](azure-ts-appservice-devops) | Deploy a Todo App using App Service with SQL Database and integrated with DevOps.
[App Service - Docker](azure-ts-appservice-docker) | Build a web application hosted in App Service from Docker images.
[App Service - Spring Boot](azure-ts-appservice-Springboot) | Deploy a Spring Boot app to an App Service instance using Jenkins.
[App Service](azure-ts-appservice) | Build a web application hosted in App Service and provision Azure SQL Database and Azure Application Insights.
[ARM Template](azure-ts-arm-template) | Deploy an existing Azure Resource Manager (ARM) template.
[CosmosApp Component](azure-ts-cosmosapp-component) | Use a reusable component to create globally-distributed applications with Azure Cosmos DB.
[CosmosDB LogicApp](azure-ts-cosmosdb-logicapp) | Use Azure Resource Manager (ARM) templates to create an API Connection and a Logic App.
[Dynamic Resource](azure-ts-dynamicresource) | Add a custom domain to a CDN endpoint.
[Functions - Raw](azure-ts-functions-raw) | Deploy functions in all supported languages to Azure Functions.
[Functions](azure-ts-functions) | Deploy a typescript function to Azure Functions.
[HDInsight Spark](azure-ts-hdinsight-spark) | Deploy a Spark cluster on Azure HDInsight.
[MSI KeyVault RBAC](azure-ts-msi-keyvault-rbac) | Use a managed identity with Azure App Service to access Azure KeyVault, Azure Storage, and Azure SQL Database without passwords or secrets.
[Azure Container Instance](azure-ts-aci) | Run Azure Container Instances on Linux.
[Azure Kubernetes Service](azure-ts-aks) | Create an Azure Kubernetes Service (AKS) Cluster.
[Azure App Service](azure-ts-appservice) | Build a web application hosted in App Service and provision Azure SQL Database and Azure Application Insights.
[Azure App Service with Docker](azure-ts-appservice-docker) | Build a web application hosted in App Service from Docker images.
[App Service in Virtual Network](azure-ts-webapp-privateendpoint-vnet-injection) | Deploy two App Services - Front web app with VNet injection and Back web app with a Private Endpoint.
[Azure Cosmos DB and LogicApp](azure-ts-cosmosdb-logicapp) | Define Cosmos DB, API connections, and link them to a logic app.
[Azure Functions](azure-ts-functions) | Deploy a Node.js serverless function to Azure Functions.
[Azure Functions - Many](azure-ts-functions-many) | Deploy several kinds of Azure Functions created from raw deployment packages.
[Static Website](azure-ts-static-website) | Configure static website hosting in Azure Storage.
[Stream Analytics](azure-ts-stream-analytics) | Deploy an Azure Stream Analytics job to transform data in an Event Hub.
[URL Shortener](azure-ts-serverless-url-shortener-global) | Create a globally-distributed serverless URL shortener using Azure Functions and Cosmos DB.
[VM Scaleset](azure-ts-vm-scaleset) | Provision a Scale Set of Linux web servers with nginx deployed, auto-scaling based on CPU load, a Load Balancer in front of them, and a public IP address.
[Web Server Component](azure-ts-webserver-component) | Provision a configurable number of Linux web servers in an Azure Virtual Machine using a reusable component.
[Azure Synapse](azure-ts-synapse) | Starting point for enterprise analytics solutions based on Azure Synapse.
[Web Server](azure-ts-webserver) | Provision a Linux web server in an Azure Virtual Machine.

### JavaScript

Example | Description |
--------- | --------- |
[Web Server](azure-js-webserver) | Build the Pulumi web server sample in Azure.

### Python

Example | Description |
--------- | --------- |
[AKS - Multicluster](azure-py-aks-multicluster) | Create multiple AKS clusters in different regions and with different node counts.
[AKS](azure-py-aks) | Deploy an AKS cluster, virtual network and Azure Container Registry and grant AKS permissions to access and manage those.
[App Service - Docker](azure-py-appservice-docker) | Build a web application hosted in App Service from Docker images.
[App Service](azure-py-appservice) | Build a web application hosted in App Service and provision Azure SQL Database and Azure Application Insights.
[ARM Template](azure-py-arm-template) | Deploy an existing Azure Resource Manager (ARM) template.
[Functions - Raw](azure-py-functions-raw) | Deploy a function to Azure Functions created from raw deployment packages in C#.
[HDInsight Spark](azure-py-hdinsight-spark) | Deploy a Spark cluster on Azure HDInsight.
[MSI Key Vault RBAC](azure-msi-keyvault-rbac) | Use a managed identity with Azure App Service to access Azure KeyVault, Azure Storage, and Azure SQL Database without passwords or secrets.
[Virtual Data Center](azure-py-virtual-data-center) | Deploy peered hub-and-spoke networks in paired regions complete with gateways, firewalls and custom routing to redirect traffic through the firewalls.
[VM Scale Set](azure-vm-scaleset) | Provision a Scale Set of Linux web servers with nginx deployed, auto-scaling based on CPU load, a Load Balancer in front of them, and a public IP address.
[Web Server Component](azure-py-webserver-component) | Deploy a Virtual Machine and start an HTTP server on it using a reusable component.
[Web Server](azure-py-webserver) | Deploy a Virtual Machine and start an HTTP server on it.
[Azure Container Instance](azure-py-aci) | Run Azure Container Instances on Linux.
[Azure Kubernetes Service](azure-py-aks) | Create an Azure Kubernetes Service (AKS) Cluster.
[Azure App Service](azure-py-appservice) | Build a web application hosted in App Service and provision Azure SQL Database and Azure Application Insights.
[Azure App Service with Docker](azure-py-appservice-docker) | Build a web application hosted in App Service from Docker images.
[Azure Cosmos DB and LogicApp](azure-py-cosmosdb-logicapp) | Define Cosmos DB, API connections, and link them to a logic app.
[Minecraft Server](azure-py-minecraft-server) | Deploy an Azure Virtual Machine and provision a Minecraft server.
[Static Website](azure-py-static-website) | Configure static website hosting in Azure Storage.
[Azure Synapse](azure-py-synapse) | Starting point for enterprise analytics solutions based on Azure Synapse.
[Virtual Data Center](azure-py-virtual-data-center) | Deploy Azure Virtual Data Center (VDC) hub-and-spoke network stacks in Azure, complete with ExpressRoute and VPN Gateways, Azure Firewall guarding a DMZ, and Azure Bastion.
[Web Server](azure-py-webserver) | Provision a Linux web server in an Azure Virtual Machine.

### Go

Example | Description |
--------- | --------- |
[App Service](azure-go-appservice) | Build a web application hosted in Azure App Service.
[AKS - Multicluster](azure-go-aks-multicluster) | Create multiple Azure Kubernetes Service (AKS) Clusters in different regions and with different node counts.
[Web Server Component](azure-go-webserver-component) | Provision a configurable number of Linux web servers in an Azure Virtual Machine using a reusable component.
[Azure Container Instance](azure-go-aci) | Run Azure Container Instances on Linux.
[Azure Kubernetes Service](azure-go-aks) | Create an Azure Kubernetes Service (AKS) Cluster.
[Azure App Service with Docker](azure-go-appservice-docker) | Build a web application hosted in App Service from Docker images.
[Static Website](azure-go-static-website) | Configure static website hosting in Azure Storage.

### C#

Example | Description |
--------- | --------- |
[AKS](azure-cs-aks) | Stand up an Azure Kubernetes Service (AKS) cluster.
[AKS and Private Container Registry](azure-cs-aks-private-container-registry) | Stand up an Azure Kubernetes Service (AKS) cluster, a private Azure Container Registry, and deploys an image to the cluster.
[App Service](azure-cs-appservice) | Build a web application hosted in App Service and provision Azure SQL Database and Azure Application Insights.
[Bot Service](azure-cs-botservice) | Build an Azure Bot Service hosted in Azure App Service.
[Cosmos App Component](azure-cs-cosmosapp-component) | Use a reusable component to create globally-distributed applications with Azure Cosmos DB.
[Functions - .NET on Consumption](azure-cs-functions-consumption) | Deploy a .NET Azure Function running on a Windows Consumption Plan.
[Functions - Python on Linux App Service](azure-cs-functions-linux-app) | Deploy a Python Azure Function running on a Linux App Service Premium Plan.
[MSI Key Vault RBAC](azure-cs-msi-keyvault-rbac) | Use a managed identity with Azure App Service to access Azure KeyVault, Azure Storage, and Azure SQL Database without passwords or secrets.
[Static Website](azure-cs-static-website) | Deploy a Static Website to Azure Storage.
[Web Server](azure-cs-webserver) | Deploy a Virtual Machine and start an HTTP server on it.

### F#

Example | Description |
--------- | --------- |
[AKS](azure-fs-aks) | Stand up an Azure Kubernetes Service (AKS) cluster.
[App Service](azure-fs-appservice) | Build a web application hosted in App Service and provision Azure SQL Database and Azure Application Insights.
Cluster.
[Azure Container Instance](azure-cs-aci) | Run Azure Container Instances on Linux.
[Azure Kubernetes Service](azure-cs-aks) | Create an Azure Kubernetes Service (AKS) Cluster.
[AKS web app with .NET 5](azure-cs-net5-aks-webapp) | Create an Azure Kubernetes Service (AKS) cluster and deploy a web app to it using .NET 5 and C# 9.
[Azure App Service](azure-cs-appservice) | Build a web application hosted in App Service and provision Azure SQL Database and Azure Application Insights.
[Azure App Service with Docker](azure-cs-appservice-docker) | Build a web application hosted in App Service from Docker images.
[Azure Cosmos DB and LogicApp](azure-cs-cosmosdb-logicapp) | Define Cosmos DB, API connections, and link them to a logic app.
[Azure Functions](azure-cs-functions) | Deploy a Node.js serverless function to Azure Functions.
[Static Website](azure-cs-static-website) | Configure static website hosting in Azure Storage.
[Azure Synapse](azure-cs-synapse) | Starting point for enterprise analytics solutions based on Azure Synapse.

## GCP

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

<ItemGroup>
<PackageReference Include="Pulumi" Version="2.*" />
<PackageReference Include="Pulumi.AzureNextGen" Version="0.*" />
<PackageReference Include="Pulumi.AzureNative" Version="0.*" />
</ItemGroup>

</Project>
Loading

0 comments on commit 2e9e18b

Please sign in to comment.