master fd5c2bc771ec cached
243 files
1.3 MB
344.1k tokens
684 symbols
1 requests
Download .txt
Showing preview only (1,401K chars total). Download the full file or copy to clipboard to get everything.
Repository: AreYouFreeBusy/AlexaSkillsKit.NET
Branch: master
Commit: fd5c2bc771ec
Files: 243
Total size: 1.3 MB

Directory structure:
gitextract_syntntwh/

├── .gitignore
├── .nuget/
│   ├── AlexaSkillsKit.Lib.nuspec
│   ├── NuGet.Config
│   └── pack.cmd
├── AlexaSkillsKit.Lib/
│   ├── AlexaSkillsKit.Lib.csproj
│   ├── AsyncHelpers.cs
│   ├── Authentication/
│   │   ├── SpeechletRequestSignatureVerifier.cs
│   │   ├── SpeechletRequestTimestampVerifier.cs
│   │   └── SpeechletRequestValidationResult.cs
│   ├── Helpers/
│   │   └── DateTimeHelpers.cs
│   ├── Interfaces/
│   │   ├── AudioPlayer/
│   │   │   ├── AudioItem.cs
│   │   │   ├── AudioItemStream.cs
│   │   │   ├── AudioPlayerInterface.cs
│   │   │   ├── AudioPlayerPlaybackFailedRequest.cs
│   │   │   ├── AudioPlayerRequest.cs
│   │   │   ├── AudioPlayerResponse.cs
│   │   │   ├── AudioPlayerState.cs
│   │   │   ├── Directives/
│   │   │   │   ├── AudioPlayerClearQueueDirective.cs
│   │   │   │   ├── AudioPlayerDirective.cs
│   │   │   │   ├── AudioPlayerPlayDirective.cs
│   │   │   │   └── AudioPlayerStopDirective.cs
│   │   │   ├── IAudioPlayerSpeechlet.cs
│   │   │   ├── IAudioPlayerSpeechletAsync.cs
│   │   │   └── PlaybackControllerRequest.cs
│   │   ├── Dialog/
│   │   │   └── Directives/
│   │   │       ├── DialogConfirmIntentDirective.cs
│   │   │       ├── DialogConfirmSlotDirective.cs
│   │   │       ├── DialogDelegateDirective.cs
│   │   │       ├── DialogDirective.cs
│   │   │       └── DialogElicitSlotDirective.cs
│   │   ├── Display/
│   │   │   ├── Directives/
│   │   │   │   ├── DisplayRenderTemplateDirective.cs
│   │   │   │   └── HintDirective.cs
│   │   │   ├── DisplayImage.cs
│   │   │   ├── DisplayImageSource.cs
│   │   │   ├── DisplayInterface.cs
│   │   │   ├── DisplayRequest.cs
│   │   │   ├── DisplayTemplate.cs
│   │   │   ├── IDisplaySpeechlet.cs
│   │   │   ├── IDisplaySpeechletAsync.cs
│   │   │   ├── ListItem.cs
│   │   │   ├── TextContent.cs
│   │   │   └── TextField.cs
│   │   └── VideoApp/
│   │       ├── Directives/
│   │       │   └── VideoAppLaunchDirective.cs
│   │       ├── VideoItem.cs
│   │       └── VideoItemMetadata.cs
│   ├── Json/
│   │   ├── CamelCasePropertyNamesExceptDictionaryKeysContractResolver.cs
│   │   ├── Deserializer.cs
│   │   ├── SpeechletRequestEnvelope.cs
│   │   ├── SpeechletRequestParser.cs
│   │   ├── SpeechletRequestParserExtensions.cs
│   │   └── SpeechletResponseEnvelope.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Sdk.cs
│   ├── Slu/
│   │   ├── ConfirmationStatusEnum.cs
│   │   ├── Intent.cs
│   │   ├── Resolutions.cs
│   │   ├── ResolutionsPerAuthority.cs
│   │   ├── ResolutionsPerAuthorityStatus.cs
│   │   ├── ResolutionsPerAuthorityValue.cs
│   │   ├── ResolutionsPerAuthorityValueValue.cs
│   │   └── Slot.cs
│   ├── Speechlet/
│   │   ├── Application.cs
│   │   ├── Cause.cs
│   │   ├── Context.cs
│   │   ├── Device.cs
│   │   ├── Directive.cs
│   │   ├── Error.cs
│   │   ├── ExtendedSpeechletRequest.cs
│   │   ├── ISpeechlet.cs
│   │   ├── ISpeechletAsync.cs
│   │   ├── ISpeechletBase.cs
│   │   ├── ISpeechletInterface.cs
│   │   ├── ISpeechletInterfaceState.cs
│   │   ├── ISpeechletResponse.cs
│   │   ├── ISpeechletWithContext.cs
│   │   ├── ISpeechletWithContextAsync.cs
│   │   ├── IntentRequest.cs
│   │   ├── LaunchRequest.cs
│   │   ├── Person.cs
│   │   ├── PlaybackState.cs
│   │   ├── Session.cs
│   │   ├── SessionEndedRequest.cs
│   │   ├── SessionStartedRequest.cs
│   │   ├── Speechlet.cs
│   │   ├── SpeechletAsync.cs
│   │   ├── SpeechletBase.cs
│   │   ├── SpeechletException.cs
│   │   ├── SpeechletRequest.cs
│   │   ├── SpeechletResponse.cs
│   │   ├── SpeechletService.cs
│   │   ├── SpeechletValidationException.cs
│   │   ├── SupportedInterfaces.cs
│   │   ├── SystemExceptionEncounteredRequest.cs
│   │   ├── SystemRequest.cs
│   │   ├── SystemState.cs
│   │   └── User.cs
│   ├── UI/
│   │   ├── AskForPermissionsConsentCard.cs
│   │   ├── Card.cs
│   │   ├── Image.cs
│   │   ├── LinkAccountCard.cs
│   │   ├── OutputSpeech.cs
│   │   ├── PlainTextOutputSpeech.cs
│   │   ├── Reprompt.cs
│   │   ├── SimpleCard.cs
│   │   ├── SsmlOutputSpeech.cs
│   │   └── StandardCard.cs
│   ├── app.config
│   └── packages.config
├── AlexaSkillsKit.Sample/
│   ├── AlexaSkillsKit.Sample.csproj
│   ├── App_Start/
│   │   ├── BundleConfig.cs
│   │   ├── FilterConfig.cs
│   │   ├── IdentityConfig.cs
│   │   ├── RouteConfig.cs
│   │   ├── Startup.Auth.cs
│   │   └── WebApiConfig.cs
│   ├── Areas/
│   │   └── HelpPage/
│   │       ├── ApiDescriptionExtensions.cs
│   │       ├── App_Start/
│   │       │   └── HelpPageConfig.cs
│   │       ├── Controllers/
│   │       │   └── HelpController.cs
│   │       ├── HelpPage.css
│   │       ├── HelpPageAreaRegistration.cs
│   │       ├── HelpPageConfigurationExtensions.cs
│   │       ├── ModelDescriptions/
│   │       │   ├── CollectionModelDescription.cs
│   │       │   ├── ComplexTypeModelDescription.cs
│   │       │   ├── DictionaryModelDescription.cs
│   │       │   ├── EnumTypeModelDescription.cs
│   │       │   ├── EnumValueDescription.cs
│   │       │   ├── IModelDocumentationProvider.cs
│   │       │   ├── KeyValuePairModelDescription.cs
│   │       │   ├── ModelDescription.cs
│   │       │   ├── ModelDescriptionGenerator.cs
│   │       │   ├── ModelNameAttribute.cs
│   │       │   ├── ModelNameHelper.cs
│   │       │   ├── ParameterAnnotation.cs
│   │       │   ├── ParameterDescription.cs
│   │       │   └── SimpleTypeModelDescription.cs
│   │       ├── Models/
│   │       │   └── HelpPageApiModel.cs
│   │       ├── SampleGeneration/
│   │       │   ├── HelpPageSampleGenerator.cs
│   │       │   ├── HelpPageSampleKey.cs
│   │       │   ├── ImageSample.cs
│   │       │   ├── InvalidSample.cs
│   │       │   ├── ObjectGenerator.cs
│   │       │   ├── SampleDirection.cs
│   │       │   └── TextSample.cs
│   │       ├── Views/
│   │       │   ├── Help/
│   │       │   │   ├── Api.cshtml
│   │       │   │   ├── DisplayTemplates/
│   │       │   │   │   ├── ApiGroup.cshtml
│   │       │   │   │   ├── CollectionModelDescription.cshtml
│   │       │   │   │   ├── ComplexTypeModelDescription.cshtml
│   │       │   │   │   ├── DictionaryModelDescription.cshtml
│   │       │   │   │   ├── EnumTypeModelDescription.cshtml
│   │       │   │   │   ├── HelpPageApiModel.cshtml
│   │       │   │   │   ├── ImageSample.cshtml
│   │       │   │   │   ├── InvalidSample.cshtml
│   │       │   │   │   ├── KeyValuePairModelDescription.cshtml
│   │       │   │   │   ├── ModelDescriptionLink.cshtml
│   │       │   │   │   ├── Parameters.cshtml
│   │       │   │   │   ├── Samples.cshtml
│   │       │   │   │   ├── SimpleTypeModelDescription.cshtml
│   │       │   │   │   └── TextSample.cshtml
│   │       │   │   ├── Index.cshtml
│   │       │   │   └── ResourceModel.cshtml
│   │       │   ├── Shared/
│   │       │   │   └── _Layout.cshtml
│   │       │   ├── Web.config
│   │       │   └── _ViewStart.cshtml
│   │       └── XmlDocumentationProvider.cs
│   ├── Content/
│   │   ├── Site.css
│   │   └── bootstrap.css
│   ├── Controllers/
│   │   ├── AccountController.cs
│   │   ├── HomeController.cs
│   │   └── ValuesController.cs
│   ├── Global.asax
│   ├── Global.asax.cs
│   ├── Models/
│   │   ├── AccountBindingModels.cs
│   │   ├── AccountViewModels.cs
│   │   └── IdentityModels.cs
│   ├── NLog.config
│   ├── NLog.xsd
│   ├── Project_Readme.html
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Providers/
│   │   └── ApplicationOAuthProvider.cs
│   ├── Results/
│   │   └── ChallengeResult.cs
│   ├── Scripts/
│   │   ├── _references.js
│   │   ├── bootstrap.js
│   │   ├── jquery-1.10.2.intellisense.js
│   │   ├── jquery-1.10.2.js
│   │   ├── jquery.validate-vsdoc.js
│   │   ├── jquery.validate.js
│   │   ├── jquery.validate.unobtrusive.js
│   │   ├── modernizr-2.6.2.js
│   │   └── respond.js
│   ├── Speechlet/
│   │   ├── AlexaController.cs
│   │   ├── SampleSessionIntentSchema.json
│   │   ├── SampleSessionSpeechlet.cs
│   │   └── SampleSessionUtterances.txt
│   ├── Startup.cs
│   ├── Views/
│   │   ├── Home/
│   │   │   └── Index.cshtml
│   │   ├── Shared/
│   │   │   ├── Error.cshtml
│   │   │   └── _Layout.cshtml
│   │   ├── Web.config
│   │   └── _ViewStart.cshtml
│   ├── Web.Debug.config
│   ├── Web.Release.config
│   ├── Web.config
│   └── packages.config
├── AlexaSkillsKit.Sample.Dialog.AzureFunc/
│   ├── .gitignore
│   ├── AlexaHttpTrigger.cs
│   ├── AlexaSkillsKit.Sample.Dialog.AzureFunc.csproj
│   ├── Handlers/
│   │   ├── DefaultHandler.cs
│   │   ├── IIntentHandler.cs
│   │   ├── IntentHandler.cs
│   │   ├── SampleIntent1Handler.cs
│   │   ├── SampleIntent2Handler.cs
│   │   └── SampleIntent3Handler.cs
│   ├── Helpers/
│   │   ├── Builder/
│   │   │   ├── ISpeechletResponseBuilder.cs
│   │   │   ├── SpeechletResponseBuilder.cs
│   │   │   ├── SpeechletResponseBuilderCardExtentions.cs
│   │   │   └── SpeechletResponseBuilderDialogExtentions.cs
│   │   ├── DialogHelper.cs
│   │   ├── IntentNames.cs
│   │   └── SlotNames.cs
│   ├── Properties/
│   │   └── launchSettings.json
│   ├── SampleSkill.cs
│   ├── SampleSkillFactory.cs
│   └── host.json
├── AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/
│   ├── AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests.csproj
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── SampleIntent1HandlerTests.cs
│   ├── SampleIntent2HandlerTests.cs
│   ├── SampleIntent3HandlerTests.cs
│   ├── TestsBase.cs
│   ├── app.config
│   └── packages.config
├── AlexaSkillsKit.Sample.Dialog.AzureFunc.sln
├── AlexaSkillsKit.Tests/
│   ├── AlexaSkillsKit.Tests.csproj
│   ├── Authentication/
│   │   └── SignatureVerifierTests.cs
│   ├── Helpers/
│   │   └── DateTimeHelpersTests.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── TestData/
│   │   ├── RequestWithInvalidTimestamp.json
│   │   ├── RequestWithIso8601Timestamp.json
│   │   └── RequestWithUnixTimeTimestamp.json
│   ├── app.config
│   └── packages.config
├── AlexaSkillsKit.sln
├── LICENSE
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/

# Visual Studo 2015 cache/options directory
.vs/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding addin-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings 
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# NuGet Packages
*.nupkg
.nuget/nuget.exe
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config

# Windows Azure Build Output
csx/
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
*.[Cc]ache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt


================================================
FILE: .nuget/AlexaSkillsKit.Lib.nuspec
================================================
<?xml version="1.0"?>
<package>
  <metadata>
    <id>AlexaSkillsKit.NET</id>
    <version>1.6.0</version>
    <title>AlexaSkillsKit.NET</title>
    <authors>Stefan Negritoiu (FreeBusy) and contributors</authors>
    <owners>Stefan Negritoiu (FreeBusy)</owners>
    <projectUrl>https://github.com/AreYouFreeBusy/AlexaSkillsKit.NET</projectUrl>
    <licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
    <iconUrl>https://developer.amazon.com/public/binaries/content/gallery/developerportalpublic/solutions/alexa/dp_image_kit_02.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>
.NET library that simplifies Alexa skills development; same object model as Amazon's AlexaSkillsKit for Java
    </description>
    <releaseNotes>
1.4.0: Ability to override request validation policy and support for SSML output speech type
1.5.0: Fully implement certificate verification requirement and support for Standard cards
1.6.0: Implement support for Context object (Device Location, Audio Player, etc.), PlaybackController, Display, Dialog directives, and VideoApp. See project README for new interfaces.
    </releaseNotes>
    <copyright>Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors</copyright>
    <tags>amazon echo alexa speechlet</tags>
    <dependencies>
      <dependency id="Microsoft.AspNet.WebApi.Client" version="5.2.3" />
      <dependency id="Newtonsoft.Json" version="7.0.1" />
      <dependency id="BouncyCastle" version="1.8.1" />
    </dependencies>
  </metadata>
  <files>
    <file src="..\AlexaSkillsKit.Lib\bin\Release\AlexaSkillsKit.dll" target="lib\net45" /> 
  </files> 
</package>

================================================
FILE: .nuget/NuGet.Config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

================================================
FILE: .nuget/pack.cmd
================================================
msbuild /property:Configuration=Release ..\AlexaSkillsKit.Lib\AlexaSkillsKit.Lib.csproj
nuget pack AlexaSkillsKit.Lib.nuspec

================================================
FILE: AlexaSkillsKit.Lib/AlexaSkillsKit.Lib.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{0EC882A8-AACA-4BD5-B449-72F20FDB8586}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>AlexaSkillsKit</RootNamespace>
    <AssemblyName>AlexaSkillsKit</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
    <RestorePackages>true</RestorePackages>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="BouncyCastle.Crypto, Version=1.8.1.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
      <HintPath>..\packages\BouncyCastle.1.8.1\lib\BouncyCastle.Crypto.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Net" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Net.Http.Formatting">
      <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Runtime.Caching" />
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="AsyncHelpers.cs" />
    <Compile Include="Authentication\SpeechletRequestValidationResult.cs" />
    <Compile Include="Authentication\SpeechletRequestSignatureVerifier.cs" />
    <Compile Include="Authentication\SpeechletRequestTimestampVerifier.cs" />
    <Compile Include="Interfaces\AudioPlayer\Directives\AudioPlayerPlayDirective.cs" />
    <Compile Include="Interfaces\AudioPlayer\Directives\AudioPlayerClearQueueDirective.cs" />
    <Compile Include="Interfaces\AudioPlayer\Directives\AudioPlayerStopDirective.cs" />
    <Compile Include="Interfaces\AudioPlayer\AudioItem.cs" />
    <Compile Include="Interfaces\AudioPlayer\AudioItemStream.cs" />
    <Compile Include="Interfaces\AudioPlayer\AudioPlayerInterface.cs" />
    <Compile Include="Interfaces\AudioPlayer\AudioPlayerState.cs" />
    <Compile Include="Interfaces\AudioPlayer\IAudioPlayerSpeechlet.cs" />
    <Compile Include="Interfaces\AudioPlayer\IAudioPlayerSpeechletAsync.cs" />
    <Compile Include="Interfaces\Display\Directives\HintDirective.cs" />
    <Compile Include="Interfaces\Display\Directives\DisplayRenderTemplateDirective.cs" />
    <Compile Include="Interfaces\Display\DisplayInterface.cs" />
    <Compile Include="Interfaces\Display\DisplayImage.cs" />
    <Compile Include="Interfaces\Display\DisplayImageSource.cs" />
    <Compile Include="Interfaces\Display\DisplayTemplate.cs" />
    <Compile Include="Interfaces\Display\IDisplaySpeechlet.cs" />
    <Compile Include="Interfaces\Display\IDisplaySpeechletAsync.cs" />
    <Compile Include="Interfaces\Display\ListItem.cs" />
    <Compile Include="Interfaces\Display\TextField.cs" />
    <Compile Include="Interfaces\Display\TextContent.cs" />
    <Compile Include="Interfaces\Dialog\Directives\DialogConfirmIntentDirective.cs" />
    <Compile Include="Interfaces\Dialog\Directives\DialogDelegateDirective.cs" />
    <Compile Include="Interfaces\Dialog\Directives\DialogDirective.cs" />
    <Compile Include="Interfaces\Dialog\Directives\DialogConfirmSlotDirective.cs" />
    <Compile Include="Interfaces\Dialog\Directives\DialogElicitSlotDirective.cs" />
    <Compile Include="Interfaces\VideoApp\Directives\VideoAppLaunchDirective.cs" />
    <Compile Include="Interfaces\VideoApp\VideoItem.cs" />
    <Compile Include="Interfaces\VideoApp\VideoItemMetadata.cs" />
    <Compile Include="Helpers\DateTimeHelpers.cs" />
    <Compile Include="Json\CamelCasePropertyNamesExceptDictionaryKeysContractResolver.cs" />
    <Compile Include="Json\Deserializer.cs" />
    <Compile Include="Json\SpeechletRequestEnvelope.cs" />
    <Compile Include="Json\SpeechletRequestParserExtensions.cs" />
    <Compile Include="Json\SpeechletRequestParser.cs" />
    <Compile Include="Json\SpeechletResponseEnvelope.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Sdk.cs" />
    <Compile Include="Slu\ConfirmationStatusEnum.cs" />
    <Compile Include="Slu\Intent.cs" />
    <Compile Include="Slu\Resolutions.cs" />
    <Compile Include="Slu\ResolutionsPerAuthority.cs" />
    <Compile Include="Slu\ResolutionsPerAuthorityStatus.cs" />
    <Compile Include="Slu\ResolutionsPerAuthorityValue.cs" />
    <Compile Include="Slu\ResolutionsPerAuthorityValueValue.cs" />
    <Compile Include="Slu\Slot.cs" />
    <Compile Include="Speechlet\Application.cs" />
    <Compile Include="Interfaces\AudioPlayer\Directives\AudioPlayerDirective.cs" />
    <Compile Include="Interfaces\AudioPlayer\AudioPlayerPlaybackFailedRequest.cs" />
    <Compile Include="Interfaces\AudioPlayer\AudioPlayerRequest.cs" />
    <Compile Include="Interfaces\AudioPlayer\AudioPlayerResponse.cs" />
    <Compile Include="Speechlet\Cause.cs" />
    <Compile Include="Speechlet\Context.cs" />
    <Compile Include="Speechlet\Device.cs" />
    <Compile Include="Speechlet\Directive.cs" />
    <Compile Include="Interfaces\Display\DisplayRequest.cs" />
    <Compile Include="Speechlet\Error.cs" />
    <Compile Include="Speechlet\ExtendedSpeechletRequest.cs" />
    <Compile Include="Speechlet\IntentRequest.cs" />
    <Compile Include="Speechlet\ISpeechletWithContext.cs" />
    <Compile Include="Speechlet\ISpeechlet.cs" />
    <Compile Include="Speechlet\ISpeechletWithContextAsync.cs" />
    <Compile Include="Speechlet\ISpeechletAsync.cs" />
    <Compile Include="Speechlet\ISpeechletBase.cs" />
    <Compile Include="Speechlet\ISpeechletInterface.cs" />
    <Compile Include="Speechlet\ISpeechletInterfaceState.cs" />
    <Compile Include="Speechlet\ISpeechletResponse.cs" />
    <Compile Include="Speechlet\LaunchRequest.cs" />
    <Compile Include="Interfaces\AudioPlayer\PlaybackControllerRequest.cs" />
    <Compile Include="Speechlet\PlaybackState.cs" />
    <Compile Include="Speechlet\Session.cs" />
    <Compile Include="Speechlet\SessionEndedRequest.cs" />
    <Compile Include="Speechlet\SessionStartedRequest.cs" />
    <Compile Include="Speechlet\Speechlet.cs" />
    <Compile Include="Speechlet\SpeechletAsync.cs" />
    <Compile Include="Speechlet\SpeechletBase.cs" />
    <Compile Include="Speechlet\SpeechletException.cs" />
    <Compile Include="Speechlet\SpeechletRequest.cs" />
    <Compile Include="Speechlet\SpeechletService.cs" />
    <Compile Include="Speechlet\SpeechletValidationException.cs" />
    <Compile Include="Speechlet\SpeechletResponse.cs" />
    <Compile Include="Speechlet\SupportedInterfaces.cs" />
    <Compile Include="Speechlet\SystemRequest.cs" />
    <Compile Include="Speechlet\SystemExceptionEncounteredRequest.cs" />
    <Compile Include="Speechlet\SystemState.cs" />
    <Compile Include="Speechlet\User.cs" />
    <Compile Include="UI\Image.cs" />
    <Compile Include="UI\AskForPermissionsConsentCard.cs" />
    <Compile Include="UI\StandardCard.cs" />
    <Compile Include="UI\SsmlOutputSpeech.cs" />
    <Compile Include="UI\Reprompt.cs" />
    <Compile Include="UI\Card.cs" />
    <Compile Include="UI\OutputSpeech.cs" />
    <Compile Include="UI\PlainTextOutputSpeech.cs" />
    <Compile Include="UI\LinkAccountCard.cs" />
    <Compile Include="UI\SimpleCard.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="app.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

================================================
FILE: AlexaSkillsKit.Lib/AsyncHelpers.cs
================================================
// As discussed at http://stackoverflow.com/a/5097066

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace AlexaSkillsKit
{
    public static class AsyncHelpers
    {
        /// <summary>
        /// Execute's an async Task<T> method which has a void return value synchronously
        /// </summary>
        /// <param name="task">Task<T> method to execute</param>
        public static void RunSync(Func<Task> task) {
            var oldContext = SynchronizationContext.Current;
            var synch = new ExclusiveSynchronizationContext();
            SynchronizationContext.SetSynchronizationContext(synch);
            synch.Post(async _ => {
                try {
                    await task();
                }
                catch (Exception e) {
                    synch.InnerException = e;
                    throw;
                }
                finally {
                    synch.EndMessageLoop();
                }
            }, null);
            synch.BeginMessageLoop();

            SynchronizationContext.SetSynchronizationContext(oldContext);
        }

        /// <summary>
        /// Execute's an async Task<T> method which has a T return type synchronously
        /// </summary>
        /// <typeparam name="T">Return Type</typeparam>
        /// <param name="task">Task<T> method to execute</param>
        /// <returns></returns>
        public static T RunSync<T>(Func<Task<T>> task) {
            var oldContext = SynchronizationContext.Current;
            var synch = new ExclusiveSynchronizationContext();
            SynchronizationContext.SetSynchronizationContext(synch);
            T ret = default(T);
            synch.Post(async _ => {
                try {
                    ret = await task();
                }
                catch (Exception e) {
                    synch.InnerException = e;
                    throw;
                }
                finally {
                    synch.EndMessageLoop();
                }
            }, null);
            synch.BeginMessageLoop();
            SynchronizationContext.SetSynchronizationContext(oldContext);
            return ret;
        }

        private class ExclusiveSynchronizationContext : SynchronizationContext
        {
            private bool done;
            public Exception InnerException { get; set; }
            readonly AutoResetEvent workItemsWaiting = new AutoResetEvent(false);
            readonly Queue<Tuple<SendOrPostCallback, object>> items =
                new Queue<Tuple<SendOrPostCallback, object>>();

            public override void Send(SendOrPostCallback d, object state) {
                throw new NotSupportedException("We cannot send to our same thread");
            }

            public override void Post(SendOrPostCallback d, object state) {
                lock (items) {
                    items.Enqueue(Tuple.Create(d, state));
                }
                workItemsWaiting.Set();
            }

            public void EndMessageLoop() {
                Post(_ => done = true, null);
            }

            public void BeginMessageLoop() {
                while (!done) {
                    Tuple<SendOrPostCallback, object> task = null;
                    lock (items) {
                        if (items.Count > 0) {
                            task = items.Dequeue();
                        }
                    }
                    if (task != null) {
                        task.Item1(task.Item2);
                        if (InnerException != null) // the method threw an exeption
                    {
                            throw new AggregateException("AsyncHelpers.Run method threw an exception.", InnerException);
                        }
                    }
                    else {
                        workItemsWaiting.WaitOne();
                    }
                }
            }

            public override SynchronizationContext CreateCopy() {
                return this;
            }
        }
    }
}


================================================
FILE: AlexaSkillsKit.Lib/Authentication/SpeechletRequestSignatureVerifier.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Runtime.Caching;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.Security.Certificates;

namespace AlexaSkillsKit.Authentication
{
    public class SpeechletRequestSignatureVerifier
    {
        private static Func<string, string> _getCertCacheKey = (string url) => string.Format("{0}_{1}", Sdk.SIGNATURE_CERT_URL_REQUEST_HEADER, url);

        private static CacheItemPolicy _policy = new CacheItemPolicy {
            Priority = CacheItemPriority.Default,
            AbsoluteExpiration = DateTimeOffset.UtcNow.AddHours(24)
        };


        /// <summary>
        /// Verifying the Signature Certificate URL per requirements documented at
        /// https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/developing-an-alexa-skill-as-a-web-service
        /// </summary>
        public static bool VerifyCertificateUrl(string certChainUrl) {
            if (String.IsNullOrEmpty(certChainUrl)) {
                return false;
            }

            Uri certChainUri;
            if (!Uri.TryCreate(certChainUrl, UriKind.Absolute, out certChainUri)) {
                return false;
            }

            return
                certChainUri.Host.Equals(Sdk.SIGNATURE_CERT_URL_HOST, StringComparison.OrdinalIgnoreCase) &&
                certChainUri.PathAndQuery.StartsWith(Sdk.SIGNATURE_CERT_URL_PATH) &&
                certChainUri.Scheme == Uri.UriSchemeHttps &&
                certChainUri.Port == 443;
        }


        /// <summary>
        /// Verifies request signature and manages the caching of the signature certificate
        /// </summary>
        public static bool VerifyRequestSignature(
            byte[] serializedSpeechletRequest, string expectedSignature, string certChainUrl) {

            string certCacheKey = _getCertCacheKey(certChainUrl);
            X509Certificate cert = MemoryCache.Default.Get(certCacheKey) as X509Certificate;
            if (cert == null ||
                !CheckRequestSignature(serializedSpeechletRequest, expectedSignature, cert)) {

                // download the cert 
                // if we don't have it in cache or
                // if we have it but it's stale because the current request was signed with a newer cert
                // (signaled by signature check fail with cached cert)
                cert = RetrieveAndVerifyCertificate(certChainUrl);
                if (cert == null) return false;

                MemoryCache.Default.Set(certCacheKey, cert, _policy);
            }

            return CheckRequestSignature(serializedSpeechletRequest, expectedSignature, cert);
        }


        /// <summary>
        /// Verifies request signature and manages the caching of the signature certificate
        /// </summary>
        public async static Task<bool> VerifyRequestSignatureAsync(
            byte[] serializedSpeechletRequest, string expectedSignature, string certChainUrl) {

            string certCacheKey = _getCertCacheKey(certChainUrl);
            X509Certificate cert = MemoryCache.Default.Get(certCacheKey) as X509Certificate;
            if (cert == null ||
                !CheckRequestSignature(serializedSpeechletRequest, expectedSignature, cert)) {

                // download the cert 
                // if we don't have it in cache or 
                // if we have it but it's stale because the current request was signed with a newer cert
                // (signaled by signature check fail with cached cert)
                cert = await RetrieveAndVerifyCertificateAsync(certChainUrl);
                if (cert == null) return false;

                MemoryCache.Default.Set(certCacheKey, cert, _policy);
            }

            return CheckRequestSignature(serializedSpeechletRequest, expectedSignature, cert);
        }


        /// <summary>
        /// 
        /// </summary>
        public static X509Certificate RetrieveAndVerifyCertificate(string certChainUrl) {
            // making requests to externally-supplied URLs is an open invitation to DoS
            // so restrict host to an Alexa controlled subdomain/path
            if (!VerifyCertificateUrl(certChainUrl)) return null;

            var webClient = new WebClient();
            var content = webClient.DownloadString(certChainUrl);

            var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(new StringReader(content));
            var cert = (X509Certificate)pemReader.ReadObject();
            try {
                cert.CheckValidity();
                if (!CheckCertSubjectNames(cert)) return null;
            }
            catch (CertificateExpiredException) {
                return null;
            }
            catch (CertificateNotYetValidException) {
                return null;
            }

            return cert;
        }


        /// <summary>
        /// 
        /// </summary>
        public async static Task<X509Certificate> RetrieveAndVerifyCertificateAsync(string certChainUrl) {
            // making requests to externally-supplied URLs is an open invitation to DoS
            // so restrict host to an Alexa controlled subdomain/path
            if (!VerifyCertificateUrl(certChainUrl)) return null;

            var httpClient = new HttpClient();
            var httpResponse = await httpClient.GetAsync(certChainUrl);
            var content = await httpResponse.Content.ReadAsStringAsync();
            if (String.IsNullOrEmpty(content)) return null;

            var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(new StringReader(content));
            var cert = (X509Certificate)pemReader.ReadObject();
            try {
                cert.CheckValidity(); 
                if (!CheckCertSubjectNames(cert)) return null;
            }
            catch (CertificateExpiredException) {
                return null;
            }
            catch (CertificateNotYetValidException) {
                return null;
            }

            return cert;
        }


        /// <summary>
        /// 
        /// </summary>
        public static bool CheckRequestSignature(
            byte[] serializedSpeechletRequest, string expectedSignature, Org.BouncyCastle.X509.X509Certificate cert) {

            byte[] expectedSig = null;
            try {
                expectedSig = Convert.FromBase64String(expectedSignature);
            }
            catch (FormatException) {
                return false;
            }

            var publicKey = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)cert.GetPublicKey();
            var signer = Org.BouncyCastle.Security.SignerUtilities.GetSigner(Sdk.SIGNATURE_ALGORITHM);
            signer.Init(false, publicKey);
            signer.BlockUpdate(serializedSpeechletRequest, 0, serializedSpeechletRequest.Length);            

            return signer.VerifySignature(expectedSig);
        }


        /// <summary>
        /// 
        /// </summary>
        private static bool CheckCertSubjectNames(X509Certificate cert) {
            bool found = false;
            ArrayList subjectNamesList = (ArrayList)cert.GetSubjectAlternativeNames();
            for (int i=0; i < subjectNamesList.Count; i++) {
                ArrayList subjectNames = (ArrayList)subjectNamesList[i];
                for (int j = 0; j < subjectNames.Count; j++) {
                    if (subjectNames[j] is String && subjectNames[j].Equals(Sdk.ECHO_API_DOMAIN_NAME)) {
                        found = true;
                        break;
                    }
                }
            }

            return found;
        }
    }
}


================================================
FILE: AlexaSkillsKit.Lib/Authentication/SpeechletRequestTimestampVerifier.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Diagnostics;
using AlexaSkillsKit.Json;

namespace AlexaSkillsKit.Authentication
{
    public class SpeechletRequestTimestampVerifier
    {
        /// <summary>
        /// Verifies request timestamp
        /// </summary>
        public static bool VerifyRequestTimestamp(SpeechletRequestEnvelope requestEnvelope, DateTime referenceTimeUtc) {
            // verify timestamp is within tolerance
            var diff = referenceTimeUtc - requestEnvelope.Request.Timestamp;
            Debug.WriteLine("Request was timestamped {0:0.00} seconds ago.", diff.TotalSeconds);
            return (Math.Abs((decimal)diff.TotalSeconds) <= Sdk.TIMESTAMP_TOLERANCE_SEC);
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Authentication/SpeechletRequestValidationResult.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;

namespace AlexaSkillsKit.Authentication
{
    [Flags]
    public enum SpeechletRequestValidationResult
    {
        OK = 0,
        NoSignatureHeader = 1,
        NoCertHeader = 2,
        InvalidSignature = 4,
        InvalidTimestamp = 8,
        InvalidJson = 16,
        InvalidApplicationId = 32,
        NoContent = 64,
        InvalidVersion = 128
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Helpers/DateTimeHelpers.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Helpers
{
    public class DateTimeHelpers
    {
        public static DateTime FromAlexaTimestamp(JObject requestJson) {
            try {
                return requestJson["timestamp"].Value<DateTime>();
            }
            catch (Exception ex) 
            when (ex is InvalidCastException || ex is FormatException) {
                try {
                    return FromUnixTimeMilliseconds(requestJson["timestamp"].Value<string>()).DateTime;
                }
                catch (ArgumentOutOfRangeException) {
                    throw ex;
                }
            }
        }


        /// <summary>
        /// Mirror DateTimeOffset.FromUnixTimeMilliseconds method signature introduced in .NET Framework 4.6
        /// https://msdn.microsoft.com/en-us/library/system.datetimeoffset.fromunixtimemilliseconds(v=vs.110).aspx
        /// </summary>
        /// <param name="timestamp">
        /// A Unix time, expressed as the number of milliseconds that have elapsed since 1970-01-01T00:00:00Z (January 1, 1970, at 12:00 AM UTC). For Unix times before this date, its value is negative.
        /// </param>
        /// <returns>
        /// A date and time value that represents the same moment in time as the Unix time.
        /// </returns>
        public static DateTimeOffset FromUnixTimeMilliseconds(string timestamp) {
            long milliseconds;
            if (!long.TryParse(timestamp, out milliseconds) ||
                milliseconds < -62135596800000 ||
                milliseconds > 253402300799999) {
                throw new ArgumentOutOfRangeException("timestamp");
            }

            var epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeZoneInfo.Utc.BaseUtcOffset);
            return epoch.AddMilliseconds(milliseconds);
        }
    }
}


================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioItem.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#play
    /// </summary>
    public class AudioItem
    {
        public virtual AudioItemStream Stream {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioItemStream.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#play
    /// </summary>
    public class AudioItemStream
    {
        public virtual string Url {
            get;
            set;
        }

        public virtual string Token {
            get;
            set;
        }

        public virtual string ExpectedPreviousToken {
            get;
            set;
        }

        public virtual long OffsetInMilliseconds {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerInterface.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    public class AudioPlayerInterface : ISpeechletInterface
    {
        public static AudioPlayerInterface FromJson(JObject json)
        {
            if (json == null) return null;

            return new AudioPlayerInterface();
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerPlaybackFailedRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#playbackfailed
    /// </summary>
    public class AudioPlayerPlaybackFailedRequest : AudioPlayerRequest
    {
        public AudioPlayerPlaybackFailedRequest(string subtype, JObject json) : base(subtype, json) {
            Error = Error.FromJson(json.Value<JObject>("error"));
            CurrentPlaybackState = PlaybackState.FromJson(json.Value<JObject>("currentPlaybackState"));
        }

        public Error Error {
            get;
            private set;
        }

        public PlaybackState CurrentPlaybackState {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#requests
    /// </summary>
    public class AudioPlayerRequest : ExtendedSpeechletRequest
    {
        public static readonly string TypeName = "AudioPlayer";

        public AudioPlayerRequest(string subtype, JObject json) : base(TypeName, subtype, json) {
            Token = json.Value<string>("token");
            OffsetInMilliseconds = json.Value<long?>("offsetInMilliseconds");
        }

        public string Token {
            get;
            private set;
        }

        public long? OffsetInMilliseconds {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerResponse.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Interfaces.AudioPlayer.Directives;
using AlexaSkillsKit.Speechlet;
using System.Collections.Generic;

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#response-to-audioplayer-or-playbackcontroller-example-directives-only
    /// </summary>
    public class AudioPlayerResponse : ISpeechletResponse
    {
        public virtual IEnumerable<AudioPlayerDirective> Directives {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerState.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using Newtonsoft.Json.Linq;
using System;

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    public class AudioPlayerState : ISpeechletInterfaceState
    {
        public static AudioPlayerState FromJson(JObject json) {
            if (json == null) return null;

            PlayerActivityEnum playerActivity = PlayerActivityEnum.NONE;
            Enum.TryParse(json.Value<string>("playerActivity"), out playerActivity);
            return new AudioPlayerState {
                OffsetInMilliseconds = json.Value<long?>("offsetInMilliseconds"),
                Token = json.Value<string>("token"),
                PlayerActivity = playerActivity
            };
        }

        public long? OffsetInMilliseconds {
            get;
            private set;
        }

        public string Token {
            get;
            private set;
        }

        public PlayerActivityEnum PlayerActivity {
            get;
            private set;
        }

        public enum PlayerActivityEnum
        {
            NONE = 0, // default in case parsing fails
            PLAYING,
            PAUSED,
            FINISHED,
            BUFFER_UNDERRUN,
            IDLE,
            STOPPED
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerClearQueueDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.AudioPlayer.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#clearqueue
    /// </summary>
    public class AudioPlayerClearQueueDirective : AudioPlayerDirective
    {
        public AudioPlayerClearQueueDirective() : base("ClearQueue") {

        }

        public virtual ClearBehaviorEnum ClearBehavior {
            get;
            set;
        }

        public enum ClearBehaviorEnum
        {
            CLEAR_ENQUEUED,
            CLEAR_ALL
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Interfaces.AudioPlayer.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#directives
    /// </summary>
    public class AudioPlayerDirective : Directive
    {
        public AudioPlayerDirective(string subtype) : base($"AudioPlayer.{subtype}") {

        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerPlayDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.AudioPlayer.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#play
    /// </summary>
    public class AudioPlayerPlayDirective : AudioPlayerDirective
    {
        public AudioPlayerPlayDirective() : base("Play") {

        }

        public virtual PlayBehaviorEnum PlayBehavior {
            get;
            set;
        }

        public virtual AudioItem AudioItem {
            get;
            set;
        }

        public enum PlayBehaviorEnum
        {
            REPLACE_ALL,
            ENQUEUE,
            REPLACE_ENQUEUED
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerStopDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.AudioPlayer.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#stop
    /// </summary>
    public class AudioPlayerStopDirective : AudioPlayerDirective
    {
        public AudioPlayerStopDirective() : base("Stop") {

        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/IAudioPlayerSpeechlet.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    public interface IAudioPlayerSpeechlet
    {
        AudioPlayerResponse OnAudioPlayer(AudioPlayerRequest audioRequest, Context context);
        AudioPlayerResponse OnPlaybackController(PlaybackControllerRequest playbackRequest, Context context);
        void OnSystemExceptionEncountered(SystemExceptionEncounteredRequest systemRequest, Context context);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/IAudioPlayerSpeechletAsync.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using System.Threading.Tasks;

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    public interface IAudioPlayerSpeechletAsync
    {
        Task<AudioPlayerResponse> OnAudioPlayerAsync(AudioPlayerRequest audioRequest, Context context);
        Task<AudioPlayerResponse> OnPlaybackControllerAsync(PlaybackControllerRequest playbackRequest, Context context);
        Task OnSystemExceptionEncounteredAsync(SystemExceptionEncounteredRequest systemRequest, Context context);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/PlaybackControllerRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Interfaces.AudioPlayer
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/playback-controller-interface-reference.html#requests
    /// </summary>
    public class PlaybackControllerRequest : ExtendedSpeechletRequest
    {
        public static readonly string TypeName = "PlaybackController";

        public PlaybackControllerRequest(string subtype, JObject json) : base(TypeName, subtype, json) {
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogConfirmIntentDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.Dialog.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmintent
    /// </summary>
    public class DialogConfirmIntentDirective : DialogDirective
    {
        public DialogConfirmIntentDirective() : base("ConfirmIntent") {

        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogConfirmSlotDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.Dialog.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#confirmslot
    /// </summary>
    public class DialogConfirmSlotDirective : DialogDirective
    {
        public DialogConfirmSlotDirective() : base("ConfirmSlot") {

        }

        public virtual string SlotToConfirm {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogDelegateDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.Dialog.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#delegate
    /// </summary>
    public class DialogDelegateDirective : DialogDirective
    {
        public DialogDelegateDirective() : base("Delegate") {

        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Slu;
using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Interfaces.Dialog.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#directives
    /// </summary>
    public class DialogDirective: Directive
    {
        public DialogDirective(string subtype) : base($"Dialog.{subtype}") {

        }

        public virtual Intent UpdatedIntent {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogElicitSlotDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.Dialog.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#elicitslot
    /// </summary>
    public class DialogElicitSlotDirective : DialogDirective
    {
        public DialogElicitSlotDirective() : base("ElicitSlot") {

        }

        public virtual string SlotToElicit {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/Directives/DisplayRenderTemplateDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Interfaces.Display.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#form-of-the-displayrendertemplate-directive
    /// </summary>
    public class DisplayRenderTemplateDirective : Directive
    {
        public DisplayRenderTemplateDirective() : base("Display.RenderTemplate") {

        }

        public virtual DisplayTemplate Template {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/Directives/HintDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Interfaces.Display.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#hint-directive
    /// </summary>
    public class HintDirective : Directive
    {
        public HintDirective() : base("Hint") {

        }

        public virtual TextField Hint {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayImage.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System.Collections.Generic;

namespace AlexaSkillsKit.Interfaces.Display
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#image-object-specifications
    /// </summary>
    public class DisplayImage
    {
        public virtual string ContentDescription {
            get;
            set;
        }

        public virtual IEnumerable<DisplayImageSource> Sources {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayImageSource.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.Display
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#image-object-specifications
    /// </summary>
    public class DisplayImageSource
    {
        public virtual string Url {
            get;
            set;
        }

        public virtual ImageSizeEnum Size {
            get;
            set;
        }

        public virtual int WidthPixels {
            get;
            set;
        }

        public virtual int HeightPixels {
            get;
            set;
        }

        public enum ImageSizeEnum
        {
            X_SMALL,
            SMALL,
            MEDIUM,
            LARGE,
            X_LARGE
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayInterface.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Interfaces.Display
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#determining-the-version-of-the-supported-display
    /// </summary>
    public class DisplayInterface: ISpeechletInterface
    {
        private const string DefaultTemplateVersion = "1";
        private const string DefaultMarkupVersion = "1";

        public static DisplayInterface FromJson(JObject json) {
            if (json == null) return null;

            return new DisplayInterface {
                TemplateVersion = json.Value<string>("templateVersion") ?? DefaultTemplateVersion,
                MarkupVersion = json.Value<string>("markupVersion") ?? DefaultMarkupVersion,
                Token = json.Value<string>("token")
            };
        }

        public string TemplateVersion {
            get;
            private set;
        }

        public string MarkupVersion {
            get;
            private set;
        }

        public string Token {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Interfaces.Display
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#touch-selection-events
    /// </summary>
    public class DisplayRequest : ExtendedSpeechletRequest
    {
        public static readonly string TypeName = "Display";

        public DisplayRequest(string subtype, JObject json) : base(TypeName, subtype, json) {
            Token = json.Value<string>("token");
        }

        public string Token {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayTemplate.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System.Collections.Generic;

namespace AlexaSkillsKit.Interfaces.Display
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#display-template-elements
    /// </summary>
    public class DisplayTemplate
    {
        public virtual string Type {
            get;
            set;
        }

        public virtual string Token {
            get;
            set;
        }

        public virtual string Title {
            get;
            set;
        }

        public virtual TextContent TextContent {
            get;
            set;
        }

        public virtual ButtonStateEnum BackButton {
            get;
            set;
        }

        public virtual DisplayImage BackgroundImage {
            get;
            set;
        }

        public virtual DisplayImage Image {
            get;
            set;
        }

        public virtual IEnumerable<ListItem> ListItems {
            get;
            set;
        }

        public enum ButtonStateEnum
        {
            HIDDEN,
            VISIBLE
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/IDisplaySpeechlet.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Interfaces.Display
{
    public interface IDisplaySpeechlet
    {
        SpeechletResponse OnDisplay(DisplayRequest displayRequest, Context context);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/IDisplaySpeechletAsync.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using System.Threading.Tasks;

namespace AlexaSkillsKit.Interfaces.Display
{
    public interface IDisplaySpeechletAsync
    {
        Task<SpeechletResponse> OnDisplayAsync(DisplayRequest displayRequest, Context context);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/ListItem.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.Display
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#display-template-elements
    /// </summary>
    public class ListItem
    {
        public virtual string Token {
            get;
            set;
        }

        public virtual DisplayImage Image {
            get;
            set;
        }

        public virtual TextContent TextContent {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/TextContent.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.Display
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#textcontent-object-specifications
    /// </summary>
    public class TextContent
    {
        public virtual TextField PrimaryText {
            get;
            set;
        }

        public virtual TextField SecondaryText {
            get;
            set;
        }

        public virtual TextField TertiaryText {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/Display/TextField.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.Display
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/display-interface-reference.html#textcontent-object-specifications
    /// </summary>
    public class TextField
    {
        public virtual TextTypeEnum Type {
            get;
            set;
        }

        public virtual string Text {
            get;
            set;
        }

        public enum TextTypeEnum
        {
            PlainText,
            RichText
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/VideoApp/Directives/VideoAppLaunchDirective.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Interfaces.VideoApp.Directives
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/videoapp-interface-reference.html#videoapp-directives
    /// </summary>
    public class VideoAppLaunchDirective : Directive
    {
        public VideoAppLaunchDirective() : base("VideoApp.Launch") {

        }

        public virtual VideoItem VideoItem {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/VideoApp/VideoItem.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.VideoApp
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/videoapp-interface-reference.html#parameters-of-response
    /// </summary>
    public class VideoItem
    {
        public virtual string Source {
            get;
            set;
        }

        public virtual VideoItemMetadata Metadata {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Interfaces/VideoApp/VideoItemMetadata.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Interfaces.VideoApp
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/videoapp-interface-reference.html#parameters-of-response
    /// </summary>
    public class VideoItemMetadata
    {
        public virtual string Title {
            get;
            set;
        }

        public virtual string Subtitle {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Json/CamelCasePropertyNamesExceptDictionaryKeysContractResolver.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Serialization;
using System;

namespace AlexaSkillsKit.Json
{
    public class CamelCasePropertyNamesExceptDictionaryKeysContractResolver : CamelCasePropertyNamesContractResolver
    {
        protected override JsonDictionaryContract CreateDictionaryContract(Type objectType) {
            var contract = base.CreateDictionaryContract(objectType);
            contract.DictionaryKeyResolver = propertyName => propertyName;
            return contract;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Json/Deserializer.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

namespace AlexaSkillsKit.Json
{
    public class Deserializer<T>
    {
        private static IDictionary<string, Func<JObject, T>> deserializers = new Dictionary<string, Func<JObject, T>>();

        public static void RegisterDeserializer(string name, Func<JObject, T> fromJson) {
            deserializers.Add(name, fromJson);
        }

        public static T FromJson(JProperty json) {
            if (json == null || !deserializers.ContainsKey(json.Name)) return default(T);

            return deserializers[json.Name](json.Value as JObject);
        }
    }
}


================================================
FILE: AlexaSkillsKit.Lib/Json/SpeechletRequestEnvelope.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using AlexaSkillsKit.Speechlet;
using AlexaSkillsKit.Authentication;

namespace AlexaSkillsKit.Json
{
    public class SpeechletRequestEnvelope
    {
        public static SpeechletRequestParser RequestParser { get; } = new SpeechletRequestParser();

        static SpeechletRequestEnvelope() {
            RequestParser.AddStandard();
            RequestParser.AddSystem();
            RequestParser.AddAudioPlayer();
            RequestParser.AddPlaybackController();
            RequestParser.AddDisplay();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        public static SpeechletRequestEnvelope FromJson(string content) {
            if (String.IsNullOrEmpty(content)) {
                throw new SpeechletValidationException(SpeechletRequestValidationResult.NoContent, "Request content is empty");
            }

            JObject json = JsonConvert.DeserializeObject<JObject>(content, Sdk.DeserializationSettings);
            return FromJson(json);
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static SpeechletRequestEnvelope FromJson(JObject json) {
            var version = json.Value<string>("version");
            if (version != null && version != Sdk.VERSION) {
                throw new SpeechletValidationException(SpeechletRequestValidationResult.InvalidVersion, "Request must conform to 1.0 schema.");
            }

            return new SpeechletRequestEnvelope {
                Version = version,
                Request = RequestParser.Parse(json.Value<JObject>("request")),
                Session = Session.FromJson(json.Value<JObject>("session")),
                Context = Context.FromJson(json.Value<JObject>("context"))
            };
        }


        public virtual SpeechletRequest Request {
            get;
            set;
        }

        public virtual Session Session {
            get;
            set;
        }

        public virtual string Version {
            get;
            set;
        }

        public virtual Context Context {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Json/SpeechletRequestParser.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Speechlet;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;

namespace AlexaSkillsKit.Json
{
    public class SpeechletRequestParser
    {
        private IDictionary<string, Func<string, JObject, SpeechletRequest>> resolvers
            = new Dictionary<string, Func<string, JObject, SpeechletRequest>>();

        private SpeechletRequest Parse(string type, string subtype, JObject json) {
            if (json == null || !resolvers.ContainsKey(type)) return null;

            return resolvers[type](subtype, json);
        }

        public SpeechletRequest Parse(JObject json) {
            var requestTypeParts = json?.Value<string>("type")?.Split('.');
            if (requestTypeParts == null) {
                throw new ArgumentException("json");
            }

            var requestType = requestTypeParts.Length > 1 ? requestTypeParts[0] : string.Empty;
            var requestSubtype = requestTypeParts.Last();

            var request = Parse(requestType, requestSubtype, json);
            if (request == null) {
                throw new ArgumentException("json");
            }

            return request;
        }

        public void AddInterface(string name, Func<string, JObject, SpeechletRequest> resolver) {
            resolvers[name] = resolver;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Json/SpeechletRequestParserExtensions.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Interfaces.AudioPlayer;
using AlexaSkillsKit.Interfaces.Display;
using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Json
{
    public static class SpeechletRequestParserExtensions
    {
        public static void AddStandard(this SpeechletRequestParser parser) {
            parser.AddInterface(string.Empty, (subtype, json) => {
                switch (subtype) {
                    case "LaunchRequest":
                        return new LaunchRequest(json);
                    case "IntentRequest":
                        return new IntentRequest(json);
                    case "SessionEndedRequest":
                        return new SessionEndedRequest(json);
                }
                return null;
            });
        }

        public static void AddSystem(this SpeechletRequestParser parser) {
            parser.AddInterface(SystemRequest.TypeName, (subtype, json) => {
                switch (subtype) {
                    case "ExceptionEncountered":
                        return new SystemExceptionEncounteredRequest(subtype, json);
                }
                return null;
            });
        }

        public static void AddAudioPlayer(this SpeechletRequestParser parser) {
            parser.AddInterface(AudioPlayerRequest.TypeName, (subtype, json) => {
                switch (subtype) {
                    case "PlaybackFailed":
                        return new AudioPlayerPlaybackFailedRequest(subtype, json);
                    default:
                        return new AudioPlayerRequest(subtype, json);
                }
            });
        }

        public static void AddPlaybackController(this SpeechletRequestParser parser) {
            parser.AddInterface(PlaybackControllerRequest.TypeName, (subtype, json) => new PlaybackControllerRequest(subtype, json));
        }

        public static void AddDisplay(this SpeechletRequestParser parser) {
            parser.AddInterface(DisplayRequest.TypeName, (subtype, json) => new DisplayRequest(subtype, json));
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Json/SpeechletResponseEnvelope.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System.Collections.Generic;
using Newtonsoft.Json;
using AlexaSkillsKit.Speechlet;

namespace AlexaSkillsKit.Json
{
    public class SpeechletResponseEnvelope
    {
        private static JsonSerializerSettings _serializerSettings = new JsonSerializerSettings() {
            NullValueHandling = NullValueHandling.Ignore, 
            ContractResolver = new CamelCasePropertyNamesExceptDictionaryKeysContractResolver(),
            Converters = new List<JsonConverter> { new Newtonsoft.Json.Converters.StringEnumConverter() }
        };


        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public virtual string ToJson() {
            return JsonConvert.SerializeObject(this, _serializerSettings);
        }


        public virtual ISpeechletResponse Response {
            get;
            set;
        }

        public virtual Dictionary<string, string> SessionAttributes {
            get;
            set;
        }

        public virtual string Version {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Properties/AssemblyInfo.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AlexaSkillsKit")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AlexaSkillsKit")]
[assembly: AssemblyCopyright("Copyright © 2018 Stefan Negritoiu (FreeBusy) and contributors")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("5471ba5b-32c1-486c-851b-dbb8d9c53f13")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.6.0")]
[assembly: AssemblyFileVersion("1.6.0")]


================================================
FILE: AlexaSkillsKit.Lib/Sdk.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using Newtonsoft.Json;

namespace AlexaSkillsKit
{
    public static class Sdk
    {
        public const string VERSION = "1.0";
        public const string CHARACTER_ENCODING = "UTF-8";
        public const string ECHO_API_DOMAIN_NAME = "echo-api.amazon.com";
        public const string SIGNATURE_CERT_URL_REQUEST_HEADER = "SignatureCertChainUrl";
        public const string SIGNATURE_CERT_URL_HOST = "s3.amazonaws.com";
        public const string SIGNATURE_CERT_URL_PATH = "/echo.api/";
        public const string SIGNATURE_CERT_TYPE = "X.509";
        public const string SIGNATURE_REQUEST_HEADER = "Signature";
        public const string SIGNATURE_ALGORITHM = "SHA1withRSA";
        public const string SIGNATURE_KEY_TYPE = "RSA";
        public const int TIMESTAMP_TOLERANCE_SEC = 150;

        public static JsonSerializerSettings DeserializationSettings = new JsonSerializerSettings {
            MissingMemberHandling = MissingMemberHandling.Ignore
        };
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Slu/ConfirmationStatusEnum.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Slu
{
    public enum ConfirmationStatusEnum
    {
        NONE,
        CONFIRMED,
        DENIED
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Slu/Intent.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;
using System;

namespace AlexaSkillsKit.Slu
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-types-reference.html#intent-object
    /// </summary>
    public class Intent
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static Intent FromJson(JObject json) {
            if (json == null) return null;

            var slots = json.Value<JObject>("slots")?.Children<JProperty>()
                .ToDictionary(x => x.Name, x => Slot.FromJson(x.Value as JObject));
            ConfirmationStatusEnum confirmationStatus;
            Enum.TryParse(json.Value<string>("confirmationStatus"), out confirmationStatus);

            return new Intent {
                Name = json.Value<string>("name"),
                ConfirmationStatus = confirmationStatus,
                Slots = slots ?? new Dictionary<string, Slot>()
            };
        }

        public virtual string Name {
            get;
            set;
        }

        public virtual ConfirmationStatusEnum ConfirmationStatus {
            get;
            set;
        }

        public virtual IDictionary<string, Slot> Slots {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Slu/Resolutions.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;

namespace AlexaSkillsKit.Slu
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-types-reference.html#resolutions-object
    /// </summary>
    public class Resolutions
    {
        public static Resolutions FromJson(JObject json) {
            if (json == null) return null;

            var resolutionsPerAuthority = json.Value<JArray>("resolutionsPerAuthority")?.Children()
                .Select(x => Slu.ResolutionsPerAuthority.FromJson(x.Value<JObject>()));
            return new Resolutions {
                ResolutionsPerAuthority = resolutionsPerAuthority
            };
        }

        public virtual IEnumerable<ResolutionsPerAuthority> ResolutionsPerAuthority {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthority.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;

namespace AlexaSkillsKit.Slu
{
    public class ResolutionsPerAuthority
    {
        public static ResolutionsPerAuthority FromJson(JObject json) {
            if (json == null) return null;

            var values = json.Value<JArray>("values")?.Children()
                .Select(x => ResolutionsPerAuthorityValue.FromJson(x.Value<JObject>()));
            return new ResolutionsPerAuthority {
                Authority = json.Value<string>("authority"),
                Status = ResolutionsPerAuthorityStatus.FromJson(json.Value<JObject>("status")),
                Values = values
            };
        }

        public virtual string Authority {
            get;
            set;
        }

        public virtual ResolutionsPerAuthorityStatus Status {
            get;
            set;
        }

        public virtual IEnumerable<ResolutionsPerAuthorityValue> Values {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityStatus.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Slu
{
    public class ResolutionsPerAuthorityStatus
    {
        public static ResolutionsPerAuthorityStatus FromJson(JObject json) {
            if (json == null) return null;

            return new ResolutionsPerAuthorityStatus {
                Code = json.Value<string>("code")
            };
        }

        public virtual string Code {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityValue.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Slu
{
    public class ResolutionsPerAuthorityValue
    {
        public static ResolutionsPerAuthorityValue FromJson(JObject json) {
            if (json == null) return null;

            return new ResolutionsPerAuthorityValue {
                Value = ResolutionsPerAuthorityValueValue.FromJson(json.Value<JObject>("value"))
            };
        }

        public virtual ResolutionsPerAuthorityValueValue Value {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityValueValue.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Slu
{
    public class ResolutionsPerAuthorityValueValue
    {
        public static ResolutionsPerAuthorityValueValue FromJson(JObject json) {
            if (json == null) return null;

            return new ResolutionsPerAuthorityValueValue {
                Name = json.Value<string>("name"),
                Id = json.Value<string>("id")
            };
        }

        public virtual string Name {
            get;
            set;
        }

        public virtual string Id {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Slu/Slot.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;

namespace AlexaSkillsKit.Slu
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-types-reference.html#slot-object
    /// </summary>
    public class Slot
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static Slot FromJson(JObject json) {
            if (json == null) return null;

            ConfirmationStatusEnum confirmationStatus;
            Enum.TryParse(json.Value<string>("confirmationStatus"), out confirmationStatus);
            return new Slot {
                Name = json.Value<string>("name"),
                Value = json.Value<string>("value"),
                ConfirmationStatus = confirmationStatus,
                Resolutions = Resolutions.FromJson(json.Value<JObject>("resolutions"))
            };
        }
        
        public virtual string Name {
            get;
            set;
        }

        public virtual string Value {
            get;
            set;
        }

        public virtual ConfirmationStatusEnum ConfirmationStatus {
            get;
            set;
        }

        [JsonIgnore]
        public virtual Resolutions Resolutions {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Application.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    public class Application
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static Application FromJson(JObject json) {
            return new Application {
                Id = json.Value<string>("applicationId")
            };
        }

        public virtual string Id {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Cause.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#system-exceptionencountered
    /// </summary>
    public class Cause
    {
        public static Cause FromJson(JObject json) {
            if (json == null) return null;

            return new Cause {
                RequestId = json.Value<string>("requestId")
            };
        }

        public string RequestId {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Context.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Interfaces.AudioPlayer;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#context-object
    /// </summary>
    public class Context
    {
        public static Context FromJson(JObject json) {
            if (json == null) return null;

            return new Context {
                System = SystemState.FromJson(json.Value<JObject>("System")),
                AudioPlayer = AudioPlayerState.FromJson(json.Value<JObject>("AudioPlayer"))
            };
        }

        public SystemState System {
            get;
            private set;
        }

        public AudioPlayerState AudioPlayer {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Device.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#system-object
    /// </summary>
    public class Device
    {
        public static Device FromJson(JObject json) {
            if (json == null) return null;

            return new Device {
                DeviceId = json.Value<string>("deviceId"),
                SupportedInterfaces = SupportedInterfaces.FromJson(json.Value<JObject>("supportedInterfaces"))
            };
        }

        public string DeviceId {
            get;
            private set;
        }

        public SupportedInterfaces SupportedInterfaces {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Directive.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#response-object
    /// </summary>
    public class Directive
    {
        public Directive(string type) {
            Type = type;
        }

        public virtual string Type {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Error.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;
using System;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#playbackfailed
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#system-exceptionencountered
    /// </summary>
    public class Error
    {
        public static Error FromJson(JObject json) {
            if (json == null) return null;

            TypeEnum type = TypeEnum.NONE;
            Enum.TryParse(json.Value<string>("type"), out type);
            return new Error {
                Type = type,
                Message = json.Value<string>("message")
            };
        }

        public TypeEnum Type {
            get;
            private set;
        }

        public string Message {
            get;
            private set;
        }

        public enum TypeEnum
        {
            NONE = 0, // default in case parsing fails
            INVALID_RESPONSE,
            DEVICE_COMMUNICATION_ERROR,
            INTERNAL_ERROR,
            MEDIA_ERROR_UNKNOWN,
            MEDIA_ERROR_INVALID_REQUEST,
            MEDIA_ERROR_SERVICE_UNAVAILABLE,
            MEDIA_ERROR_INTERNAL_SERVER_ERROR,
            MEDIA_ERROR_INTERNAL_DEVICE_ERROR
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ExtendedSpeechletRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#request-body-parameters
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#requests
    /// https://developer.amazon.com/docs/custom-skills/playback-controller-interface-reference.html#requests
    /// </summary>
    public class ExtendedSpeechletRequest : SpeechletRequest
    {
        public ExtendedSpeechletRequest(string type, string subtype, JObject json) : base(json) {
            Type = type;
            Subtype = subtype;
        }

        public string Type {
            get;
            private set;
        }

        public string Subtype {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechlet.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;

namespace AlexaSkillsKit.Speechlet
{
    [Obsolete("Does not support context object. Implement ISpeechletWithContext instead")]
    public interface ISpeechlet : ISpeechletBase
    {
        SpeechletResponse OnIntent(IntentRequest intentRequest, Session session);
        SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session session);
        void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Session session);
        void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session session);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletAsync.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Threading.Tasks;

namespace AlexaSkillsKit.Speechlet
{
    [Obsolete("Does not support context object. Implement ISpeechletWithContextAsync instead")]
    public interface ISpeechletAsync : ISpeechletBase
    {
        Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session);
        Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Session session);
        Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session);
        Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletBase.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using AlexaSkillsKit.Authentication;
using AlexaSkillsKit.Json;

namespace AlexaSkillsKit.Speechlet
{
    public interface ISpeechletBase
    {
        bool OnRequestValidation(SpeechletRequestValidationResult result, DateTime referenceTimeUtc, SpeechletRequestEnvelope requestEnvelope);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletInterface.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Speechlet
{
    public interface ISpeechletInterface
    {
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletInterfaceState.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Speechlet
{
    public interface ISpeechletInterfaceState
    {
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletResponse.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Speechlet
{
    public interface ISpeechletResponse
    {
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletWithContext.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Speechlet
{
    public interface ISpeechletWithContext
    {
        SpeechletResponse OnIntent(IntentRequest intentRequest, Session session, Context context);
        SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session session, Context context);
        void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Session session, Context context);
        void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session session, Context context);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletWithContextAsync.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System.Threading.Tasks;

namespace AlexaSkillsKit.Speechlet
{
    public interface ISpeechletWithContextAsync
    {
        Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session, Context context);
        Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Session session, Context context);
        Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session, Context context);
        Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session, Context context);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/IntentRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Slu;
using Newtonsoft.Json.Linq;
using System;

namespace AlexaSkillsKit.Speechlet
{
    public class IntentRequest : SpeechletRequest
    {
        public IntentRequest(JObject json) : base(json) {
            Intent = Intent.FromJson(json.Value<JObject>("intent"));

            DialogStateEnum dialogState = DialogStateEnum.UNKNOWN;
            Enum.TryParse(json.Value<string>("dialogState"), out dialogState);
            DialogState = dialogState;
        }

        public virtual Intent Intent {
            get;
            private set;
        }

        public virtual DialogStateEnum DialogState {
            get;
            private set;
        }

        public enum DialogStateEnum
        {
            UNKNOWN = 0, // default in case parsing fails
            STARTED,
            IN_PROGRESS,
            COMPLETED
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/LaunchRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    public class LaunchRequest : SpeechletRequest
    {
        public LaunchRequest(JObject json) : base(json) {
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Person.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    public class Person
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static Person FromJson(JObject json) {
            if (json == null) return null;

            return new Person{
                PersonId = json.Value<string>("personId"),
                AccessToken = json.Value<string>("accessToken")
            };
        }

        public string PersonId{
            get;
            private set;
        }

        public virtual string AccessToken{
            get;
            set;
        }

    }
}


================================================
FILE: AlexaSkillsKit.Lib/Speechlet/PlaybackState.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;
using System;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#playbackfailed
    /// </summary>
    public class PlaybackState
    {
        public static PlaybackState FromJson(JObject json) {
            if (json == null) return null;

            PlayerActivityEnum playerActivity = PlayerActivityEnum.NONE;
            Enum.TryParse(json.Value<string>("playerActivity"), out playerActivity);
            return new PlaybackState {
                Token = json.Value<string>("token"),
                OffsetInMilliseconds = json.Value<long?>("offsetInMilliseconds"),
                PlayerActivity = playerActivity
            };
        }

        public string Token {
            get;
            private set;
        }

        public long? OffsetInMilliseconds {
            get;
            private set;
        }

        public PlayerActivityEnum PlayerActivity {
            get;
            private set;
        }

        public enum PlayerActivityEnum
        {
            NONE = 0, // default in case parsing fails
            PLAYING,
            PAUSED,
            FINISHED,
            BUFFER_UNDERRUN,
            IDLE
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Session.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    public class Session
    {
        public const string INTENT_SEQUENCE = "intentSequence";
        public const string SEPARATOR = ";";

        /// <summary>
        /// 
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static Session FromJson(JObject json) {
            if (json == null) return null;

            var attributes = new Dictionary<string, string>();
            var jsonAttributes = json.Value<JObject>("attributes");
            if (jsonAttributes != null) {
                foreach (var attrib in jsonAttributes.Children()) {
                    attributes.Add(attrib.Value<JProperty>().Name, attrib.Value<JProperty>().Value.ToString());
                }
            }

            return new Session {
                SessionId = json.Value<string>("sessionId"),
                IsNew = json.Value<bool>("new"),
                User = User.FromJson(json.Value<JObject>("user")),
                Application = Application.FromJson(json.Value<JObject>("application")),
                Attributes = attributes
            };
        }

        public virtual string SessionId {
            get;
            set;
        }

        public virtual bool IsNew {
            get;
            set;
        }

        public virtual Application Application {
            get;
            set;
        }

        public virtual User User {
            get;
            set;
        }

        public virtual Dictionary<string, string> Attributes {
            get;
            set;
        }

        public virtual string[] IntentSequence {
            get {
                return !Attributes.ContainsKey(INTENT_SEQUENCE) || String.IsNullOrEmpty(Attributes[INTENT_SEQUENCE]) ?
                    new string[0] : 
                    Attributes[INTENT_SEQUENCE].Split(
                        new string[1] { SEPARATOR }, StringSplitOptions.RemoveEmptyEntries);
            }
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SessionEndedRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;
using System;

namespace AlexaSkillsKit.Speechlet
{
    public class SessionEndedRequest : SpeechletRequest
    {
        public SessionEndedRequest(JObject json) : base(json) {

            ReasonEnum reason = ReasonEnum.UNKNOWN;
            Enum.TryParse(json.Value<string>("reason"), out reason);
            Reason = reason;
            Error = Error.FromJson(json.Value<JObject>("error"));
        }

        public virtual ReasonEnum Reason {
            get;
            private set;
        }

        public Error Error {
            get;
            private set;
        }

        public enum ReasonEnum
        {
            NONE = 0, // default in case parsing fails (backwards compatibility)
            UNKNOWN = 0, // default in case parsing fails
            ERROR,
            USER_INITIATED,
            EXCEEDED_MAX_REPROMPTS,
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SessionStartedRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.Speechlet
{
    public class SessionStartedRequest : SpeechletRequest
    {
        public SessionStartedRequest(SpeechletRequest other) : base(other) {
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/Speechlet.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;

namespace AlexaSkillsKit.Speechlet
{
    [Obsolete("Does not support context object. Derive from SpeechletBase instead and implement ISpeechletWithContext")]
    public abstract class Speechlet : SpeechletBase, ISpeechlet
    {
        public abstract SpeechletResponse OnIntent(IntentRequest intentRequest, Session session);
        public abstract SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session session);
        public abstract void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Session session);
        public abstract void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session session);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletAsync.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Threading.Tasks;

namespace AlexaSkillsKit.Speechlet
{
    [Obsolete("Does not support context object. Derive from SpeechletBase instead and implement ISpeechletWithContextAsync")]
    public abstract class SpeechletAsync : SpeechletBase, ISpeechletAsync
    {
        public abstract Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Session session);
        public abstract Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Session session);
        public abstract Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Session session);
        public abstract Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session);
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletBase.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Authentication;
using AlexaSkillsKit.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace AlexaSkillsKit.Speechlet
{
    public class SpeechletBase : ISpeechletBase
    {
        public SpeechletService Service { get; }

        protected SpeechletBase() {
            Service = new SpeechletService(this);
        }


        /// <summary>
        /// Processes Alexa request AND validates request signature
        /// </summary>
        /// <param name="httpRequest"></param>
        /// <returns></returns>
        public HttpResponseMessage GetResponse(HttpRequestMessage httpRequest) {
            return AsyncHelpers.RunSync(async () => await Service.GetResponseAsync(httpRequest));
        }

        public async Task<HttpResponseMessage> GetResponseAsync(HttpRequestMessage httpRequest) {
            return await Service.GetResponseAsync(httpRequest);
        }


        /// <summary>
        /// Processes Alexa request but does NOT validate request signature 
        /// </summary>
        /// <param name="requestContent"></param>
        /// <returns></returns>
        public string ProcessRequest(string requestContent) {
            return AsyncHelpers.RunSync(async () => await ProcessRequestAsync(requestContent));
        }

        public async Task<string> ProcessRequestAsync(string requestContent) {
            var requestEnvelope = SpeechletRequestEnvelope.FromJson(requestContent);
            return (await Service.ProcessRequestAsync(requestEnvelope))?.ToJson();
        }


        /// <summary>
        /// Processes Alexa request but does NOT validate request signature 
        /// </summary>
        /// <param name="requestJson"></param>
        /// <returns></returns>
        public virtual string ProcessRequest(JObject requestJson) {
            return AsyncHelpers.RunSync(async () => await ProcessRequestAsync(requestJson));
        }

        public async Task<string> ProcessRequestAsync(JObject requestJson) {
            var requestEnvelope = SpeechletRequestEnvelope.FromJson(requestJson);
            return (await Service.ProcessRequestAsync(requestEnvelope))?.ToJson();
        }


        /// <summary>
        /// Opportunity to set policy for handling requests with invalid signatures and/or timestamps
        /// </summary>
        /// <returns>true if request processing should continue, otherwise false</returns>
        public virtual bool OnRequestValidation(
            SpeechletRequestValidationResult result, DateTime referenceTimeUtc, SpeechletRequestEnvelope requestEnvelope) {
            
            return result == SpeechletRequestValidationResult.OK;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletException.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;

namespace AlexaSkillsKit.Speechlet
{
    public class SpeechletException : Exception
    {
        public SpeechletException() : base() {

        }

        public SpeechletException(string message) : base(message) {

        }

        public SpeechletException(string message, Exception cause) : base(message, cause) {

        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Helpers;
using Newtonsoft.Json.Linq;
using System;

namespace AlexaSkillsKit.Speechlet
{
    public abstract class SpeechletRequest
    {
        protected SpeechletRequest(JObject json) {
            RequestId = json.Value<string>("requestId");
            Timestamp = DateTimeHelpers.FromAlexaTimestamp(json);
            Locale = json.Value<string>("locale");
        }

        protected SpeechletRequest(SpeechletRequest other) {
            RequestId = other.RequestId;
            Timestamp = other.Timestamp;
            Locale = other.Locale;
        }

        public string RequestId {
            get;
            private set;
        }

        public DateTime Timestamp {
            get;
            private set;
        }

        public string Locale {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletResponse.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.UI;
using System.Collections.Generic;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#response-object
    /// </summary>
    public class SpeechletResponse : ISpeechletResponse
    {
        /// <summary>
        /// Set default ShouldEndSession value to false for the sake of backwards compatibility
        /// </summary>
        public SpeechletResponse() {
            ShouldEndSession = false;
        }

        public virtual Card Card {
            get;
            set;
        }

        public virtual IEnumerable<Directive> Directives {
            get;
            set;
        }

        public virtual OutputSpeech OutputSpeech {
            get;
            set;
        }

        public virtual Reprompt Reprompt {
            get;
            set;
        }

        public virtual bool? ShouldEndSession {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletService.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Authentication;
using AlexaSkillsKit.Interfaces.AudioPlayer;
using AlexaSkillsKit.Interfaces.Display;
using AlexaSkillsKit.Json;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace AlexaSkillsKit.Speechlet
{
    public class SpeechletService
    {
        private ISpeechletBase speechlet;

        private IDictionary<string, Func<ExtendedSpeechletRequest, Context, Task<ISpeechletResponse>>> handlers
            = new Dictionary<string, Func<ExtendedSpeechletRequest, Context, Task<ISpeechletResponse>>>();

        public string ApplicationId { get; set; }


        public void AddHandler<T>(string type, Func<T, Context, Task<ISpeechletResponse>> handler) where T : SpeechletRequest {
            handlers[type] = (request, context) => handler(request as T, context);
        }


        public SpeechletService(ISpeechletBase speechlet) {
            this.speechlet = speechlet;

            if (speechlet is IAudioPlayerSpeechletAsync || speechlet is IAudioPlayerSpeechlet) {
                AddHandler<AudioPlayerRequest>(AudioPlayerRequest.TypeName, async (request, context) => {
                    return (speechlet as IAudioPlayerSpeechlet)?.OnAudioPlayer(request, context) ??
                        await (speechlet as IAudioPlayerSpeechletAsync).OnAudioPlayerAsync(request, context);
                });

                AddHandler<PlaybackControllerRequest>(PlaybackControllerRequest.TypeName, async (request, context) => {
                    return (speechlet as IAudioPlayerSpeechlet)?.OnPlaybackController(request, context) ??
                        await (speechlet as IAudioPlayerSpeechletAsync).OnPlaybackControllerAsync(request, context);
                });

                AddHandler<SystemExceptionEncounteredRequest>(SystemRequest.TypeName, async (request, context) => {
                    (speechlet as IAudioPlayerSpeechlet)?.OnSystemExceptionEncountered(request, context);
                    await (speechlet as IAudioPlayerSpeechletAsync).OnSystemExceptionEncounteredAsync(request, context);
                    return null;
                });
            }

            if (speechlet is IDisplaySpeechletAsync) {
                AddHandler<DisplayRequest>(DisplayRequest.TypeName, async (request, context) => {
                    return (speechlet as IDisplaySpeechlet)?.OnDisplay(request, context) ??
                        await (speechlet as IDisplaySpeechletAsync).OnDisplayAsync(request, context);
                });
            }
        }


        /// <summary>
        /// Processes Alexa request AND validates request signature
        /// </summary>
        /// <param name="httpRequest"></param>
        /// <returns></returns>
        public async Task<HttpResponseMessage> GetResponseAsync(HttpRequestMessage httpRequest) {
            string chainUrl = null;
            if (httpRequest.Headers.Contains(Sdk.SIGNATURE_CERT_URL_REQUEST_HEADER)) {
                chainUrl = httpRequest.Headers.GetValues(Sdk.SIGNATURE_CERT_URL_REQUEST_HEADER).FirstOrDefault(x => !string.IsNullOrEmpty(x));
            }

            string signature = null;
            if (httpRequest.Headers.Contains(Sdk.SIGNATURE_REQUEST_HEADER)) {
                signature = httpRequest.Headers.GetValues(Sdk.SIGNATURE_REQUEST_HEADER).FirstOrDefault(x => !string.IsNullOrEmpty(x));
            }

            var content = await httpRequest.Content.ReadAsStringAsync();

            try {
                var alexaRequest = await GetRequestAsync(content, chainUrl, signature);
                var alexaResponse = await ProcessRequestAsync(alexaRequest);
                var json = alexaResponse?.ToJson();

                return (json == null) ?
                    new HttpResponseMessage(HttpStatusCode.InternalServerError) :
                    new HttpResponseMessage(HttpStatusCode.OK) {
                        Content = new StringContent(json, Encoding.UTF8, "application/json")
                    };
            }
            catch (SpeechletValidationException ex) {
                return new HttpResponseMessage(HttpStatusCode.BadRequest) {
                    ReasonPhrase = ex.ValidationResult.ToString()
                };
            }
        }


        public async Task<SpeechletRequestEnvelope> GetRequestAsync(string content, string chainUrl, string signature) {
            var validationResult = SpeechletRequestValidationResult.OK;

            if (string.IsNullOrEmpty(chainUrl)) {
                validationResult |= SpeechletRequestValidationResult.NoCertHeader;
            }

            if (string.IsNullOrEmpty(signature)) {
                validationResult |= SpeechletRequestValidationResult.NoSignatureHeader;
            }

            // attempt to verify signature only if we were able to locate certificate and signature headers
            if (validationResult == SpeechletRequestValidationResult.OK) {
                var alexaBytes = Encoding.UTF8.GetBytes(content);

                if (!await SpeechletRequestSignatureVerifier.VerifyRequestSignatureAsync(alexaBytes, signature, chainUrl)) {
                    validationResult |= SpeechletRequestValidationResult.InvalidSignature;
                }
            }

            SpeechletRequestEnvelope result = null;
            try {
                result = SpeechletRequestEnvelope.FromJson(content);
            }
            catch (SpeechletValidationException ex) {
                validationResult |= ex.ValidationResult;
            }
            catch (Exception ex)
            when (ex is JsonReaderException || ex is InvalidCastException || ex is FormatException) {
                validationResult |= SpeechletRequestValidationResult.InvalidJson;
            }

            var success = false;

            // attempt to verify timestamp only if we were able to parse request body
            if (result != null) {
                var now = DateTime.UtcNow; // reference time for this request

                if (!SpeechletRequestTimestampVerifier.VerifyRequestTimestamp(result, now)) {
                    validationResult |= SpeechletRequestValidationResult.InvalidTimestamp;
                }

                if (!string.IsNullOrEmpty(ApplicationId) && result.Context.System.Application.Id != ApplicationId) {
                    validationResult |= SpeechletRequestValidationResult.InvalidApplicationId;
                }

                success = speechlet?.OnRequestValidation(validationResult, now, result) ?? (validationResult == SpeechletRequestValidationResult.OK);
            }

            if (!success) {
                throw new SpeechletValidationException(validationResult);
            }

            return result;
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="requestEnvelope"></param>
        /// <returns></returns>
        public async Task<SpeechletResponseEnvelope> ProcessRequestAsync(SpeechletRequestEnvelope requestEnvelope) {
            var session = requestEnvelope.Session;
            var context = requestEnvelope.Context;
            var request = requestEnvelope.Request;

            var response = !(request is ExtendedSpeechletRequest) ?
                await HandleStandardRequestAsync(request, session, context) :
                await HandleExtendedRequestAsync(request as ExtendedSpeechletRequest, context);

            if (response == null) {
                response = new SpeechletResponse();
            }

            var responseEnvelope = new SpeechletResponseEnvelope {
                Version = requestEnvelope.Version,
                Response = response,
                SessionAttributes = session?.Attributes
            };

            return responseEnvelope;
        }


        /// <summary>
        /// 
        /// </summary>
        private async Task<ISpeechletResponse> HandleStandardRequestAsync(
            SpeechletRequest request, Session session, Context context) {
            
            #pragma warning disable 612, 618
            if (session != null) {
                // Do session management prior to calling OnSessionStarted and OnIntentAsync 
                // to allow dev to change session values if behavior is not desired
                DoSessionManagement(request as IntentRequest, session);

                if (session.IsNew) {
                    var sessionStartedRequest = new SessionStartedRequest(request);
                    if (speechlet is ISpeechletWithContext)
                        (speechlet as ISpeechletWithContext).OnSessionStarted(sessionStartedRequest, session, context);
                    else if (speechlet is ISpeechletWithContextAsync)
                        await (speechlet as ISpeechletWithContextAsync).OnSessionStartedAsync(sessionStartedRequest, session, context);
                    else if (speechlet is ISpeechlet)
                        (speechlet as ISpeechlet).OnSessionStarted(sessionStartedRequest, session);
                    else if (speechlet is ISpeechletAsync)
                        await (speechlet as ISpeechletAsync).OnSessionStartedAsync(sessionStartedRequest, session);
                }
            }
            #pragma warning restore 612, 618

            #pragma warning disable 612, 618
            if (request is LaunchRequest) {
                // process launch request
                if (speechlet is ISpeechletWithContext)
                    return (speechlet as ISpeechletWithContext).OnLaunch(request as LaunchRequest, session, context);
                else if (speechlet is ISpeechletWithContextAsync)
                    return await (speechlet as ISpeechletWithContextAsync).OnLaunchAsync(request as LaunchRequest, session, context);
                else if (speechlet is ISpeechlet)
                    return (speechlet as ISpeechlet).OnLaunch(request as LaunchRequest, session);
                else if (speechlet is ISpeechletAsync)
                    return await (speechlet as ISpeechletAsync).OnLaunchAsync(request as LaunchRequest, session);
            }
            else if (request is IntentRequest) {
                // process intent request
                if (speechlet is ISpeechletWithContext)
                    return (speechlet as ISpeechletWithContext).OnIntent(request as IntentRequest, session, context);
                else if (speechlet is ISpeechletWithContextAsync)
                    return await (speechlet as ISpeechletWithContextAsync).OnIntentAsync(request as IntentRequest, session, context);
                else if (speechlet is ISpeechlet)
                    return (speechlet as ISpeechlet).OnIntent(request as IntentRequest, session);
                else if (speechlet is ISpeechletAsync)
                    return await (speechlet as ISpeechletAsync).OnIntentAsync(request as IntentRequest, session);
            }
            else if (request is SessionEndedRequest) {
                // process session ended request
                if (speechlet is ISpeechletWithContext)
                    (speechlet as ISpeechletWithContext).OnSessionEnded(request as SessionEndedRequest, session, context);
                else if (speechlet is ISpeechletWithContextAsync)
                    await (speechlet as ISpeechletWithContextAsync).OnSessionEndedAsync(request as SessionEndedRequest, session, context);
                else if (speechlet is ISpeechlet)
                    (speechlet as ISpeechlet).OnSessionEnded(request as SessionEndedRequest, session);
                else if (speechlet is ISpeechletAsync)
                    await (speechlet as ISpeechletAsync).OnSessionEndedAsync(request as SessionEndedRequest, session);
            }
            #pragma warning restore 612, 618

            return null;
        }


        private async Task<ISpeechletResponse> HandleExtendedRequestAsync(ExtendedSpeechletRequest request, Context context) {
            return handlers.ContainsKey(request.Type) ? (await handlers[request.Type].Invoke(request, context)) : null;
        }


        /// <summary>
        /// 
        /// </summary>
        private void DoSessionManagement(IntentRequest request, Session session) {
            if (request == null) return;

            if (session.Attributes == null) {
                session.Attributes = new Dictionary<string, string>();
            }

            if (session.IsNew) {
                session.Attributes[Session.INTENT_SEQUENCE] = request.Intent.Name;
            }
            else {
                // if the session was started as a result of a launch request 
                // a first intent isn't yet set, so set it to the current intent
                if (!session.Attributes.ContainsKey(Session.INTENT_SEQUENCE)) {
                    session.Attributes[Session.INTENT_SEQUENCE] = request.Intent.Name;
                }
                else {
                    session.Attributes[Session.INTENT_SEQUENCE] += Session.SEPARATOR + request.Intent.Name;
                }
            }

            // Auto-session management: copy all slot values from current intent into session
            foreach (var slot in request.Intent.Slots.Values) {
                session.Attributes[slot.Name] = slot.Value;
            }
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletValidationException.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using AlexaSkillsKit.Authentication;
using System;

namespace AlexaSkillsKit.Speechlet
{
    public class SpeechletValidationException : SpeechletException
    {
        public SpeechletRequestValidationResult ValidationResult { get; }

        public SpeechletValidationException(SpeechletRequestValidationResult validationResult) : base() {
            ValidationResult = validationResult;
        }

        public SpeechletValidationException(SpeechletRequestValidationResult validationResult, string message) : base(message) {
            ValidationResult = validationResult;
        }

        public SpeechletValidationException(SpeechletRequestValidationResult validationResult, string message, Exception cause) : base(message, cause) {
            ValidationResult = validationResult;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SupportedInterfaces.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System.Collections.Generic;
using Newtonsoft.Json.Linq;
using System.Linq;
using AlexaSkillsKit.Interfaces.Display;
using AlexaSkillsKit.Interfaces.AudioPlayer;
using AlexaSkillsKit.Json;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#system-object
    /// </summary>
    public class SupportedInterfaces : Dictionary<string, ISpeechletInterface>
    {
        /// <summary>
        /// Register supported interfaces for deserialization
        /// </summary>
        static SupportedInterfaces() {
            Deserializer<ISpeechletInterface>.RegisterDeserializer("Display", DisplayInterface.FromJson);
            Deserializer<ISpeechletInterface>.RegisterDeserializer("AudioPlayer", AudioPlayerInterface.FromJson);
        }

        public static SupportedInterfaces FromJson(JObject json) {
            if (json == null) return null;

            var dictionary = json.Children<JProperty>()
                .ToDictionary(x => x.Name, x => Deserializer<ISpeechletInterface>.FromJson(x));

            return new SupportedInterfaces(dictionary);
        }

        private SupportedInterfaces(IDictionary<string, ISpeechletInterface> dictionary) : base(dictionary) { }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SystemExceptionEncounteredRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#system-exceptionencountered
    /// </summary>
    public class SystemExceptionEncounteredRequest : SystemRequest
    {
        public SystemExceptionEncounteredRequest(string subtype, JObject json) : base(subtype, json) {
            Error = Error.FromJson(json.Value<JObject>("error"));
            Cause = Cause.FromJson(json.Value<JObject>("cause"));
        }

        public Error Error {
            get;
            private set;
        }

        public Cause Cause {
            get;
            private set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SystemRequest.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html#system-exceptionencountered
    /// </summary>
    public class SystemRequest : ExtendedSpeechletRequest
    {
        public static readonly string TypeName = "System";

        public SystemRequest(string subtype, JObject json) : base(TypeName, subtype, json) {
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/Speechlet/SystemState.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html#system-object
    /// </summary>
    public class SystemState : ISpeechletInterfaceState
    {
        public static SystemState FromJson(JObject json) {
            if (json == null) return null;

            return new SystemState {
                Application = Application.FromJson(json.Value<JObject>("application")),
                User = User.FromJson(json.Value<JObject>("user")),
                Device = Device.FromJson(json.Value<JObject>("device")),
                Person = Person.FromJson(json.Value<JObject>("person")),
                ApiEndpoint = json.Value<string>("apiEndpoint"),
                ApiAccessToken = json.Value<string>("apiAccessToken")
            };
        }

        public Application Application {
            get;
            private set;
        }

        public User User {
            get;
            private set;
        }

        public Person Person {
            get;
            private set;
        }

        public Device Device {
            get;
            private set;
        }

        public string ApiEndpoint {
            get;
            private set;
        }

        public string ApiAccessToken {
            get;
            private set;
        }
    }
}


================================================
FILE: AlexaSkillsKit.Lib/Speechlet/User.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using Newtonsoft.Json.Linq;

namespace AlexaSkillsKit.Speechlet
{
    public class User
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static User FromJson(JObject json) {
            return new User {
                Id = json.Value<string>("userId"),
                AccessToken = json.Value<string>("accessToken")
            };
        }

        public virtual string Id {
            get;
            set;
        }

        public virtual string AccessToken {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/AskForPermissionsConsentCard.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System.Collections.Generic;

namespace AlexaSkillsKit.UI
{
    /// <summary>
    /// https://developer.amazon.com/docs/custom-skills/device-address-api.html#permissions-card
    /// </summary>
    public class AskForPermissionsConsentCard : Card
    {
        public override string Type {
            get { return "AskForPermissionsConsent"; }
        }

        public virtual IEnumerable<string> Permissions {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/Card.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;

namespace AlexaSkillsKit.UI
{
    public abstract class Card
    {
        public abstract string Type {
            get;
        }    
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/Image.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Collections.Generic;

namespace AlexaSkillsKit.UI
{
    public class Image
    {
        public virtual string SmallImageUrl {
            get;
            set;
        }

        public virtual string LargeImageUrl {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/LinkAccountCard.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Collections.Generic;

namespace AlexaSkillsKit.UI
{
    public class LinkAccountCard : Card
    {
        public override string Type {
            get { return "LinkAccount"; }
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/OutputSpeech.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Collections.Generic;

namespace AlexaSkillsKit.UI
{
    public abstract class OutputSpeech
    {
        public abstract string Type {
            get;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/PlainTextOutputSpeech.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.UI
{
    public class PlainTextOutputSpeech : OutputSpeech
    {
        public override string Type {
            get { return "PlainText";  }
        }

        public virtual string Text {
            get;
            set;
        }
        
        public static implicit operator PlainTextOutputSpeech(string spokenText)
        {
            return new PlainTextOutputSpeech()
            {
                Text = spokenText
            };
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/Reprompt.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Collections.Generic;

namespace AlexaSkillsKit.UI
{
    public class Reprompt
    {
        public OutputSpeech OutputSpeech {
            get;
            set;
        }
    }
}


================================================
FILE: AlexaSkillsKit.Lib/UI/SimpleCard.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.UI
{
    public class SimpleCard : Card
    {
        public override string Type {
            get { return "Simple"; }
        }

        public virtual string Title {
            get;
            set;
        }

        public virtual string Content {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/SsmlOutputSpeech.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

using System;
using System.Collections.Generic;

namespace AlexaSkillsKit.UI
{
    public class SsmlOutputSpeech : OutputSpeech
    {
        public override string Type {
            get { return "SSML";  }
        }

        public virtual string Ssml {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/UI/StandardCard.cs
================================================
// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.

namespace AlexaSkillsKit.UI
{
    public class StandardCard : Card
    {
        public override string Type {
            get { return "Standard"; }
        }

        public virtual string Title {
            get;
            set;
        }

        public virtual string Text {
            get;
            set;
        }

        public virtual Image Image {
            get;
            set;
        }
    }
}

================================================
FILE: AlexaSkillsKit.Lib/app.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

================================================
FILE: AlexaSkillsKit.Lib/packages.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="BouncyCastle" version="1.8.1" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" userInstalled="true" />
  <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" userInstalled="true" />
</packages>

================================================
FILE: AlexaSkillsKit.Sample/AlexaSkillsKit.Sample.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>
    </ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{9FDEF793-5832-4D37-B0D5-62C55AB1C12E}</ProjectGuid>
    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Sample</RootNamespace>
    <AssemblyName>Sample</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <MvcBuildViews>false</MvcBuildViews>
    <UseIISExpress>true</UseIISExpress>
    <IISExpressSSLPort />
    <IISExpressAnonymousAuthentication />
    <IISExpressWindowsAuthentication />
    <IISExpressUseClassicPipelineMode />
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
    <RestorePackages>true</RestorePackages>
    <UseGlobalApplicationHostFile />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
      <HintPath>..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.AspNet.Identity.EntityFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.Identity.EntityFramework.2.2.1\lib\net45\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.AspNet.Identity.Owin, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.Identity.Owin.2.2.1\lib\net45\Microsoft.AspNet.Identity.Owin.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="Microsoft.Owin, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.3.0.1\lib\net45\Microsoft.Owin.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Owin.Host.SystemWeb, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Host.SystemWeb.3.0.1\lib\net45\Microsoft.Owin.Host.SystemWeb.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Owin.Security, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.3.0.1\lib\net45\Microsoft.Owin.Security.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Owin.Security.Cookies, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.Cookies.3.0.1\lib\net45\Microsoft.Owin.Security.Cookies.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Owin.Security.Facebook, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.Facebook.3.0.1\lib\net45\Microsoft.Owin.Security.Facebook.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Owin.Security.Google, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.Google.3.0.1\lib\net45\Microsoft.Owin.Security.Google.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Owin.Security.MicrosoftAccount, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.MicrosoftAccount.3.0.1\lib\net45\Microsoft.Owin.Security.MicrosoftAccount.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Owin.Security.OAuth, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.OAuth.3.0.1\lib\net45\Microsoft.Owin.Security.OAuth.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Owin.Security.Twitter, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.Twitter.3.0.1\lib\net45\Microsoft.Owin.Security.Twitter.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
    </Reference>
    <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="NLog, Version=3.2.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
      <HintPath>..\packages\NLog.3.2.1\lib\net45\NLog.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Owin">
      <HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.ComponentModel.DataAnnotations" />
    <Reference Include="System.Core" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="System.Net.Http.Formatting">
      <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web" />
    <Reference Include="System.Web.Abstractions" />
    <Reference Include="System.Web.ApplicationServices" />
    <Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web.Http.Owin, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web.Optimization">
      <HintPath>..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll</HintPath>
    </Reference>
    <Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Web.Routing" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Runtime.Serialization" />
    <Reference Include="System.Net.Http">
    </Reference>
    <Reference Include="System.Net.Http.WebRequest">
    </Reference>
    <Reference Include="WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath>
      <Private>True</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="App_Start\BundleConfig.cs" />
    <Compile Include="App_Start\FilterConfig.cs" />
    <Compile Include="App_Start\IdentityConfig.cs" />
    <Compile Include="App_Start\RouteConfig.cs" />
    <Compile Include="App_Start\Startup.Auth.cs" />
    <Compile Include="App_Start\WebApiConfig.cs" />
    <Compile Include="Areas\HelpPage\ApiDescriptionExtensions.cs" />
    <Compile Include="Areas\HelpPage\App_Start\HelpPageConfig.cs" />
    <Compile Include="Areas\HelpPage\Controllers\HelpController.cs" />
    <Compile Include="Areas\HelpPage\HelpPageAreaRegistration.cs" />
    <Compile Include="Areas\HelpPage\HelpPageConfigurationExtensions.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\CollectionModelDescription.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\ComplexTypeModelDescription.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\DictionaryModelDescription.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\EnumTypeModelDescription.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\EnumValueDescription.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\IModelDocumentationProvider.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\KeyValuePairModelDescription.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\ModelDescription.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\ModelDescriptionGenerator.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\ModelNameAttribute.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\ModelNameHelper.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\ParameterAnnotation.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\ParameterDescription.cs" />
    <Compile Include="Areas\HelpPage\ModelDescriptions\SimpleTypeModelDescription.cs" />
    <Compile Include="Areas\HelpPage\Models\HelpPageApiModel.cs" />
    <Compile Include="Areas\HelpPage\SampleGeneration\HelpPageSampleGenerator.cs" />
    <Compile Include="Areas\HelpPage\SampleGeneration\HelpPageSampleKey.cs" />
    <Compile Include="Areas\HelpPage\SampleGeneration\ImageSample.cs" />
    <Compile Include="Areas\HelpPage\SampleGeneration\InvalidSample.cs" />
    <Compile Include="Areas\HelpPage\SampleGeneration\ObjectGenerator.cs" />
    <Compile Include="Areas\HelpPage\SampleGeneration\SampleDirection.cs" />
    <Compile Include="Areas\HelpPage\SampleGeneration\TextSample.cs" />
    <Compile Include="Areas\HelpPage\XmlDocumentationProvider.cs" />
    <Compile Include="Controllers\AccountController.cs" />
    <Compile Include="Controllers\HomeController.cs" />
    <Compile Include="Controllers\ValuesController.cs" />
    <Compile Include="Global.asax.cs">
      <DependentUpon>Global.asax</DependentUpon>
    </Compile>
    <Compile Include="Models\AccountBindingModels.cs" />
    <Compile Include="Models\AccountViewModels.cs" />
    <Compile Include="Models\IdentityModels.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Providers\ApplicationOAuthProvider.cs" />
    <Compile Include="Results\ChallengeResult.cs" />
    <Compile Include="Speechlet\AlexaController.cs" />
    <Compile Include="Speechlet\SampleSessionSpeechlet.cs" />
    <Compile Include="Startup.cs" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="Areas\HelpPage\HelpPage.css" />
    <Content Include="Content\bootstrap.css" />
    <Content Include="Content\bootstrap.min.css" />
    <Content Include="favicon.ico" />
    <Content Include="fonts\glyphicons-halflings-regular.svg" />
    <Content Include="Global.asax" />
    <Content Include="Scripts\bootstrap.js" />
    <Content Include="Scripts\bootstrap.min.js" />
    <Content Include="NLog.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="Areas\HelpPage\Views\Web.config" />
    <Content Include="Areas\HelpPage\Views\Shared\_Layout.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\ResourceModel.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\Index.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\TextSample.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\SimpleTypeModelDescription.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\Samples.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\Parameters.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\ModelDescriptionLink.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\KeyValuePairModelDescription.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\InvalidSample.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\ImageSample.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\HelpPageApiModel.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\EnumTypeModelDescription.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\DictionaryModelDescription.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\ComplexTypeModelDescription.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\CollectionModelDescription.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\DisplayTemplates\ApiGroup.cshtml" />
    <Content Include="Areas\HelpPage\Views\Help\Api.cshtml" />
    <None Include="NLog.xsd">
      <SubType>Designer</SubType>
    </None>
    <None Include="Scripts\jquery-1.10.2.intellisense.js" />
    <Content Include="Scripts\jquery-1.10.2.js" />
    <Content Include="Scripts\jquery-1.10.2.min.js" />
    <None Include="Scripts\jquery.validate-vsdoc.js" />
    <Content Include="Scripts\jquery.validate.js" />
    <Content Include="Scripts\jquery.validate.min.js" />
    <Content Include="Scripts\jquery.validate.unobtrusive.js" />
    <Content Include="Scripts\jquery.validate.unobtrusive.min.js" />
    <Content Include="Scripts\modernizr-2.6.2.js" />
    <Content Include="Scripts\respond.js" />
    <Content Include="Scripts\respond.min.js" />
    <Content Include="Speechlet\SampleSessionUtterances.txt" />
    <Content Include="Web.config" />
    <Content Include="Web.Debug.config">
      <DependentUpon>Web.config</DependentUpon>
    </Content>
    <Content Include="Web.Release.config">
      <DependentUpon>Web.config</DependentUpon>
    </Content>
    <Content Include="Areas\HelpPage\Views\_ViewStart.cshtml" />
    <Content Include="Content\Site.css" />
    <Content Include="Scripts\_references.js" />
    <Content Include="Views\Web.config" />
    <Content Include="Views\_ViewStart.cshtml" />
    <Content Include="Views\Home\Index.cshtml" />
    <Content Include="Views\Shared\Error.cshtml" />
    <Content Include="Views\Shared\_Layout.cshtml" />
    <Content Include="Scripts\jquery-1.10.2.min.map" />
    <Content Include="Speechlet\SampleSessionIntentSchema.json" />
  </ItemGroup>
  <ItemGroup>
    <WCFMetadata Include="Service References\" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="fonts\glyphicons-halflings-regular.woff" />
    <Content Include="fonts\glyphicons-halflings-regular.ttf" />
    <Content Include="fonts\glyphicons-halflings-regular.eot" />
    <Content Include="packages.config">
      <SubType>Designer</SubType>
    </Content>
    <None Include="Project_Readme.html" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\AlexaSkillsKit.Lib\AlexaSkillsKit.Lib.csproj">
      <Project>{0ec882a8-aaca-4bd5-b449-72f20fdb8586}</Project>
      <Name>AlexaSkillsKit.Lib</Name>
    </ProjectReference>
  </ItemGroup>
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
  </Target>
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
        <WebProjectProperties>
          <UseIIS>True</UseIIS>
          <AutoAssignPort>True</AutoAssignPort>
          <DevelopmentServerPort>58080</DevelopmentServerPort>
          <DevelopmentServerVPath>/</DevelopmentServerVPath>
          <IISUrl>http://localhost:58080/</IISUrl>
          <NTLMAuthentication>False</NTLMAuthentication>
          <UseCustomServer>False</UseCustomServer>
          <CustomServerUrl>
          </CustomServerUrl>
          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
        </WebProjectProperties>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target> -->
</Project>

================================================
FILE: AlexaSkillsKit.Sample/App_Start/BundleConfig.cs
================================================
using System.Web;
using System.Web.Optimization;

namespace Sample
{
    public class BundleConfig
    {
        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
        public static void RegisterBundles(BundleCollection bundles) {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));

            // Use the development version of Modernizr to develop with and learn from. Then, when you're
            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
                      "~/Scripts/bootstrap.js",
                      "~/Scripts/respond.js"));

            bundles.Add(new StyleBundle("~/Content/css").Include(
                      "~/Content/bootstrap.css",
                      "~/Content/site.css"));
        }
    }
}


================================================
FILE: AlexaSkillsKit.Sample/App_Start/FilterConfig.cs
================================================
using System.Web;
using System.Web.Mvc;

namespace Sample
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
            filters.Add(new HandleErrorAttribute());
        }
    }
}


================================================
FILE: AlexaSkillsKit.Sample/App_Start/IdentityConfig.cs
================================================
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin;
using Sample.Models;

namespace Sample
{
    // Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.

    public class ApplicationUserManager : UserManager<ApplicationUser>
    {
        public ApplicationUserManager(IUserStore<ApplicationUser> store)
            : base(store)
        {
        }

        public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
        {
            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
            // Configure validation logic for usernames
            manager.UserValidator = new UserValidator<ApplicationUser>(manager)
            {
                AllowOnlyAlphanumericUserNames = false,
                RequireUniqueEmail = true
            };
            // Configure validation logic for passwords
            manager.PasswordValidator = new PasswordValidator
            {
                RequiredLength = 6,
                RequireNonLetterOrDigit = true,
                RequireDigit = true,
                RequireLowercase = true,
                RequireUppercase = true,
            };
            var dataProtectionProvider = options.DataProtectionProvider;
            if (dataProtectionProvider != null)
            {
                manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
            }
            return manager;
        }
    }
}


================================================
FILE: AlexaSkillsKit.Sample/App_Start/RouteConfig.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Sample
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}


================================================
FILE: AlexaSkillsKit.Sample/App_Start/Startup.Auth.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.Google;
using Microsoft.Owin.Security.OAuth;
using Owin;
using Sample.Providers;
using Sample.Models;

namespace Sample
{
    public partial class Startup
    {
        public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

        public static string PublicClientId { get; private set; }

        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
        public void ConfigureAuth(IAppBuilder app)
        {
            // Configure the db context and user manager to use a single instance per request
            app.CreatePerOwinContext(ApplicationDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

            // Enable the application to use a cookie to store information for the signed in user
            // and to use a cookie to temporarily store information about a user logging in with a third party login provider
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // Configure the application for OAuth based flow
            PublicClientId = "self";
            OAuthOptions = new OAuthAuthorizationServerOptions
            {
                TokenEndpointPath = new PathString("/Token"),
                Provider = new ApplicationOAuthProvider(PublicClientId),
                AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
                AllowInsecureHttp = true
            };

            // Enable the application to use bearer tokens to authenticate users
            app.UseOAuthBearerTokens(OAuthOptions);

            // Uncomment the following lines to enable logging in with third party login providers
            //app.UseMicrosoftAccountAuthentication(
            //    clientId: "",
            //    clientSecret: "");

            //app.UseTwitterAuthentication(
            //    consumerKey: "",
            //    consumerSecret: "");

            //app.UseFacebookAuthentication(
            //    appId: "",
            //    appSecret: "");

            //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
            //{
            //    ClientId = "",
            //    ClientSecret = ""
            //});
        }
    }
}


================================================
FILE: AlexaSkillsKit.Sample/App_Start/WebApiConfig.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using Microsoft.Owin.Security.OAuth;
using Newtonsoft.Json.Serialization;

namespace Sample
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Configure Web API to use only bearer token authentication.
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}


================================================
FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ApiDescriptionExtensions.cs
================================================
using System;
using System.Text;
using System.Web;
using System.Web.Http.Description;

namespace Sample.Areas.HelpPage
{
    public static class ApiDescriptionExtensions
    {
        /// <summary>
        /// Generates an URI-friendly ID for the <see cref="ApiDescription"/>. E.g. "Get-Values-id_name" instead of "GetValues/{id}?name={name}"
        /// </summary>
        /// <param name="description">The <see cref="ApiDescription"/>.</param>
        /// <returns>The ID as a string.</returns>
        public static string GetFriendlyId(this ApiDescription description)
        {
            string path = description.RelativePath;
            string[] urlParts = path.Split('?');
            string localPath = urlParts[0];
            string queryKeyString = null;
            if (urlParts.Length > 1)
            {
                string query = urlParts[1];
                string[] queryKeys = HttpUtility.ParseQueryString(query).AllKeys;
                queryKeyString = String.Join("_", queryKeys);
            }

            StringBuilder friendlyPath = new StringBuilder();
            friendlyPath.AppendFormat("{0}-{1}",
                description.HttpMethod.Method,
                localPath.Replace("/", "-").Replace("{", String.Empty).Replace("}", String.Empty));
            if (queryKeyString != null)
            {
                friendlyPath.AppendFormat("_{0}", queryKeyString.Replace('.', '-'));
            }
            return friendlyPath.ToString();
        }
    }
}

================================================
FILE: AlexaSkillsKit.Sample/Areas/HelpPage/App_Start/HelpPageConfig.cs
================================================
// Uncomment the following to provide samples for PageResult<T>. Must also add the Microsoft.AspNet.WebApi.OData
// package to your project.
////#define Handle_PageResultOfT

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Net.Http.Headers;
using System.Reflection;
using System.Web;
using System.Web.Http;
#if Handle_PageResultOfT
using System.Web.Http.OData;
#endif

namespace Sample.Areas.HelpPage
{
    /// <summary>
    /// Use this class to customize the Help Page.
    /// For example you can set a custom <see cref="System.Web.Http.Description.IDocumentationProvider"/> to supply the documentation
    /// or you can provide the samples for the requests/responses.
    /// </summary>
    public static class HelpPageConfig
    {
        [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters",
            MessageId = "Sample.Areas.HelpPage.TextSample.#ctor(System.String)",
            Justification = "End users may choose to merge this string with existing localized resources.")]
        [SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly",
            MessageId = "bsonspec",
            Justification = "Part of a URI.")]
        public static void Register(HttpConfiguration config)
        {
            //// Uncomment the following to use the documentation from XML documentation file.
            //config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")));

            //// Uncomment the following to use "sample string" as the sample for all actions that have string as the body parameter or return type.
            //// Also, the string arrays will be used for IEnumerable<string>. The sample objects will be serialized into different media type 
            //// formats by the available formatters.
            //config.SetSampleObjects(new Dictionary<Type, object>
            //{
            //    {typeof(string), "sample string"},
            //    {typeof(IEnumerable<string>), new string[]{"sample 1", "sample 2"}}
            //});

            // Extend the following to provide factories for types not handled automatically (those lacking parameterless
            // constructors) or for which you prefer to use non-default property values. Line below provides a fallback
            // since automatic handling will fail and GeneratePageResult handles only a single type.
#if Handle_PageResultOfT
            config.GetHelpPageSampleGenerator().SampleObjectFactories.Add(GeneratePageResult);
#endif

            // Extend the following to use a preset object directly as the sample for all actions that support a media
            // type, regardless of the body parameter or return type. The lines below avoid display of binary content.
            // The BsonMediaTypeFormatter (if available) is not used to serialize the TextSample object.
            config.SetSampleForMediaType(
                new TextSample("Binary JSON content. See http://bsonspec.org for details."),
                new MediaTypeHeaderValue("application/bson"));

            //// Uncomment the following to use "[0]=foo&[1]=bar" directly as the sample for all actions that support form URL encoded format
            //// and have IEnumerable<string> as the body parameter or return type.
            //config.SetSampleForType("[0]=foo&[1]=bar", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(IEnumerable<string>));

            //// Uncomment the following to use "1234" directly as the request sample for media type "text/plain" on the controller named "Values"
            //// and action named "Put".
            //config.SetSampleRequest("1234", new MediaTypeHeaderValue("text/plain"), "Values", "Put");

            //// Uncomment the following to use the image on "../images/aspNetHome.png" directly as the response sample for media type "image/png"
            //// on the controller named "Values" and action named "Get" with parameter "id".
            //config.SetSampleResponse(new ImageSample("../images/aspNetHome.png"), new MediaTypeHeaderValue("image/png"), "Values", "Get", "id");

            //// Uncomment the following to correct the sample request when the action expects an HttpRequestMessage with ObjectContent<string>.
            //// The sample will be generated as if the controller named "Values" and action named "Get" were having string as the body parameter.
            //config.SetActualRequestType(typeof(string), "Values", "Get");

            //// Uncomment the following to correct the sample response when the action returns an HttpResponseMessage with ObjectContent<string>.
            //// The sample will be generated as if the controller named "Values" and action named "Post" were returning a string.
            //config.SetActualResponseType(typeof(string), "Values", "Post");
        }

#if Handle_PageResultOfT
        private static object GeneratePageResult(HelpPageSampleGenerator sampleGenerator, Type type)
        {
            if (type.IsGenericType)
            {
                Type openGenericType = type.GetGenericTypeDefinition();
                if (openGenericType == typeof(PageResult<>))
                {
                    // Get the T in PageResult<T>
                    Type[] typeParameters = type.GetGenericArguments();
                    Debug.Assert(typeParameters.Length == 1);

                    // Create an enumeration to pass as the first parameter to the PageResult<T> constuctor
                    Type itemsType = typeof(List<>).MakeGenericType(typeParameters);
                    object items = sampleGenerator.GetSampleObject(itemsType);

                    // Fill in the other information needed to invoke the PageResult<T> constuctor
                    Type[] parameterTypes = new Type[] { itemsType, typeof(Uri), typeof(long?), };
                    object[] parameters = new object[] { items, null, (long)ObjectGenerator.DefaultCollectionSize, };

                    // Call PageResult(IEnumerable<T> items, Uri nextPageLink, long? count) constructor
                    ConstructorInfo constructor = type.GetConstructor(parameterTypes);
                    return constructor.Invoke(parameters);
                }
            }

            return null;
        }
#endif
    }
}

================================================
FILE: AlexaSkillsKit.Sample/Areas/HelpPage/Controllers/HelpController.cs
================================================
using System;
using System.Web.Http;
using System.Web.Mvc;
using Sample.Areas.HelpPage.ModelDescriptions;
using Sample.Areas.HelpPage.Models;

namespace Sample.Areas.HelpPage.Controllers
{
    /// <summary>
    /// The controller that will handle requests for the help page.
    /// </summary>
    public class HelpController : Controller
    {
        private const string ErrorViewName = "Error";

        public HelpController()
            : this(GlobalConfiguration.Configuration)
        {
        }

        public HelpController(HttpConfiguration config)
        {
            Configuration = config;
        }

        public HttpConfiguration Configuration { get; private set; }

        public ActionResult Index()
        {
            ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();
            return View(Configuration.Services.GetApiExplorer().ApiDescriptions);
        }

        public ActionResult Api(string apiId)
        {
            if (!String.IsNullOrEmpty(apiId))
            {
                HelpPageApiModel apiModel = Configuration.GetHelpPageApiModel(apiId);
                if (apiModel != null)
                {
                    return View(apiModel);
                }
            }

            return View(ErrorViewName);
        }

        public ActionResult ResourceModel(string modelName)
        {
            if (!String.IsNullOrEmpty(modelName))
            {
                ModelDescriptionGenerator modelDescriptionGenerator = Configuration.GetModelDescriptionGenerator();
                ModelDescription modelDescription;
                if (modelDescriptionGenerator.GeneratedModels.TryGetValue(modelName, out modelDescription))
                {
                    return View(modelDescription);
                }
            }

            return View(ErrorViewName);
        }
    }
}

================================================
FILE: AlexaSkillsKit.Sample/Areas/HelpPage/HelpPage.css
================================================
.help-page h1,
.help-page .h1,
.help-page h2,
.help-page .h2,
.help-page h3,
.help-page .h3,
#body.help-page,
.help-page-table th,
.help-page-table pre,
.help-page-table p {
    font-family: "Segoe UI Light", Frutiger, "Frutiger Linotype", "Dejavu Sans", "Helvetica Neue", Arial, sans-serif;
}

.help-page pre.wrapped {
    white-space: -moz-pre-wrap;
    white-space: -pre-wrap;
    white-space: -o-pre-wrap;
    white-space: pre-wrap;
}

.help-page .warning-message-container {
    margin-top: 20px;
    padding: 0 10px;
    color: #525252;
    background: #EFDCA9; 
    border: 1px solid #CCCCCC;
}

.help-page-table {
    width: 100%;
    border-collapse: collapse;
    text-align: left;
    margin: 0px 0px 20px 0px;
    border-top: 1px solid #D4D4D4;
}

.help-page-table th {
    text-align: left;
    font-weight: bold;
    border-bottom: 1px solid #D4D4D4;
    padding: 5px 6px 5px 6px;
}

.help-page-table td {
    border-bottom: 1px solid #D4D4D4;
    padding: 10px 8px 10px 8px;
    vertical-align: top;
}

.help-page-table pre,
.help-page-table p {
    margin: 0px;
    padding: 0px;
    font-family: inherit;
    font-size: 100%;
}

.help-page-table tbody tr:hover td {
    background-color: #F3F3F3;
}

.help-page a:hover {
    background-color: transparent;
}

.help-page .sample-header {
    border: 2px solid #D4D4D4;
    background: #00497E;
    color: #FFFFFF;
    padding: 8px 15px;
    border-bottom: none;
    display: inline-block;
    margin: 10px 0px 0px 0px;
}

.help-page .sample-content {
    display: block;
    border-width: 0;
    padding: 15px 20px;
    background: #FFFFFF;
    border: 2px solid #D4D4D4;
    margin: 0px 0px 10px 0px;
}

.help-page .api-name {
    width: 40%;
}

.help-page .api-documentation {
    width: 60%;
}

.help-page .parameter-name {
    width: 20%;
}

.help-page .parameter-documentation {
    width: 40%;
}

.help-page .parameter-type {
    width: 20%;
}

.help-page .parameter-annotations {
    width: 20%;
}

.help-page h1,
.help-page .h1 {
    font-size: 36px;
    line-height: normal;
}

.help-page h2,
.help-page .h2 {
    font-size: 24px;
}

.help-page h3,
.help-page .h3 {
    font-size: 20px;
}

#body.help-page {
    font-size: 14px;
    line-height: 143%;
    color: #333;
}

.help-page a {
    color: #0000EE;
    text-decoration: none;
}


================================================
FILE: AlexaSkillsKit.Sample/Areas/HelpPage/HelpPageAreaRegistration.cs
================================================
using System.Web.Http;
using System.Web.Mvc;

namespace Sample.Areas.HelpPage
{
    public class HelpPageAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "HelpPage";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "HelpPage_Default",
                "Help/{action}/{apiId}",
                new { controller = "Help", action = "Index", apiId = UrlParameter.Optional });

            HelpPageConfig.Register(GlobalConfiguration.Configuration);
        }
    }
}

================================================
FILE: AlexaSkillsKit.Sample/Areas/HelpPage/HelpPageConfigurationExtensions.cs
================================================
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Description;
using Sample.Areas.HelpPage.ModelDescriptions;
using Sample.Areas.HelpPage.Models;

namespace Sample.Areas.HelpPage
{
    public static class HelpPageConfigurationExtensions
    {
        private const string ApiModelPrefix = "MS_HelpPageApiModel_";

        /// <summary>
        /// Sets the documentation provider for help page.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="documentationProvider">The documentation provider.</param>
        public static void SetDocumentationProvider(this HttpConfiguration config, IDocumentationProvider documentationProvider)
        {
            config.Services.Replace(typeof(IDocumentationProvider), documentationProvider);
        }

        /// <summary>
        /// Sets the objects that will be used by the formatters to produce sample requests/responses.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="sampleObjects">The sample objects.</param>
        public static void SetSampleObjects(this HttpConfiguration config, IDictionary<Type, object> sampleObjects)
        {
            config.GetHelpPageSampleGenerator().SampleObjects = sampleObjects;
        }

        /// <summary>
        /// Sets the sample request directly for the specified media type and action.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="sample">The sample request.</param>
        /// <param name="mediaType">The media type.</param>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="actionName">Name of the action.</param>
        public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName)
        {
            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, new[] { "*" }), sample);
        }

        /// <summary>
        /// Sets the sample request directly for the specified media type and action with parameters.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="sample">The sample request.</param>
        /// <param name="mediaType">The media type.</param>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="actionName">Name of the action.</param>
        /// <param name="parameterNames">The parameter names.</param>
        public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames)
        {
            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, parameterNames), sample);
        }

        /// <summary>
        /// Sets the sample request directly for the specified media type of the action.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="sample">The sample response.</param>
        /// <param name="mediaType">The media type.</param>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="actionName">Name of the action.</param>
        public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName)
        {
            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, new[] { "*" }), sample);
        }

        /// <summary>
        /// Sets the sample response directly for the specified media type of the action with specific parameters.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="sample">The sample response.</param>
        /// <param name="mediaType">The media type.</param>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="actionName">Name of the action.</param>
        /// <param name="parameterNames">The parameter names.</param>
        public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames)
        {
            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, parameterNames), sample);
        }

        /// <summary>
        /// Sets the sample directly for all actions with the specified media type.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="sample">The sample.</param>
        /// <param name="mediaType">The media type.</param>
        public static void SetSampleForMediaType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType)
        {
            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType), sample);
        }

        /// <summary>
        /// Sets the sample directly for all actions with the specified type and media type.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="sample">The sample.</param>
        /// <param name="mediaType">The media type.</param>
        /// <param name="type">The parameter type or return type of an action.</param>
        public static void SetSampleForType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, Type type)
        {
            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, type), sample);
        }

        /// <summary>
        /// Specifies the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> passed to the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
        /// The help page will use this information to produce more accurate request samples.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="type">The type.</param>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="actionName">Name of the action.</param>
        public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName)
        {
            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, new[] { "*" }), type);
        }

        /// <summary>
        /// Specifies the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> passed to the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
        /// The help page will use this information to produce more accurate request samples.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="type">The type.</param>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="actionName">Name of the action.</param>
        /// <param name="parameterNames">The parameter names.</param>
        public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames)
        {
            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, parameterNames), type);
        }

        /// <summary>
        /// Specifies the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> returned as part of the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
        /// The help page will use this information to produce more accurate response samples.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="type">The type.</param>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="actionName">Name of the action.</param>
        public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName)
        {
            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, new[] { "*" }), type);
        }

        /// <summary>
        /// Specifies the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> returned as part of the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
        /// The help page will use this information to produce more accurate response samples.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="type">The type.</param>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="actionName">Name of the action.</param>
        /// <param name="parameterNames">The parameter names.</param>
        public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames)
        {
            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, parameterNames), type);
        }

        /// <summary>
        /// Gets the help page sample generator.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <returns>The help page sample generator.</returns>
        public static HelpPageSampleGenerator GetHelpPageSampleGenerator(this HttpConfiguration config)
        {
            return (HelpPageSampleGenerator)config.Properties.GetOrAdd(
                typeof(HelpPageSampleGenerator),
                k => new HelpPageSampleGenerator());
        }

        /// <summary>
        /// Sets the help page sample generator.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="sampleGenerator">The help page sample generator.</param>
        public static void SetHelpPageSampleGenerator(this HttpConfiguration config, HelpPageSampleGenerator sampleGenerator)
        {
            config.Properties.AddOrUpdate(
                typeof(HelpPageSampleGenerator),
                k => sampleGenerator,
                (k, o) => sampleGenerator);
        }

        /// <summary>
        /// Gets the model description generator.
        /// </summary>
        /// <param name="config">The configuration.</param>
        /// <returns>The <see cref="ModelDescriptionGenerator"/></returns>
        public static ModelDescriptionGenerator GetModelDescriptionGenerator(this HttpConfiguration config)
        {
            return (ModelDescriptionGenerator)config.Properties.GetOrAdd(
                typeof(ModelDescriptionGenerator),
                k => InitializeModelDescriptionGenerator(config));
        }

        /// <summary>
        /// Gets the model that represents an API displayed on the help page. The model is initialized on the first call and cached for subsequent calls.
        /// </summary>
        /// <param name="config">The <see cref="HttpConfiguration"/>.</param>
        /// <param name="apiDescriptionId">The <see cref="ApiDescription"/> ID.</param>
        /// <returns>
        /// An <see cref="HelpPageApiModel"/>
        /// </returns>
        public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)
        {
            object model;
            string modelId = ApiModelPrefix + apiDescriptionId;
            if (!config.Properties.TryGetValue(modelId, out model))
            {
                Collection<ApiDescription> apiDescriptions = config.Services.GetApiExplorer().ApiDescriptions;
                ApiDescription apiDescription = apiDescriptions.FirstOrDefault(api => String.Equals(api.GetFriendlyId(), apiDescriptionId, StringComparison.OrdinalIgnoreCase));
                if (apiDescription != null)
                {
                    model = GenerateApiModel(apiDescription, config);
                    config.Properties.TryAdd(modelId, model);
                }
            }

            return (HelpPageApiModel)model;
        }

        private static HelpPageApiModel GenerateApiModel(ApiDescription apiDescription, HttpConfiguration config)
        {
            HelpPageApiModel apiModel = new HelpPageApiModel()
            {
                ApiDescription = apiDescription,
            };

            ModelDescriptionGenerator modelGenerator = config.GetModelDescriptionGenerator();
            HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator();
            GenerateUriParameters(apiModel, modelGenerator);
            GenerateRequestModelDescription(apiModel, modelGenerator, sampleGenerator);
            GenerateResourceDescription(apiModel, modelGenerator);
            GenerateSamples(apiModel, sampleGenerator);

            return apiModel;
        }

        private static void GenerateUriParameters(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)
        {
            ApiDescription apiDescription = apiModel.ApiDescription;
            foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions)
            {
                if (apiParameter.Source == ApiParameterSource.FromUri)
                {
                    HttpParameterDescriptor parameterDescriptor = apiParameter.ParameterDescriptor;
                    Type parameterType = null;
                    ModelDescription typeDescription = null;
                    ComplexTypeModelDescription complexTypeDescription = null;
                    if (parameterDescriptor != null)
                    {
                        parameterType = parameterDescriptor.ParameterType;
                        typeDescription = modelGenerator.GetOrCreateModelDescription(parameterType);
                        complexTypeDescription = typeDescription as ComplexTypeModelDescription;
                    }

                    // Example:
                    // [TypeConverter(typeof(PointConverter))]
                    // public class Point
                    // {
                    //     public Point(int x, int y)
                    //     {
                    //         X = x;
                    //         Y = y;
                    //     }
                    //     public int X { get; set; }
                    //     public int Y { get; set; }
                    // }
                    // Class Point is bindable with a TypeConverter, so Point will be added to UriParameters collection.
                    // 
                    // public class Point
                    // {
                    //     public int X { get; set; }
                    //     public int Y { get; set; }
                    // }
                    // Regular complex class Point will have properties X and Y added to UriParameters collection.
                    if (complexTypeDescription != null
                        && !IsBindableWithTypeConverter(parameterType))
                    {
                        foreach (ParameterDescription uriParameter in complexTypeDescription.Properties)
                        {
                            apiModel.UriParameters.Add(uriParameter);
                        }
                    }
                    else if (parameterDescriptor != null)
                    {
                        ParameterDescription uriParameter =
                            AddParameterDescription(apiModel, apiParameter, typeDescription);

                        if (!parameterDescriptor.IsOptional)
                        {
                            uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = "Required" });
                        }

                        object defaultValue = parameterDescriptor.DefaultValue;
                        if (defaultValue != null)
                        {
                            uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = "Default value is " + Convert.ToString(defaultValue, CultureInfo.InvariantCulture) });
                        }
                    }
                    else
                    {
                        Debug.Assert(parameterDescriptor == null);

                        // If parameterDescriptor is null, this is an undeclared route parameter which only occurs
                        // when source is FromUri. Ignored in request model and among resource parameters but listed
                        // as a simple string here.
                        ModelDescription modelDescription = modelGenerator.GetOrCreateModelDescription(typeof(string));
                        AddParameterDescription(apiModel, apiParameter, modelDescription);
                    }
                }
            }
        }

        private static bool IsBindableWithTypeConverter(Type parameterType)
        {
            if (parameterType == null)
            {
                return false;
            }

            return TypeDescriptor.GetConverter(parameterType).CanConvertFrom(typeof(string));
        }

        private static ParameterDescription AddParameterDescription(HelpPageApiModel apiModel,
            ApiParameterDescription apiParameter, ModelDescription typeDescription)
        {
            ParameterDescription parameterDescription = new ParameterDescription
            {
                Name = apiParameter.Name,
                Documentation = apiParameter.Documentation,
                TypeDescription = typeDescription,
            };

            apiModel.UriParameters.Add(parameterDescription);
            return parameterDescription;
        }

        private static void GenerateRequestModelDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator, HelpPageSampleGenerator sampleGenerator)
        {
            ApiDescription apiDescription = apiModel.ApiDescription;
            foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions)
            {
                if (apiParameter.Source == ApiParameterSource.FromBody)
                {
                    Type parameterType = apiParameter.ParameterDescriptor.ParameterType;
                    apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType);
                    apiModel.RequestDocumentation = apiParameter.Documentation;
                }
                else if (apiParameter.ParameterDescriptor != null &&
                    apiParameter.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage))
                {
                    Type parameterType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription);

                    if (parameterType != null)
                    {
                        apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType);
                    }
                }
            }
        }

        private static void GenerateResourceDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)
        {
            ResponseDescription response = apiModel.ApiDescription.ResponseDescription;
            Type responseType = response.ResponseType ?? response.DeclaredType;
            if (responseType != null && responseType != typeof(void))
            {
                apiModel.ResourceDescription = modelGenerator.GetOrCreateModelDescription(responseType);
            }
        }

        [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "The exception is recorded as ErrorMessages.")]
        private static void GenerateSamples(HelpPageApiModel apiModel, HelpPageSampleGenerator sampleGenerator)
        {
            try
            {
                foreach (var item in sampleGenerator.GetSampleRequests(apiModel.ApiDescription))
                {
                    apiModel.SampleRequests.Add(item.Key, item.Value);
                    LogInvalidSampleAsError(apiModel, item.Value);
                }

                foreach (var item in sampleGenerator.GetSampleResponses(apiModel.ApiDescription))
                {
                    apiModel.SampleResponses.Add(item.Key, item.Value);
                    LogInvalidSampleAsError(apiModel, item.Value);
                }
            }
            catch (Exception e)
            {
                apiModel.ErrorMessages.Add(String.Format(Cu
Download .txt
gitextract_syntntwh/

├── .gitignore
├── .nuget/
│   ├── AlexaSkillsKit.Lib.nuspec
│   ├── NuGet.Config
│   └── pack.cmd
├── AlexaSkillsKit.Lib/
│   ├── AlexaSkillsKit.Lib.csproj
│   ├── AsyncHelpers.cs
│   ├── Authentication/
│   │   ├── SpeechletRequestSignatureVerifier.cs
│   │   ├── SpeechletRequestTimestampVerifier.cs
│   │   └── SpeechletRequestValidationResult.cs
│   ├── Helpers/
│   │   └── DateTimeHelpers.cs
│   ├── Interfaces/
│   │   ├── AudioPlayer/
│   │   │   ├── AudioItem.cs
│   │   │   ├── AudioItemStream.cs
│   │   │   ├── AudioPlayerInterface.cs
│   │   │   ├── AudioPlayerPlaybackFailedRequest.cs
│   │   │   ├── AudioPlayerRequest.cs
│   │   │   ├── AudioPlayerResponse.cs
│   │   │   ├── AudioPlayerState.cs
│   │   │   ├── Directives/
│   │   │   │   ├── AudioPlayerClearQueueDirective.cs
│   │   │   │   ├── AudioPlayerDirective.cs
│   │   │   │   ├── AudioPlayerPlayDirective.cs
│   │   │   │   └── AudioPlayerStopDirective.cs
│   │   │   ├── IAudioPlayerSpeechlet.cs
│   │   │   ├── IAudioPlayerSpeechletAsync.cs
│   │   │   └── PlaybackControllerRequest.cs
│   │   ├── Dialog/
│   │   │   └── Directives/
│   │   │       ├── DialogConfirmIntentDirective.cs
│   │   │       ├── DialogConfirmSlotDirective.cs
│   │   │       ├── DialogDelegateDirective.cs
│   │   │       ├── DialogDirective.cs
│   │   │       └── DialogElicitSlotDirective.cs
│   │   ├── Display/
│   │   │   ├── Directives/
│   │   │   │   ├── DisplayRenderTemplateDirective.cs
│   │   │   │   └── HintDirective.cs
│   │   │   ├── DisplayImage.cs
│   │   │   ├── DisplayImageSource.cs
│   │   │   ├── DisplayInterface.cs
│   │   │   ├── DisplayRequest.cs
│   │   │   ├── DisplayTemplate.cs
│   │   │   ├── IDisplaySpeechlet.cs
│   │   │   ├── IDisplaySpeechletAsync.cs
│   │   │   ├── ListItem.cs
│   │   │   ├── TextContent.cs
│   │   │   └── TextField.cs
│   │   └── VideoApp/
│   │       ├── Directives/
│   │       │   └── VideoAppLaunchDirective.cs
│   │       ├── VideoItem.cs
│   │       └── VideoItemMetadata.cs
│   ├── Json/
│   │   ├── CamelCasePropertyNamesExceptDictionaryKeysContractResolver.cs
│   │   ├── Deserializer.cs
│   │   ├── SpeechletRequestEnvelope.cs
│   │   ├── SpeechletRequestParser.cs
│   │   ├── SpeechletRequestParserExtensions.cs
│   │   └── SpeechletResponseEnvelope.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Sdk.cs
│   ├── Slu/
│   │   ├── ConfirmationStatusEnum.cs
│   │   ├── Intent.cs
│   │   ├── Resolutions.cs
│   │   ├── ResolutionsPerAuthority.cs
│   │   ├── ResolutionsPerAuthorityStatus.cs
│   │   ├── ResolutionsPerAuthorityValue.cs
│   │   ├── ResolutionsPerAuthorityValueValue.cs
│   │   └── Slot.cs
│   ├── Speechlet/
│   │   ├── Application.cs
│   │   ├── Cause.cs
│   │   ├── Context.cs
│   │   ├── Device.cs
│   │   ├── Directive.cs
│   │   ├── Error.cs
│   │   ├── ExtendedSpeechletRequest.cs
│   │   ├── ISpeechlet.cs
│   │   ├── ISpeechletAsync.cs
│   │   ├── ISpeechletBase.cs
│   │   ├── ISpeechletInterface.cs
│   │   ├── ISpeechletInterfaceState.cs
│   │   ├── ISpeechletResponse.cs
│   │   ├── ISpeechletWithContext.cs
│   │   ├── ISpeechletWithContextAsync.cs
│   │   ├── IntentRequest.cs
│   │   ├── LaunchRequest.cs
│   │   ├── Person.cs
│   │   ├── PlaybackState.cs
│   │   ├── Session.cs
│   │   ├── SessionEndedRequest.cs
│   │   ├── SessionStartedRequest.cs
│   │   ├── Speechlet.cs
│   │   ├── SpeechletAsync.cs
│   │   ├── SpeechletBase.cs
│   │   ├── SpeechletException.cs
│   │   ├── SpeechletRequest.cs
│   │   ├── SpeechletResponse.cs
│   │   ├── SpeechletService.cs
│   │   ├── SpeechletValidationException.cs
│   │   ├── SupportedInterfaces.cs
│   │   ├── SystemExceptionEncounteredRequest.cs
│   │   ├── SystemRequest.cs
│   │   ├── SystemState.cs
│   │   └── User.cs
│   ├── UI/
│   │   ├── AskForPermissionsConsentCard.cs
│   │   ├── Card.cs
│   │   ├── Image.cs
│   │   ├── LinkAccountCard.cs
│   │   ├── OutputSpeech.cs
│   │   ├── PlainTextOutputSpeech.cs
│   │   ├── Reprompt.cs
│   │   ├── SimpleCard.cs
│   │   ├── SsmlOutputSpeech.cs
│   │   └── StandardCard.cs
│   ├── app.config
│   └── packages.config
├── AlexaSkillsKit.Sample/
│   ├── AlexaSkillsKit.Sample.csproj
│   ├── App_Start/
│   │   ├── BundleConfig.cs
│   │   ├── FilterConfig.cs
│   │   ├── IdentityConfig.cs
│   │   ├── RouteConfig.cs
│   │   ├── Startup.Auth.cs
│   │   └── WebApiConfig.cs
│   ├── Areas/
│   │   └── HelpPage/
│   │       ├── ApiDescriptionExtensions.cs
│   │       ├── App_Start/
│   │       │   └── HelpPageConfig.cs
│   │       ├── Controllers/
│   │       │   └── HelpController.cs
│   │       ├── HelpPage.css
│   │       ├── HelpPageAreaRegistration.cs
│   │       ├── HelpPageConfigurationExtensions.cs
│   │       ├── ModelDescriptions/
│   │       │   ├── CollectionModelDescription.cs
│   │       │   ├── ComplexTypeModelDescription.cs
│   │       │   ├── DictionaryModelDescription.cs
│   │       │   ├── EnumTypeModelDescription.cs
│   │       │   ├── EnumValueDescription.cs
│   │       │   ├── IModelDocumentationProvider.cs
│   │       │   ├── KeyValuePairModelDescription.cs
│   │       │   ├── ModelDescription.cs
│   │       │   ├── ModelDescriptionGenerator.cs
│   │       │   ├── ModelNameAttribute.cs
│   │       │   ├── ModelNameHelper.cs
│   │       │   ├── ParameterAnnotation.cs
│   │       │   ├── ParameterDescription.cs
│   │       │   └── SimpleTypeModelDescription.cs
│   │       ├── Models/
│   │       │   └── HelpPageApiModel.cs
│   │       ├── SampleGeneration/
│   │       │   ├── HelpPageSampleGenerator.cs
│   │       │   ├── HelpPageSampleKey.cs
│   │       │   ├── ImageSample.cs
│   │       │   ├── InvalidSample.cs
│   │       │   ├── ObjectGenerator.cs
│   │       │   ├── SampleDirection.cs
│   │       │   └── TextSample.cs
│   │       ├── Views/
│   │       │   ├── Help/
│   │       │   │   ├── Api.cshtml
│   │       │   │   ├── DisplayTemplates/
│   │       │   │   │   ├── ApiGroup.cshtml
│   │       │   │   │   ├── CollectionModelDescription.cshtml
│   │       │   │   │   ├── ComplexTypeModelDescription.cshtml
│   │       │   │   │   ├── DictionaryModelDescription.cshtml
│   │       │   │   │   ├── EnumTypeModelDescription.cshtml
│   │       │   │   │   ├── HelpPageApiModel.cshtml
│   │       │   │   │   ├── ImageSample.cshtml
│   │       │   │   │   ├── InvalidSample.cshtml
│   │       │   │   │   ├── KeyValuePairModelDescription.cshtml
│   │       │   │   │   ├── ModelDescriptionLink.cshtml
│   │       │   │   │   ├── Parameters.cshtml
│   │       │   │   │   ├── Samples.cshtml
│   │       │   │   │   ├── SimpleTypeModelDescription.cshtml
│   │       │   │   │   └── TextSample.cshtml
│   │       │   │   ├── Index.cshtml
│   │       │   │   └── ResourceModel.cshtml
│   │       │   ├── Shared/
│   │       │   │   └── _Layout.cshtml
│   │       │   ├── Web.config
│   │       │   └── _ViewStart.cshtml
│   │       └── XmlDocumentationProvider.cs
│   ├── Content/
│   │   ├── Site.css
│   │   └── bootstrap.css
│   ├── Controllers/
│   │   ├── AccountController.cs
│   │   ├── HomeController.cs
│   │   └── ValuesController.cs
│   ├── Global.asax
│   ├── Global.asax.cs
│   ├── Models/
│   │   ├── AccountBindingModels.cs
│   │   ├── AccountViewModels.cs
│   │   └── IdentityModels.cs
│   ├── NLog.config
│   ├── NLog.xsd
│   ├── Project_Readme.html
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Providers/
│   │   └── ApplicationOAuthProvider.cs
│   ├── Results/
│   │   └── ChallengeResult.cs
│   ├── Scripts/
│   │   ├── _references.js
│   │   ├── bootstrap.js
│   │   ├── jquery-1.10.2.intellisense.js
│   │   ├── jquery-1.10.2.js
│   │   ├── jquery.validate-vsdoc.js
│   │   ├── jquery.validate.js
│   │   ├── jquery.validate.unobtrusive.js
│   │   ├── modernizr-2.6.2.js
│   │   └── respond.js
│   ├── Speechlet/
│   │   ├── AlexaController.cs
│   │   ├── SampleSessionIntentSchema.json
│   │   ├── SampleSessionSpeechlet.cs
│   │   └── SampleSessionUtterances.txt
│   ├── Startup.cs
│   ├── Views/
│   │   ├── Home/
│   │   │   └── Index.cshtml
│   │   ├── Shared/
│   │   │   ├── Error.cshtml
│   │   │   └── _Layout.cshtml
│   │   ├── Web.config
│   │   └── _ViewStart.cshtml
│   ├── Web.Debug.config
│   ├── Web.Release.config
│   ├── Web.config
│   └── packages.config
├── AlexaSkillsKit.Sample.Dialog.AzureFunc/
│   ├── .gitignore
│   ├── AlexaHttpTrigger.cs
│   ├── AlexaSkillsKit.Sample.Dialog.AzureFunc.csproj
│   ├── Handlers/
│   │   ├── DefaultHandler.cs
│   │   ├── IIntentHandler.cs
│   │   ├── IntentHandler.cs
│   │   ├── SampleIntent1Handler.cs
│   │   ├── SampleIntent2Handler.cs
│   │   └── SampleIntent3Handler.cs
│   ├── Helpers/
│   │   ├── Builder/
│   │   │   ├── ISpeechletResponseBuilder.cs
│   │   │   ├── SpeechletResponseBuilder.cs
│   │   │   ├── SpeechletResponseBuilderCardExtentions.cs
│   │   │   └── SpeechletResponseBuilderDialogExtentions.cs
│   │   ├── DialogHelper.cs
│   │   ├── IntentNames.cs
│   │   └── SlotNames.cs
│   ├── Properties/
│   │   └── launchSettings.json
│   ├── SampleSkill.cs
│   ├── SampleSkillFactory.cs
│   └── host.json
├── AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/
│   ├── AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests.csproj
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── SampleIntent1HandlerTests.cs
│   ├── SampleIntent2HandlerTests.cs
│   ├── SampleIntent3HandlerTests.cs
│   ├── TestsBase.cs
│   ├── app.config
│   └── packages.config
├── AlexaSkillsKit.Sample.Dialog.AzureFunc.sln
├── AlexaSkillsKit.Tests/
│   ├── AlexaSkillsKit.Tests.csproj
│   ├── Authentication/
│   │   └── SignatureVerifierTests.cs
│   ├── Helpers/
│   │   └── DateTimeHelpersTests.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── TestData/
│   │   ├── RequestWithInvalidTimestamp.json
│   │   ├── RequestWithIso8601Timestamp.json
│   │   └── RequestWithUnixTimeTimestamp.json
│   ├── app.config
│   └── packages.config
├── AlexaSkillsKit.sln
├── LICENSE
└── README.md
Download .txt
SYMBOL INDEX (684 symbols across 174 files)

FILE: AlexaSkillsKit.Lib/AsyncHelpers.cs
  class AsyncHelpers (line 10) | public static class AsyncHelpers
    method RunSync (line 16) | public static void RunSync(Func<Task> task) {
    method RunSync (line 43) | public static T RunSync<T>(Func<Task<T>> task) {
    class ExclusiveSynchronizationContext (line 65) | private class ExclusiveSynchronizationContext : SynchronizationContext
      method Send (line 73) | public override void Send(SendOrPostCallback d, object state) {
      method Post (line 77) | public override void Post(SendOrPostCallback d, object state) {
      method EndMessageLoop (line 84) | public void EndMessageLoop() {
      method BeginMessageLoop (line 88) | public void BeginMessageLoop() {
      method CreateCopy (line 109) | public override SynchronizationContext CreateCopy() {

FILE: AlexaSkillsKit.Lib/Authentication/SpeechletRequestSignatureVerifier.cs
  class SpeechletRequestSignatureVerifier (line 19) | public class SpeechletRequestSignatureVerifier
    method VerifyCertificateUrl (line 33) | public static bool VerifyCertificateUrl(string certChainUrl) {
    method VerifyRequestSignature (line 54) | public static bool VerifyRequestSignature(
    method VerifyRequestSignatureAsync (line 79) | public async static Task<bool> VerifyRequestSignatureAsync(
    method RetrieveAndVerifyCertificate (line 104) | public static X509Certificate RetrieveAndVerifyCertificate(string cert...
    method RetrieveAndVerifyCertificateAsync (line 132) | public async static Task<X509Certificate> RetrieveAndVerifyCertificate...
    method CheckRequestSignature (line 162) | public static bool CheckRequestSignature(
    method CheckCertSubjectNames (line 185) | private static bool CheckCertSubjectNames(X509Certificate cert) {

FILE: AlexaSkillsKit.Lib/Authentication/SpeechletRequestTimestampVerifier.cs
  class SpeechletRequestTimestampVerifier (line 9) | public class SpeechletRequestTimestampVerifier
    method VerifyRequestTimestamp (line 14) | public static bool VerifyRequestTimestamp(SpeechletRequestEnvelope req...

FILE: AlexaSkillsKit.Lib/Authentication/SpeechletRequestValidationResult.cs
  type SpeechletRequestValidationResult (line 7) | [Flags]

FILE: AlexaSkillsKit.Lib/Helpers/DateTimeHelpers.cs
  class DateTimeHelpers (line 9) | public class DateTimeHelpers
    method FromAlexaTimestamp (line 11) | public static DateTime FromAlexaTimestamp(JObject requestJson) {
    method FromUnixTimeMilliseconds (line 37) | public static DateTimeOffset FromUnixTimeMilliseconds(string timestamp) {

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioItem.cs
  class AudioItem (line 8) | public class AudioItem

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioItemStream.cs
  class AudioItemStream (line 8) | public class AudioItemStream

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerInterface.cs
  class AudioPlayerInterface (line 8) | public class AudioPlayerInterface : ISpeechletInterface
    method FromJson (line 10) | public static AudioPlayerInterface FromJson(JObject json)

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerPlaybackFailedRequest.cs
  class AudioPlayerPlaybackFailedRequest (line 11) | public class AudioPlayerPlaybackFailedRequest : AudioPlayerRequest
    method AudioPlayerPlaybackFailedRequest (line 13) | public AudioPlayerPlaybackFailedRequest(string subtype, JObject json) ...

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerRequest.cs
  class AudioPlayerRequest (line 11) | public class AudioPlayerRequest : ExtendedSpeechletRequest
    method AudioPlayerRequest (line 15) | public AudioPlayerRequest(string subtype, JObject json) : base(TypeNam...

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerResponse.cs
  class AudioPlayerResponse (line 12) | public class AudioPlayerResponse : ISpeechletResponse

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerState.cs
  class AudioPlayerState (line 9) | public class AudioPlayerState : ISpeechletInterfaceState
    method FromJson (line 11) | public static AudioPlayerState FromJson(JObject json) {
    type PlayerActivityEnum (line 38) | public enum PlayerActivityEnum

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerClearQueueDirective.cs
  class AudioPlayerClearQueueDirective (line 8) | public class AudioPlayerClearQueueDirective : AudioPlayerDirective
    method AudioPlayerClearQueueDirective (line 10) | public AudioPlayerClearQueueDirective() : base("ClearQueue") {
    type ClearBehaviorEnum (line 19) | public enum ClearBehaviorEnum

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerDirective.cs
  class AudioPlayerDirective (line 10) | public class AudioPlayerDirective : Directive
    method AudioPlayerDirective (line 12) | public AudioPlayerDirective(string subtype) : base($"AudioPlayer.{subt...

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerPlayDirective.cs
  class AudioPlayerPlayDirective (line 8) | public class AudioPlayerPlayDirective : AudioPlayerDirective
    method AudioPlayerPlayDirective (line 10) | public AudioPlayerPlayDirective() : base("Play") {
    type PlayBehaviorEnum (line 24) | public enum PlayBehaviorEnum

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerStopDirective.cs
  class AudioPlayerStopDirective (line 8) | public class AudioPlayerStopDirective : AudioPlayerDirective
    method AudioPlayerStopDirective (line 10) | public AudioPlayerStopDirective() : base("Stop") {

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/IAudioPlayerSpeechlet.cs
  type IAudioPlayerSpeechlet (line 7) | public interface IAudioPlayerSpeechlet
    method OnAudioPlayer (line 9) | AudioPlayerResponse OnAudioPlayer(AudioPlayerRequest audioRequest, Con...
    method OnPlaybackController (line 10) | AudioPlayerResponse OnPlaybackController(PlaybackControllerRequest pla...
    method OnSystemExceptionEncountered (line 11) | void OnSystemExceptionEncountered(SystemExceptionEncounteredRequest sy...

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/IAudioPlayerSpeechletAsync.cs
  type IAudioPlayerSpeechletAsync (line 8) | public interface IAudioPlayerSpeechletAsync
    method OnAudioPlayerAsync (line 10) | Task<AudioPlayerResponse> OnAudioPlayerAsync(AudioPlayerRequest audioR...
    method OnPlaybackControllerAsync (line 11) | Task<AudioPlayerResponse> OnPlaybackControllerAsync(PlaybackController...
    method OnSystemExceptionEncounteredAsync (line 12) | Task OnSystemExceptionEncounteredAsync(SystemExceptionEncounteredReque...

FILE: AlexaSkillsKit.Lib/Interfaces/AudioPlayer/PlaybackControllerRequest.cs
  class PlaybackControllerRequest (line 11) | public class PlaybackControllerRequest : ExtendedSpeechletRequest
    method PlaybackControllerRequest (line 15) | public PlaybackControllerRequest(string subtype, JObject json) : base(...

FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogConfirmIntentDirective.cs
  class DialogConfirmIntentDirective (line 8) | public class DialogConfirmIntentDirective : DialogDirective
    method DialogConfirmIntentDirective (line 10) | public DialogConfirmIntentDirective() : base("ConfirmIntent") {

FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogConfirmSlotDirective.cs
  class DialogConfirmSlotDirective (line 8) | public class DialogConfirmSlotDirective : DialogDirective
    method DialogConfirmSlotDirective (line 10) | public DialogConfirmSlotDirective() : base("ConfirmSlot") {

FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogDelegateDirective.cs
  class DialogDelegateDirective (line 8) | public class DialogDelegateDirective : DialogDirective
    method DialogDelegateDirective (line 10) | public DialogDelegateDirective() : base("Delegate") {

FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogDirective.cs
  class DialogDirective (line 11) | public class DialogDirective: Directive
    method DialogDirective (line 13) | public DialogDirective(string subtype) : base($"Dialog.{subtype}") {

FILE: AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogElicitSlotDirective.cs
  class DialogElicitSlotDirective (line 8) | public class DialogElicitSlotDirective : DialogDirective
    method DialogElicitSlotDirective (line 10) | public DialogElicitSlotDirective() : base("ElicitSlot") {

FILE: AlexaSkillsKit.Lib/Interfaces/Display/Directives/DisplayRenderTemplateDirective.cs
  class DisplayRenderTemplateDirective (line 10) | public class DisplayRenderTemplateDirective : Directive
    method DisplayRenderTemplateDirective (line 12) | public DisplayRenderTemplateDirective() : base("Display.RenderTemplate...

FILE: AlexaSkillsKit.Lib/Interfaces/Display/Directives/HintDirective.cs
  class HintDirective (line 10) | public class HintDirective : Directive
    method HintDirective (line 12) | public HintDirective() : base("Hint") {

FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayImage.cs
  class DisplayImage (line 10) | public class DisplayImage

FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayImageSource.cs
  class DisplayImageSource (line 8) | public class DisplayImageSource
    type ImageSizeEnum (line 30) | public enum ImageSizeEnum

FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayInterface.cs
  class DisplayInterface (line 11) | public class DisplayInterface: ISpeechletInterface
    method FromJson (line 16) | public static DisplayInterface FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayRequest.cs
  class DisplayRequest (line 11) | public class DisplayRequest : ExtendedSpeechletRequest
    method DisplayRequest (line 15) | public DisplayRequest(string subtype, JObject json) : base(TypeName, s...

FILE: AlexaSkillsKit.Lib/Interfaces/Display/DisplayTemplate.cs
  class DisplayTemplate (line 10) | public class DisplayTemplate
    type ButtonStateEnum (line 52) | public enum ButtonStateEnum

FILE: AlexaSkillsKit.Lib/Interfaces/Display/IDisplaySpeechlet.cs
  type IDisplaySpeechlet (line 7) | public interface IDisplaySpeechlet
    method OnDisplay (line 9) | SpeechletResponse OnDisplay(DisplayRequest displayRequest, Context con...

FILE: AlexaSkillsKit.Lib/Interfaces/Display/IDisplaySpeechletAsync.cs
  type IDisplaySpeechletAsync (line 8) | public interface IDisplaySpeechletAsync
    method OnDisplayAsync (line 10) | Task<SpeechletResponse> OnDisplayAsync(DisplayRequest displayRequest, ...

FILE: AlexaSkillsKit.Lib/Interfaces/Display/ListItem.cs
  class ListItem (line 8) | public class ListItem

FILE: AlexaSkillsKit.Lib/Interfaces/Display/TextContent.cs
  class TextContent (line 8) | public class TextContent

FILE: AlexaSkillsKit.Lib/Interfaces/Display/TextField.cs
  class TextField (line 8) | public class TextField
    type TextTypeEnum (line 20) | public enum TextTypeEnum

FILE: AlexaSkillsKit.Lib/Interfaces/VideoApp/Directives/VideoAppLaunchDirective.cs
  class VideoAppLaunchDirective (line 10) | public class VideoAppLaunchDirective : Directive
    method VideoAppLaunchDirective (line 12) | public VideoAppLaunchDirective() : base("VideoApp.Launch") {

FILE: AlexaSkillsKit.Lib/Interfaces/VideoApp/VideoItem.cs
  class VideoItem (line 8) | public class VideoItem

FILE: AlexaSkillsKit.Lib/Interfaces/VideoApp/VideoItemMetadata.cs
  class VideoItemMetadata (line 8) | public class VideoItemMetadata

FILE: AlexaSkillsKit.Lib/Json/CamelCasePropertyNamesExceptDictionaryKeysContractResolver.cs
  class CamelCasePropertyNamesExceptDictionaryKeysContractResolver (line 8) | public class CamelCasePropertyNamesExceptDictionaryKeysContractResolver ...
    method CreateDictionaryContract (line 10) | protected override JsonDictionaryContract CreateDictionaryContract(Typ...

FILE: AlexaSkillsKit.Lib/Json/Deserializer.cs
  class Deserializer (line 9) | public class Deserializer<T>
    method RegisterDeserializer (line 13) | public static void RegisterDeserializer(string name, Func<JObject, T> ...
    method FromJson (line 17) | public static T FromJson(JProperty json) {

FILE: AlexaSkillsKit.Lib/Json/SpeechletRequestEnvelope.cs
  class SpeechletRequestEnvelope (line 11) | public class SpeechletRequestEnvelope
    method SpeechletRequestEnvelope (line 15) | static SpeechletRequestEnvelope() {
    method FromJson (line 28) | public static SpeechletRequestEnvelope FromJson(string content) {
    method FromJson (line 43) | public static SpeechletRequestEnvelope FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Json/SpeechletRequestParser.cs
  class SpeechletRequestParser (line 11) | public class SpeechletRequestParser
    method Parse (line 16) | private SpeechletRequest Parse(string type, string subtype, JObject js...
    method Parse (line 22) | public SpeechletRequest Parse(JObject json) {
    method AddInterface (line 39) | public void AddInterface(string name, Func<string, JObject, SpeechletR...

FILE: AlexaSkillsKit.Lib/Json/SpeechletRequestParserExtensions.cs
  class SpeechletRequestParserExtensions (line 9) | public static class SpeechletRequestParserExtensions
    method AddStandard (line 11) | public static void AddStandard(this SpeechletRequestParser parser) {
    method AddSystem (line 25) | public static void AddSystem(this SpeechletRequestParser parser) {
    method AddAudioPlayer (line 35) | public static void AddAudioPlayer(this SpeechletRequestParser parser) {
    method AddPlaybackController (line 46) | public static void AddPlaybackController(this SpeechletRequestParser p...
    method AddDisplay (line 50) | public static void AddDisplay(this SpeechletRequestParser parser) {

FILE: AlexaSkillsKit.Lib/Json/SpeechletResponseEnvelope.cs
  class SpeechletResponseEnvelope (line 9) | public class SpeechletResponseEnvelope
    method ToJson (line 22) | public virtual string ToJson() {

FILE: AlexaSkillsKit.Lib/Sdk.cs
  class Sdk (line 8) | public static class Sdk

FILE: AlexaSkillsKit.Lib/Slu/ConfirmationStatusEnum.cs
  type ConfirmationStatusEnum (line 5) | public enum ConfirmationStatusEnum

FILE: AlexaSkillsKit.Lib/Slu/Intent.cs
  class Intent (line 13) | public class Intent
    method FromJson (line 20) | public static Intent FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Slu/Resolutions.cs
  class Resolutions (line 12) | public class Resolutions
    method FromJson (line 14) | public static Resolutions FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthority.cs
  class ResolutionsPerAuthority (line 9) | public class ResolutionsPerAuthority
    method FromJson (line 11) | public static ResolutionsPerAuthority FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityStatus.cs
  class ResolutionsPerAuthorityStatus (line 7) | public class ResolutionsPerAuthorityStatus
    method FromJson (line 9) | public static ResolutionsPerAuthorityStatus FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityValue.cs
  class ResolutionsPerAuthorityValue (line 7) | public class ResolutionsPerAuthorityValue
    method FromJson (line 9) | public static ResolutionsPerAuthorityValue FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityValueValue.cs
  class ResolutionsPerAuthorityValueValue (line 7) | public class ResolutionsPerAuthorityValueValue
    method FromJson (line 9) | public static ResolutionsPerAuthorityValueValue FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Slu/Slot.cs
  class Slot (line 12) | public class Slot
    method FromJson (line 19) | public static Slot FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Speechlet/Application.cs
  class Application (line 8) | public class Application
    method FromJson (line 15) | public static Application FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Speechlet/Cause.cs
  class Cause (line 10) | public class Cause
    method FromJson (line 12) | public static Cause FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Speechlet/Context.cs
  class Context (line 11) | public class Context
    method FromJson (line 13) | public static Context FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Speechlet/Device.cs
  class Device (line 10) | public class Device
    method FromJson (line 12) | public static Device FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Speechlet/Directive.cs
  class Directive (line 8) | public class Directive
    method Directive (line 10) | public Directive(string type) {

FILE: AlexaSkillsKit.Lib/Speechlet/Error.cs
  class Error (line 12) | public class Error
    method FromJson (line 14) | public static Error FromJson(JObject json) {
    type TypeEnum (line 35) | public enum TypeEnum

FILE: AlexaSkillsKit.Lib/Speechlet/ExtendedSpeechletRequest.cs
  class ExtendedSpeechletRequest (line 12) | public class ExtendedSpeechletRequest : SpeechletRequest
    method ExtendedSpeechletRequest (line 14) | public ExtendedSpeechletRequest(string type, string subtype, JObject j...

FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechlet.cs
  type ISpeechlet (line 7) | [Obsolete("Does not support context object. Implement ISpeechletWithCont...
    method OnIntent (line 10) | SpeechletResponse OnIntent(IntentRequest intentRequest, Session session);
    method OnLaunch (line 11) | SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session session);
    method OnSessionStarted (line 12) | void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Ses...
    method OnSessionEnded (line 13) | void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session s...

FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletAsync.cs
  type ISpeechletAsync (line 8) | [Obsolete("Does not support context object. Implement ISpeechletWithCont...
    method OnIntentAsync (line 11) | Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Ses...
    method OnLaunchAsync (line 12) | Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Ses...
    method OnSessionStartedAsync (line 13) | Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest...
    method OnSessionEndedAsync (line 14) | Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Sess...

FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletBase.cs
  type ISpeechletBase (line 9) | public interface ISpeechletBase
    method OnRequestValidation (line 11) | bool OnRequestValidation(SpeechletRequestValidationResult result, Date...

FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletInterface.cs
  type ISpeechletInterface (line 5) | public interface ISpeechletInterface

FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletInterfaceState.cs
  type ISpeechletInterfaceState (line 5) | public interface ISpeechletInterfaceState

FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletResponse.cs
  type ISpeechletResponse (line 5) | public interface ISpeechletResponse

FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletWithContext.cs
  type ISpeechletWithContext (line 5) | public interface ISpeechletWithContext
    method OnIntent (line 7) | SpeechletResponse OnIntent(IntentRequest intentRequest, Session sessio...
    method OnLaunch (line 8) | SpeechletResponse OnLaunch(LaunchRequest launchRequest, Session sessio...
    method OnSessionStarted (line 9) | void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Ses...
    method OnSessionEnded (line 10) | void OnSessionEnded(SessionEndedRequest sessionEndedRequest, Session s...

FILE: AlexaSkillsKit.Lib/Speechlet/ISpeechletWithContextAsync.cs
  type ISpeechletWithContextAsync (line 7) | public interface ISpeechletWithContextAsync
    method OnIntentAsync (line 9) | Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Ses...
    method OnLaunchAsync (line 10) | Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launchRequest, Ses...
    method OnSessionStartedAsync (line 11) | Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest...
    method OnSessionEndedAsync (line 12) | Task OnSessionEndedAsync(SessionEndedRequest sessionEndedRequest, Sess...

FILE: AlexaSkillsKit.Lib/Speechlet/IntentRequest.cs
  class IntentRequest (line 9) | public class IntentRequest : SpeechletRequest
    method IntentRequest (line 11) | public IntentRequest(JObject json) : base(json) {
    type DialogStateEnum (line 29) | public enum DialogStateEnum

FILE: AlexaSkillsKit.Lib/Speechlet/LaunchRequest.cs
  class LaunchRequest (line 7) | public class LaunchRequest : SpeechletRequest
    method LaunchRequest (line 9) | public LaunchRequest(JObject json) : base(json) {

FILE: AlexaSkillsKit.Lib/Speechlet/Person.cs
  class Person (line 8) | public class Person
    method FromJson (line 15) | public static Person FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Speechlet/PlaybackState.cs
  class PlaybackState (line 11) | public class PlaybackState
    method FromJson (line 13) | public static PlaybackState FromJson(JObject json) {
    type PlayerActivityEnum (line 40) | public enum PlayerActivityEnum

FILE: AlexaSkillsKit.Lib/Speechlet/Session.cs
  class Session (line 9) | public class Session
    method FromJson (line 19) | public static Session FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Speechlet/SessionEndedRequest.cs
  class SessionEndedRequest (line 8) | public class SessionEndedRequest : SpeechletRequest
    method SessionEndedRequest (line 10) | public SessionEndedRequest(JObject json) : base(json) {
    type ReasonEnum (line 28) | public enum ReasonEnum

FILE: AlexaSkillsKit.Lib/Speechlet/SessionStartedRequest.cs
  class SessionStartedRequest (line 5) | public class SessionStartedRequest : SpeechletRequest
    method SessionStartedRequest (line 7) | public SessionStartedRequest(SpeechletRequest other) : base(other) {

FILE: AlexaSkillsKit.Lib/Speechlet/Speechlet.cs
  class Speechlet (line 7) | [Obsolete("Does not support context object. Derive from SpeechletBase in...
    method OnIntent (line 10) | public abstract SpeechletResponse OnIntent(IntentRequest intentRequest...
    method OnLaunch (line 11) | public abstract SpeechletResponse OnLaunch(LaunchRequest launchRequest...
    method OnSessionStarted (line 12) | public abstract void OnSessionStarted(SessionStartedRequest sessionSta...
    method OnSessionEnded (line 13) | public abstract void OnSessionEnded(SessionEndedRequest sessionEndedRe...

FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletAsync.cs
  class SpeechletAsync (line 8) | [Obsolete("Does not support context object. Derive from SpeechletBase in...
    method OnIntentAsync (line 11) | public abstract Task<SpeechletResponse> OnIntentAsync(IntentRequest in...
    method OnLaunchAsync (line 12) | public abstract Task<SpeechletResponse> OnLaunchAsync(LaunchRequest la...
    method OnSessionEndedAsync (line 13) | public abstract Task OnSessionEndedAsync(SessionEndedRequest sessionEn...
    method OnSessionStartedAsync (line 14) | public abstract Task OnSessionStartedAsync(SessionStartedRequest sessi...

FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletBase.cs
  class SpeechletBase (line 12) | public class SpeechletBase : ISpeechletBase
    method SpeechletBase (line 16) | protected SpeechletBase() {
    method GetResponse (line 26) | public HttpResponseMessage GetResponse(HttpRequestMessage httpRequest) {
    method GetResponseAsync (line 30) | public async Task<HttpResponseMessage> GetResponseAsync(HttpRequestMes...
    method ProcessRequest (line 40) | public string ProcessRequest(string requestContent) {
    method ProcessRequestAsync (line 44) | public async Task<string> ProcessRequestAsync(string requestContent) {
    method ProcessRequest (line 55) | public virtual string ProcessRequest(JObject requestJson) {
    method ProcessRequestAsync (line 59) | public async Task<string> ProcessRequestAsync(JObject requestJson) {
    method OnRequestValidation (line 69) | public virtual bool OnRequestValidation(

FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletException.cs
  class SpeechletException (line 7) | public class SpeechletException : Exception
    method SpeechletException (line 9) | public SpeechletException() : base() {
    method SpeechletException (line 13) | public SpeechletException(string message) : base(message) {
    method SpeechletException (line 17) | public SpeechletException(string message, Exception cause) : base(mess...

FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletRequest.cs
  class SpeechletRequest (line 9) | public abstract class SpeechletRequest
    method SpeechletRequest (line 11) | protected SpeechletRequest(JObject json) {
    method SpeechletRequest (line 17) | protected SpeechletRequest(SpeechletRequest other) {

FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletResponse.cs
  class SpeechletResponse (line 11) | public class SpeechletResponse : ISpeechletResponse
    method SpeechletResponse (line 16) | public SpeechletResponse() {

FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletService.cs
  class SpeechletService (line 18) | public class SpeechletService
    method AddHandler (line 28) | public void AddHandler<T>(string type, Func<T, Context, Task<ISpeechle...
    method SpeechletService (line 33) | public SpeechletService(ISpeechletBase speechlet) {
    method GetResponseAsync (line 68) | public async Task<HttpResponseMessage> GetResponseAsync(HttpRequestMes...
    method GetRequestAsync (line 100) | public async Task<SpeechletRequestEnvelope> GetRequestAsync(string con...
    method ProcessRequestAsync (line 162) | public async Task<SpeechletResponseEnvelope> ProcessRequestAsync(Speec...
    method HandleStandardRequestAsync (line 188) | private async Task<ISpeechletResponse> HandleStandardRequestAsync(
    method HandleExtendedRequestAsync (line 251) | private async Task<ISpeechletResponse> HandleExtendedRequestAsync(Exte...
    method DoSessionManagement (line 259) | private void DoSessionManagement(IntentRequest request, Session sessio...

FILE: AlexaSkillsKit.Lib/Speechlet/SpeechletValidationException.cs
  class SpeechletValidationException (line 8) | public class SpeechletValidationException : SpeechletException
    method SpeechletValidationException (line 12) | public SpeechletValidationException(SpeechletRequestValidationResult v...
    method SpeechletValidationException (line 16) | public SpeechletValidationException(SpeechletRequestValidationResult v...
    method SpeechletValidationException (line 20) | public SpeechletValidationException(SpeechletRequestValidationResult v...

FILE: AlexaSkillsKit.Lib/Speechlet/SupportedInterfaces.cs
  class SupportedInterfaces (line 15) | public class SupportedInterfaces : Dictionary<string, ISpeechletInterface>
    method SupportedInterfaces (line 20) | static SupportedInterfaces() {
    method FromJson (line 25) | public static SupportedInterfaces FromJson(JObject json) {
    method SupportedInterfaces (line 34) | private SupportedInterfaces(IDictionary<string, ISpeechletInterface> d...

FILE: AlexaSkillsKit.Lib/Speechlet/SystemExceptionEncounteredRequest.cs
  class SystemExceptionEncounteredRequest (line 10) | public class SystemExceptionEncounteredRequest : SystemRequest
    method SystemExceptionEncounteredRequest (line 12) | public SystemExceptionEncounteredRequest(string subtype, JObject json)...

FILE: AlexaSkillsKit.Lib/Speechlet/SystemRequest.cs
  class SystemRequest (line 10) | public class SystemRequest : ExtendedSpeechletRequest
    method SystemRequest (line 14) | public SystemRequest(string subtype, JObject json) : base(TypeName, su...

FILE: AlexaSkillsKit.Lib/Speechlet/SystemState.cs
  class SystemState (line 10) | public class SystemState : ISpeechletInterfaceState
    method FromJson (line 12) | public static SystemState FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/Speechlet/User.cs
  class User (line 8) | public class User
    method FromJson (line 15) | public static User FromJson(JObject json) {

FILE: AlexaSkillsKit.Lib/UI/AskForPermissionsConsentCard.cs
  class AskForPermissionsConsentCard (line 10) | public class AskForPermissionsConsentCard : Card

FILE: AlexaSkillsKit.Lib/UI/Card.cs
  class Card (line 7) | public abstract class Card

FILE: AlexaSkillsKit.Lib/UI/Image.cs
  class Image (line 8) | public class Image

FILE: AlexaSkillsKit.Lib/UI/LinkAccountCard.cs
  class LinkAccountCard (line 8) | public class LinkAccountCard : Card

FILE: AlexaSkillsKit.Lib/UI/OutputSpeech.cs
  class OutputSpeech (line 8) | public abstract class OutputSpeech

FILE: AlexaSkillsKit.Lib/UI/PlainTextOutputSpeech.cs
  class PlainTextOutputSpeech (line 5) | public class PlainTextOutputSpeech : OutputSpeech

FILE: AlexaSkillsKit.Lib/UI/Reprompt.cs
  class Reprompt (line 8) | public class Reprompt

FILE: AlexaSkillsKit.Lib/UI/SimpleCard.cs
  class SimpleCard (line 5) | public class SimpleCard : Card

FILE: AlexaSkillsKit.Lib/UI/SsmlOutputSpeech.cs
  class SsmlOutputSpeech (line 8) | public class SsmlOutputSpeech : OutputSpeech

FILE: AlexaSkillsKit.Lib/UI/StandardCard.cs
  class StandardCard (line 5) | public class StandardCard : Card

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/SampleIntent1HandlerTests.cs
  class SampleIntent1HandlerTests (line 11) | [TestClass]
    method SampleIntent1HandlerTests (line 16) | public SampleIntent1HandlerTests() {
    method SampleIntent1HandlerNoValueNew (line 21) | [TestMethod]
    method SampleIntent1HandlerNoValueUnconfirmed (line 33) | [TestMethod]
    method SampleIntent1HandlerHasValueUnconfirmed (line 47) | [TestMethod]
    method SampleIntent1HandlerRejected (line 62) | [TestMethod]
    method SampleIntent1HandlerHasValueConfirmed (line 75) | [TestMethod]

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/SampleIntent2HandlerTests.cs
  class SampleIntent2HandlerTests (line 9) | [TestClass]
    method SampleIntent2HandlerTests (line 14) | public SampleIntent2HandlerTests() {
    method SampleIntent2HandlerNoValueNew (line 19) | [TestMethod]
    method SampleIntent2HandlerNoValueNotNew (line 31) | [TestMethod]
    method SampleIntent2HandlerHasValueNew (line 43) | [TestMethod]
    method SampleIntent2HandlerHasValueNotNew (line 56) | [TestMethod]

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/SampleIntent3HandlerTests.cs
  class SampleIntent3HandlerTests (line 12) | [TestClass]
    method SampleIntent3HandlerTests (line 19) | public SampleIntent3HandlerTests() {
    method SampleIntent3HandlerSlot1HasValue (line 26) | [TestMethod]
    method SampleIntent3HandlerSlot2HasValue (line 41) | [TestMethod]
    method SampleIntent3HandlerSlot3HasValueStarted (line 56) | [TestMethod]
    method SampleIntent3HandlerSlot3HasValueInProgress (line 72) | [TestMethod]
    method SampleIntent3HandlerSlot3HasValueConfirmed (line 87) | [TestMethod]
    method SampleIntent3HandlerSlot3HasValueRejected (line 103) | [TestMethod]
    method SampleIntent3HandlerNoValue (line 119) | [TestMethod]

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc.FunctionalTests/TestsBase.cs
  class TestsBase (line 15) | public class TestsBase
    method TestsBase (line 42) | protected TestsBase() {
    method InitializeApp (line 54) | private SpeechletBase InitializeApp() {
    method BuildRequest (line 63) | protected string BuildRequest(Intent intent, bool isNewSession = true,

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/AlexaHttpTrigger.cs
  class AlexaHttpTrigger (line 9) | public static class AlexaHttpTrigger
    method Run (line 13) | [FunctionName("AlexaHttpTrigger")]

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/DefaultHandler.cs
  class DefaultHandler (line 9) | public class DefaultHandler : IntentHandler
    method DefaultHandler (line 20) | public DefaultHandler(ISpeechletResponseBuilder responseBuilder, ILogH...
    method GetIntAttribute (line 25) | private static int GetIntAttribute(Session session, string key, int de...
    method SetIntAttribute (line 32) | private static void SetIntAttribute(Session session, string key, int v...
    method HandleIntentAsync (line 36) | public async override Task<ISpeechletResponseBuilder> HandleIntentAsyn...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/IIntentHandler.cs
  type IIntentHandler (line 6) | public interface IIntentHandler
    method OnIntentAsync (line 8) | Task<SpeechletResponse> OnIntentAsync(IntentRequest intentRequest, Ses...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/IntentHandler.cs
  class IntentHandler (line 9) | public abstract class IntentHandler : IIntentHandler
    method IntentHandler (line 14) | public IntentHandler(ISpeechletResponseBuilder responseBuilder, ILogHe...
    method OnIntentAsync (line 20) | public async Task<SpeechletResponse> OnIntentAsync(IntentRequest inten...
    method HandleIntentAsync (line 25) | public abstract Task<ISpeechletResponseBuilder> HandleIntentAsync(Inte...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/SampleIntent1Handler.cs
  class SampleIntent1Handler (line 10) | public class SampleIntent1Handler : IntentHandler
    method SampleIntent1Handler (line 12) | public SampleIntent1Handler(ISpeechletResponseBuilder responseBuilder,...
    method HandleIntentAsync (line 17) | public async override Task<ISpeechletResponseBuilder> HandleIntentAsyn...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/SampleIntent2Handler.cs
  class SampleIntent2Handler (line 10) | public class SampleIntent2Handler : DefaultHandler
    method SampleIntent2Handler (line 12) | public SampleIntent2Handler(ISpeechletResponseBuilder responseBuilder,...
    method HandleIntentAsync (line 17) | public async override Task<ISpeechletResponseBuilder> HandleIntentAsyn...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Handlers/SampleIntent3Handler.cs
  class SampleIntent3Handler (line 10) | public class SampleIntent3Handler : IntentHandler
    method SampleIntent3Handler (line 12) | public SampleIntent3Handler(ISpeechletResponseBuilder responseBuilder,...
    method HandleIntentAsync (line 17) | public async override Task<ISpeechletResponseBuilder> HandleIntentAsyn...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/Builder/ISpeechletResponseBuilder.cs
  type ISpeechletResponseBuilder (line 6) | public interface ISpeechletResponseBuilder
    method Build (line 8) | SpeechletResponse Build();
    method KeepSession (line 9) | ISpeechletResponseBuilder KeepSession();
    method NoSession (line 10) | ISpeechletResponseBuilder NoSession();
    method Say (line 11) | ISpeechletResponseBuilder Say(OutputSpeech outputSpeech);
    method Say (line 12) | ISpeechletResponseBuilder Say(string text);
    method SaySsml (line 13) | ISpeechletResponseBuilder SaySsml(string ssml);
    method WithCard (line 14) | ISpeechletResponseBuilder WithCard(Card card);
    method WithDirective (line 15) | ISpeechletResponseBuilder WithDirective(Directive directive);

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/Builder/SpeechletResponseBuilder.cs
  class SpeechletResponseBuilder (line 7) | public class SpeechletResponseBuilder : ISpeechletResponseBuilder
    method Build (line 12) | public SpeechletResponse Build() {
    method KeepSession (line 19) | public ISpeechletResponseBuilder KeepSession() {
    method NoSession (line 24) | public ISpeechletResponseBuilder NoSession() {
    method Say (line 29) | public ISpeechletResponseBuilder Say(OutputSpeech outputSpeech) {
    method Say (line 34) | public ISpeechletResponseBuilder Say(string text) {
    method SaySsml (line 38) | public ISpeechletResponseBuilder SaySsml(string ssml) {
    method WithCard (line 42) | public ISpeechletResponseBuilder WithCard(Card card) {
    method WithDirective (line 47) | public ISpeechletResponseBuilder WithDirective(Directive directive) {

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/Builder/SpeechletResponseBuilderCardExtentions.cs
  class SpeechletResponseBuilderCardExtentions (line 6) | public static class SpeechletResponseBuilderCardExtentions
    method WithSimpleCard (line 8) | public static ISpeechletResponseBuilder WithSimpleCard(this ISpeechlet...
    method WithStandardCard (line 16) | public static ISpeechletResponseBuilder WithStandardCard(this ISpeechl...
    method WithLinkAccountCard (line 25) | public static ISpeechletResponseBuilder WithLinkAccountCard(this ISpee...
    method WithAskForPermissionsConsentCard (line 29) | public static ISpeechletResponseBuilder WithAskForPermissionsConsentCa...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/Builder/SpeechletResponseBuilderDialogExtentions.cs
  class SpeechletResponseBuilderDialogExtentions (line 7) | public static class SpeechletResponseBuilderDialogExtentions
    method WithDialogDirective (line 9) | private static ISpeechletResponseBuilder WithDialogDirective<T>(this I...
    method DialogDelegate (line 17) | public static ISpeechletResponseBuilder DialogDelegate(this ISpeechlet...
    method DialogElicitSlot (line 21) | public static ISpeechletResponseBuilder DialogElicitSlot(this ISpeechl...
    method DialogConfirmSlot (line 28) | public static ISpeechletResponseBuilder DialogConfirmSlot(this ISpeech...
    method DialogConfirmIntent (line 35) | public static ISpeechletResponseBuilder DialogConfirmIntent(this ISpee...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/DialogHelper.cs
  class DialogHelper (line 5) | public static class DialogHelper
    method ToBool (line 7) | public static bool? ToBool(this ConfirmationStatusEnum confirmationSta...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/IntentNames.cs
  class IntentNames (line 3) | public static class IntentNames

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/Helpers/SlotNames.cs
  class SlotNames (line 3) | public static class SlotNames

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/SampleSkill.cs
  class SampleSkill (line 11) | public class SampleSkill : SpeechletBase, ISpeechletWithContextAsync, IA...
    method SampleSkill (line 17) | public SampleSkill(ILogHelper logHelper)
    method Register (line 23) | public void Register(string intent, IIntentHandler handler)
    method RegisterDefault (line 28) | public void RegisterDefault(IIntentHandler handler)
    method OnIntentAsync (line 33) | public async Task<SpeechletResponse> OnIntentAsync(IntentRequest inten...
    method OnLaunchAsync (line 39) | public async Task<SpeechletResponse> OnLaunchAsync(LaunchRequest launc...
    method OnSessionStartedAsync (line 45) | public async Task OnSessionStartedAsync(SessionStartedRequest sessionS...
    method OnSessionEndedAsync (line 50) | public async Task OnSessionEndedAsync(SessionEndedRequest sessionEnded...
    method OnSystemExceptionEncounteredAsync (line 65) | public async Task OnSystemExceptionEncounteredAsync(SystemExceptionEnc...
    method OnAudioPlayerAsync (line 69) | public Task<AudioPlayerResponse> OnAudioPlayerAsync(AudioPlayerRequest...
    method OnPlaybackControllerAsync (line 73) | public Task<AudioPlayerResponse> OnPlaybackControllerAsync(PlaybackCon...

FILE: AlexaSkillsKit.Sample.Dialog.AzureFunc/SampleSkillFactory.cs
  class SampleSkillFactory (line 10) | public class SampleSkillFactory
    method CreateLogHelper (line 12) | public ILogHelper CreateLogHelper(TraceWriter log) {
    method CreateSpeechletApp (line 16) | public SpeechletBase CreateSpeechletApp(ILogHelper logHelper)

FILE: AlexaSkillsKit.Sample/App_Start/BundleConfig.cs
  class BundleConfig (line 6) | public class BundleConfig
    method RegisterBundles (line 9) | public static void RegisterBundles(BundleCollection bundles) {

FILE: AlexaSkillsKit.Sample/App_Start/FilterConfig.cs
  class FilterConfig (line 6) | public class FilterConfig
    method RegisterGlobalFilters (line 8) | public static void RegisterGlobalFilters(GlobalFilterCollection filter...

FILE: AlexaSkillsKit.Sample/App_Start/IdentityConfig.cs
  class ApplicationUserManager (line 12) | public class ApplicationUserManager : UserManager<ApplicationUser>
    method ApplicationUserManager (line 14) | public ApplicationUserManager(IUserStore<ApplicationUser> store)
    method Create (line 19) | public static ApplicationUserManager Create(IdentityFactoryOptions<App...

FILE: AlexaSkillsKit.Sample/App_Start/RouteConfig.cs
  class RouteConfig (line 10) | public class RouteConfig
    method RegisterRoutes (line 12) | public static void RegisterRoutes(RouteCollection routes) {

FILE: AlexaSkillsKit.Sample/App_Start/Startup.Auth.cs
  class Startup (line 16) | public partial class Startup
    method ConfigureAuth (line 23) | public void ConfigureAuth(IAppBuilder app)

FILE: AlexaSkillsKit.Sample/App_Start/WebApiConfig.cs
  class WebApiConfig (line 11) | public static class WebApiConfig
    method Register (line 13) | public static void Register(HttpConfiguration config)

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ApiDescriptionExtensions.cs
  class ApiDescriptionExtensions (line 8) | public static class ApiDescriptionExtensions
    method GetFriendlyId (line 15) | public static string GetFriendlyId(this ApiDescription description)

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/App_Start/HelpPageConfig.cs
  class HelpPageConfig (line 26) | public static class HelpPageConfig
    method Register (line 28) | [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass litera...
    method GeneratePageResult (line 84) | private static object GeneratePageResult(HelpPageSampleGenerator sampl...

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/Controllers/HelpController.cs
  class HelpController (line 12) | public class HelpController : Controller
    method HelpController (line 16) | public HelpController()
    method HelpController (line 21) | public HelpController(HttpConfiguration config)
    method Index (line 28) | public ActionResult Index()
    method Api (line 34) | public ActionResult Api(string apiId)
    method ResourceModel (line 48) | public ActionResult ResourceModel(string modelName)

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/HelpPageAreaRegistration.cs
  class HelpPageAreaRegistration (line 6) | public class HelpPageAreaRegistration : AreaRegistration
    method RegisterArea (line 16) | public override void RegisterArea(AreaRegistrationContext context)

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/HelpPageConfigurationExtensions.cs
  class HelpPageConfigurationExtensions (line 19) | public static class HelpPageConfigurationExtensions
    method SetDocumentationProvider (line 28) | public static void SetDocumentationProvider(this HttpConfiguration con...
    method SetSampleObjects (line 38) | public static void SetSampleObjects(this HttpConfiguration config, IDi...
    method SetSampleRequest (line 51) | public static void SetSampleRequest(this HttpConfiguration config, obj...
    method SetSampleRequest (line 65) | public static void SetSampleRequest(this HttpConfiguration config, obj...
    method SetSampleResponse (line 78) | public static void SetSampleResponse(this HttpConfiguration config, ob...
    method SetSampleResponse (line 92) | public static void SetSampleResponse(this HttpConfiguration config, ob...
    method SetSampleForMediaType (line 103) | public static void SetSampleForMediaType(this HttpConfiguration config...
    method SetSampleForType (line 115) | public static void SetSampleForType(this HttpConfiguration config, obj...
    method SetActualRequestType (line 128) | public static void SetActualRequestType(this HttpConfiguration config,...
    method SetActualRequestType (line 142) | public static void SetActualRequestType(this HttpConfiguration config,...
    method SetActualResponseType (line 155) | public static void SetActualResponseType(this HttpConfiguration config...
    method SetActualResponseType (line 169) | public static void SetActualResponseType(this HttpConfiguration config...
    method GetHelpPageSampleGenerator (line 179) | public static HelpPageSampleGenerator GetHelpPageSampleGenerator(this ...
    method SetHelpPageSampleGenerator (line 191) | public static void SetHelpPageSampleGenerator(this HttpConfiguration c...
    method GetModelDescriptionGenerator (line 204) | public static ModelDescriptionGenerator GetModelDescriptionGenerator(t...
    method GetHelpPageApiModel (line 219) | public static HelpPageApiModel GetHelpPageApiModel(this HttpConfigurat...
    method GenerateApiModel (line 237) | private static HelpPageApiModel GenerateApiModel(ApiDescription apiDes...
    method GenerateUriParameters (line 254) | private static void GenerateUriParameters(HelpPageApiModel apiModel, M...
    method IsBindableWithTypeConverter (line 330) | private static bool IsBindableWithTypeConverter(Type parameterType)
    method AddParameterDescription (line 340) | private static ParameterDescription AddParameterDescription(HelpPageAp...
    method GenerateRequestModelDescription (line 354) | private static void GenerateRequestModelDescription(HelpPageApiModel a...
    method GenerateResourceDescription (line 378) | private static void GenerateResourceDescription(HelpPageApiModel apiMo...
    method GenerateSamples (line 388) | [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptio...
    method TryGetResourceParameter (line 413) | private static bool TryGetResourceParameter(ApiDescription apiDescript...
    method InitializeModelDescriptionGenerator (line 442) | private static ModelDescriptionGenerator InitializeModelDescriptionGen...
    method LogInvalidSampleAsError (line 458) | private static void LogInvalidSampleAsError(HelpPageApiModel apiModel,...

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs
  class CollectionModelDescription (line 3) | public class CollectionModelDescription : ModelDescription

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs
  class ComplexTypeModelDescription (line 5) | public class ComplexTypeModelDescription : ModelDescription
    method ComplexTypeModelDescription (line 7) | public ComplexTypeModelDescription()

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs
  class DictionaryModelDescription (line 3) | public class DictionaryModelDescription : KeyValuePairModelDescription

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs
  class EnumTypeModelDescription (line 6) | public class EnumTypeModelDescription : ModelDescription
    method EnumTypeModelDescription (line 8) | public EnumTypeModelDescription()

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs
  class EnumValueDescription (line 3) | public class EnumValueDescription

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs
  type IModelDocumentationProvider (line 6) | public interface IModelDocumentationProvider
    method GetDocumentation (line 8) | string GetDocumentation(MemberInfo member);
    method GetDocumentation (line 10) | string GetDocumentation(Type type);

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs
  class KeyValuePairModelDescription (line 3) | public class KeyValuePairModelDescription : ModelDescription

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelDescription.cs
  class ModelDescription (line 8) | public abstract class ModelDescription

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs
  class ModelDescriptionGenerator (line 19) | public class ModelDescriptionGenerator
    method ModelDescriptionGenerator (line 89) | public ModelDescriptionGenerator(HttpConfiguration config)
    method GetOrCreateModelDescription (line 110) | public ModelDescription GetOrCreateModelDescription(Type modelType)
    method GetMemberName (line 205) | private static string GetMemberName(MemberInfo member, bool hasDataCon...
    method ShouldDisplayMember (line 225) | private static bool ShouldDisplayMember(MemberInfo member, bool hasDat...
    method CreateDefaultDocumentation (line 252) | private string CreateDefaultDocumentation(Type type)
    method GenerateAnnotations (line 267) | private void GenerateAnnotations(MemberInfo property, ParameterDescrip...
    method GenerateCollectionModelDescription (line 309) | private CollectionModelDescription GenerateCollectionModelDescription(...
    method GenerateComplexTypeModelDescription (line 325) | private ModelDescription GenerateComplexTypeModelDescription(Type mode...
    method GenerateDictionaryModelDescription (line 380) | private DictionaryModelDescription GenerateDictionaryModelDescription(...
    method GenerateEnumTypeModelDescription (line 394) | private EnumTypeModelDescription GenerateEnumTypeModelDescription(Type...
    method GenerateKeyValuePairModelDescription (line 424) | private KeyValuePairModelDescription GenerateKeyValuePairModelDescript...
    method GenerateSimpleTypeModelDescription (line 438) | private ModelDescription GenerateSimpleTypeModelDescription(Type model...

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs
  class ModelNameAttribute (line 8) | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | Attri...
    method ModelNameAttribute (line 11) | public ModelNameAttribute(string name)

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs
  class ModelNameHelper (line 8) | internal static class ModelNameHelper
    method GetModelName (line 11) | public static string GetModelName(Type type)

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs
  class ParameterAnnotation (line 5) | public class ParameterAnnotation

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs
  class ParameterDescription (line 6) | public class ParameterDescription
    method ParameterDescription (line 8) | public ParameterDescription()

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs
  class SimpleTypeModelDescription (line 3) | public class SimpleTypeModelDescription : ModelDescription

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/Models/HelpPageApiModel.cs
  class HelpPageApiModel (line 12) | public class HelpPageApiModel
    method HelpPageApiModel (line 17) | public HelpPageApiModel()
    method GetParameterDescriptions (line 87) | private static IList<ParameterDescription> GetParameterDescriptions(Mo...

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs
  class HelpPageSampleGenerator (line 21) | public class HelpPageSampleGenerator
    method HelpPageSampleGenerator (line 26) | public HelpPageSampleGenerator()
    method GetSampleRequests (line 69) | public IDictionary<MediaTypeHeaderValue, object> GetSampleRequests(Api...
    method GetSampleResponses (line 79) | public IDictionary<MediaTypeHeaderValue, object> GetSampleResponses(Ap...
    method GetSample (line 90) | public virtual IDictionary<MediaTypeHeaderValue, object> GetSample(Api...
    method GetActionSample (line 149) | public virtual object GetActionSample(string controllerName, string ac...
    method GetSampleObject (line 176) | [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptio...
    method ResolveHttpRequestMessageType (line 215) | public virtual Type ResolveHttpRequestMessageType(ApiDescription api)
    method ResolveType (line 233) | [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", Just...
    method WriteSampleObjectUsingFormatter (line 287) | [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptio...
    method UnwrapException (line 357) | internal static Exception UnwrapException(Exception exception)
    method DefaultSampleObjectFactory (line 368) | private static object DefaultSampleObjectFactory(HelpPageSampleGenerat...
    method TryFormatJson (line 375) | [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptio...
    method TryFormatXml (line 390) | [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptio...
    method IsFormatSupported (line 405) | private static bool IsFormatSupported(SampleDirection sampleDirection,...
    method GetAllActionSamples (line 417) | private IEnumerable<KeyValuePair<HelpPageSampleKey, object>> GetAllAct...
    method WrapSampleIfString (line 433) | private static object WrapSampleIfString(object sample)

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs
  class HelpPageSampleKey (line 11) | public class HelpPageSampleKey
    method HelpPageSampleKey (line 17) | public HelpPageSampleKey(MediaTypeHeaderValue mediaType)
    method HelpPageSampleKey (line 35) | public HelpPageSampleKey(MediaTypeHeaderValue mediaType, Type type)
    method HelpPageSampleKey (line 53) | public HelpPageSampleKey(SampleDirection sampleDirection, string contr...
    method HelpPageSampleKey (line 86) | public HelpPageSampleKey(MediaTypeHeaderValue mediaType, SampleDirecti...
    method Equals (line 133) | public override bool Equals(object obj)
    method GetHashCode (line 149) | public override int GetHashCode()

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/ImageSample.cs
  class ImageSample (line 8) | public class ImageSample
    method ImageSample (line 14) | public ImageSample(string src)
    method Equals (line 25) | public override bool Equals(object obj)
    method GetHashCode (line 31) | public override int GetHashCode()
    method ToString (line 36) | public override string ToString()

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/InvalidSample.cs
  class InvalidSample (line 8) | public class InvalidSample
    method InvalidSample (line 10) | public InvalidSample(string errorMessage)
    method Equals (line 21) | public override bool Equals(object obj)
    method GetHashCode (line 27) | public override int GetHashCode()
    method ToString (line 32) | public override string ToString()

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs
  class ObjectGenerator (line 14) | public class ObjectGenerator
    method GenerateObject (line 33) | public object GenerateObject(Type type)
    method GenerateObject (line 38) | [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptio...
    method GenerateGenericType (line 104) | private static object GenerateGenericType(Type type, int collectionSiz...
    method GenerateTuple (line 168) | private static object GenerateTuple(Type type, Dictionary<Type, object...
    method IsTuple (line 187) | private static bool IsTuple(Type genericTypeDefinition)
    method GenerateKeyValuePair (line 199) | private static object GenerateKeyValuePair(Type keyValuePairType, Dict...
    method GenerateArray (line 216) | private static object GenerateArray(Type arrayType, int size, Dictiona...
    method GenerateDictionary (line 237) | private static object GenerateDictionary(Type dictionaryType, int size...
    method GenerateEnum (line 272) | private static object GenerateEnum(Type enumType)
    method GenerateQueryable (line 282) | private static object GenerateQueryable(Type queryableType, int size, ...
    method GenerateCollection (line 309) | private static object GenerateCollection(Type collectionType, int size...
    method GenerateNullable (line 333) | private static object GenerateNullable(Type nullableType, Dictionary<T...
    method GenerateComplexObject (line 340) | private static object GenerateComplexObject(Type type, Dictionary<Type...
    method SetPublicProperties (line 371) | private static void SetPublicProperties(Type type, object obj, Diction...
    method SetPublicFields (line 385) | private static void SetPublicFields(Type type, object obj, Dictionary<...
    class SimpleTypeObjectGenerator (line 396) | private class SimpleTypeObjectGenerator
      method InitializeGenerators (line 401) | [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessive...
      method CanGenerateObject (line 445) | public static bool CanGenerateObject(Type type)
      method GenerateObject (line 450) | public object GenerateObject(Type type)

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/SampleDirection.cs
  type SampleDirection (line 6) | public enum SampleDirection

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/TextSample.cs
  class TextSample (line 8) | public class TextSample
    method TextSample (line 10) | public TextSample(string text)
    method Equals (line 21) | public override bool Equals(object obj)
    method GetHashCode (line 27) | public override int GetHashCode()
    method ToString (line 32) | public override string ToString()

FILE: AlexaSkillsKit.Sample/Areas/HelpPage/XmlDocumentationProvider.cs
  class XmlDocumentationProvider (line 15) | public class XmlDocumentationProvider : IDocumentationProvider, IModelDo...
    method XmlDocumentationProvider (line 28) | public XmlDocumentationProvider(string documentPath)
    method GetDocumentation (line 38) | public string GetDocumentation(HttpControllerDescriptor controllerDesc...
    method GetDocumentation (line 44) | public virtual string GetDocumentation(HttpActionDescriptor actionDesc...
    method GetDocumentation (line 50) | public virtual string GetDocumentation(HttpParameterDescriptor paramet...
    method GetResponseDocumentation (line 70) | public string GetResponseDocumentation(HttpActionDescriptor actionDesc...
    method GetDocumentation (line 76) | public string GetDocumentation(MemberInfo member)
    method GetDocumentation (line 85) | public string GetDocumentation(Type type)
    method GetMethodNode (line 91) | private XPathNavigator GetMethodNode(HttpActionDescriptor actionDescri...
    method GetMemberName (line 103) | private static string GetMemberName(MethodInfo method)
    method GetTagValue (line 116) | private static string GetTagValue(XPathNavigator parentNode, string ta...
    method GetTypeNode (line 130) | private XPathNavigator GetTypeNode(Type type)
    method GetTypeName (line 137) | private static string GetTypeName(Type type)

FILE: AlexaSkillsKit.Sample/Controllers/AccountController.cs
  class AccountController (line 22) | [Authorize]
    method AccountController (line 29) | public AccountController()
    method AccountController (line 33) | public AccountController(ApplicationUserManager userManager,
    method GetUserInfo (line 55) | [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
    method Logout (line 70) | [Route("Logout")]
    method GetManageInfo (line 78) | [Route("ManageInfo")]
    method ChangePassword (line 118) | [Route("ChangePassword")]
    method SetPassword (line 138) | [Route("SetPassword")]
    method AddExternalLogin (line 157) | [Route("AddExternalLogin")]
    method RemoveLogin (line 195) | [Route("RemoveLogin")]
    method GetExternalLogin (line 224) | [OverrideAuthentication]
    method GetExternalLogins (line 281) | [AllowAnonymous]
    method Register (line 322) | [AllowAnonymous]
    method RegisterExternal (line 344) | [OverrideAuthentication]
    method Dispose (line 376) | protected override void Dispose(bool disposing)
    method GetErrorResult (line 394) | private IHttpActionResult GetErrorResult(IdentityResult result)
    class ExternalLoginData (line 423) | private class ExternalLoginData
      method GetClaims (line 429) | public IList<Claim> GetClaims()
      method FromIdentity (line 442) | public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
    class RandomOAuthStateGenerator (line 471) | private static class RandomOAuthStateGenerator
      method Generate (line 475) | public static string Generate(int strengthInBits)

FILE: AlexaSkillsKit.Sample/Controllers/HomeController.cs
  class HomeController (line 9) | public class HomeController : Controller
    method Index (line 11) | public ActionResult Index() {

FILE: AlexaSkillsKit.Sample/Controllers/ValuesController.cs
  class ValuesController (line 10) | [Authorize]
    method Get (line 14) | public IEnumerable<string> Get()
    method Get (line 20) | public string Get(int id)
    method Post (line 26) | public void Post([FromBody]string value)
    method Put (line 31) | public void Put(int id, [FromBody]string value)
    method Delete (line 36) | public void Delete(int id)

FILE: AlexaSkillsKit.Sample/Global.asax.cs
  class WebApiApplication (line 12) | public class WebApiApplication : System.Web.HttpApplication
    method Application_Start (line 14) | protected void Application_Start() {

FILE: AlexaSkillsKit.Sample/Models/AccountBindingModels.cs
  class AddExternalLoginBindingModel (line 9) | public class AddExternalLoginBindingModel
  class ChangePasswordBindingModel (line 16) | public class ChangePasswordBindingModel
  class RegisterBindingModel (line 35) | public class RegisterBindingModel
  class RegisterExternalBindingModel (line 53) | public class RegisterExternalBindingModel
  class RemoveLoginBindingModel (line 60) | public class RemoveLoginBindingModel
  class SetPasswordBindingModel (line 71) | public class SetPasswordBindingModel

FILE: AlexaSkillsKit.Sample/Models/AccountViewModels.cs
  class ExternalLoginViewModel (line 8) | public class ExternalLoginViewModel
  class ManageInfoViewModel (line 17) | public class ManageInfoViewModel
  class UserInfoViewModel (line 28) | public class UserInfoViewModel
  class UserLoginInfoViewModel (line 37) | public class UserLoginInfoViewModel

FILE: AlexaSkillsKit.Sample/Models/IdentityModels.cs
  class ApplicationUser (line 10) | public class ApplicationUser : IdentityUser
    method GenerateUserIdentityAsync (line 12) | public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManage...
  class ApplicationDbContext (line 21) | public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    method ApplicationDbContext (line 23) | public ApplicationDbContext()
    method Create (line 28) | public static ApplicationDbContext Create()

FILE: AlexaSkillsKit.Sample/Providers/ApplicationOAuthProvider.cs
  class ApplicationOAuthProvider (line 16) | public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
    method ApplicationOAuthProvider (line 20) | public ApplicationOAuthProvider(string publicClientId)
    method GrantResourceOwnerCredentials (line 30) | public override async Task GrantResourceOwnerCredentials(OAuthGrantRes...
    method TokenEndpoint (line 53) | public override Task TokenEndpoint(OAuthTokenEndpointContext context)
    method ValidateClientAuthentication (line 63) | public override Task ValidateClientAuthentication(OAuthValidateClientA...
    method ValidateClientRedirectUri (line 74) | public override Task ValidateClientRedirectUri(OAuthValidateClientRedi...
    method CreateProperties (line 89) | public static AuthenticationProperties CreateProperties(string userName)

FILE: AlexaSkillsKit.Sample/Results/ChallengeResult.cs
  class ChallengeResult (line 12) | public class ChallengeResult : IHttpActionResult
    method ChallengeResult (line 14) | public ChallengeResult(string loginProvider, ApiController controller)
    method ExecuteAsync (line 23) | public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancel...

FILE: AlexaSkillsKit.Sample/Scripts/bootstrap.js
  function transitionEnd (line 48) | function transitionEnd() {
  function removeElement (line 133) | function removeElement() {
  function clearMenus (line 779) | function clearMenus() {
  function getParent (line 790) | function getParent($this) {
  function complete (line 1351) | function complete() {
  function ScrollSpy (line 1619) | function ScrollSpy(element, options) {
  function next (line 1820) | function next() {

FILE: AlexaSkillsKit.Sample/Scripts/jquery-1.10.2.js
  function isArraylike (line 997) | function isArraylike( obj ) {
  function Sizzle (line 1197) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 1312) | function createCache() {
  function markFunction (line 1330) | function markFunction( fn ) {
  function assert (line 1339) | function assert( fn ) {
  function addHandle (line 1361) | function addHandle( attrs, handler ) {
  function siblingCheck (line 1376) | function siblingCheck( a, b ) {
  function createInputPseudo (line 1403) | function createInputPseudo( type ) {
  function createButtonPseudo (line 1414) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 1425) | function createPositionalPseudo( fn ) {
  function setFilters (line 2408) | function setFilters() {}
  function tokenize (line 2412) | function tokenize( selector, parseOnly ) {
  function toSelector (line 2479) | function toSelector( tokens ) {
  function addCombinator (line 2489) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2539) | function elementMatcher( matchers ) {
  function condense (line 2553) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2574) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2667) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2722) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function multipleContexts (line 2850) | function multipleContexts( selector, contexts, results ) {
  function select (line 2859) | function select( selector, context, results, seed ) {
  function createOptions (line 2999) | function createOptions( options ) {
  function internalData (line 3582) | function internalData( elem, name, data, pvt /* Internal Use Only */ ){
  function internalRemoveData (line 3671) | function internalRemoveData( elem, name, pvt ) {
  function dataAttr (line 3868) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 3900) | function isEmptyDataObject( obj ) {
  function returnTrue (line 4726) | function returnTrue() {
  function returnFalse (line 4730) | function returnFalse() {
  function safeActiveElement (line 4734) | function safeActiveElement() {
  function sibling (line 5852) | function sibling( cur, dir ) {
  function winnow (line 5970) | function winnow( elements, qualifier, not ) {
  function createSafeFragment (line 5998) | function createSafeFragment( document ) {
  function manipulationTarget (line 6312) | function manipulationTarget( elem, content ) {
  function disableScript (line 6322) | function disableScript( elem ) {
  function restoreScript (line 6326) | function restoreScript( elem ) {
  function setGlobalEval (line 6337) | function setGlobalEval( elems, refElements ) {
  function cloneCopyEvent (line 6345) | function cloneCopyEvent( src, dest ) {
  function fixCloneNodeIssues (line 6373) | function fixCloneNodeIssues( src, dest ) {
  function getAll (line 6466) | function getAll( context, tag ) {
  function fixDefaultChecked (line 6489) | function fixDefaultChecked( elem ) {
  function vendorPropName (line 6831) | function vendorPropName( style, name ) {
  function isHidden (line 6853) | function isHidden( elem, el ) {
  function showHide (line 6860) | function showHide( elements, show ) {
  function setPositiveNumber (line 7189) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 7197) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 7236) | function getWidthOrHeight( elem, name, extra ) {
  function css_defaultDisplay (line 7280) | function css_defaultDisplay( nodeName ) {
  function actualDisplay (line 7312) | function actualDisplay( name, doc ) {
  function buildParams (line 7541) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 7656) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7688) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7715) | function ajaxExtend( target, src ) {
  function done (line 8163) | function done( status, nativeStatusText, responses, headers ) {
  function ajaxHandleResponses (line 8310) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8365) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function createStandardXHR (line 8633) | function createStandardXHR() {
  function createActiveXHR (line 8639) | function createActiveXHR() {
  function createFxNow (line 8885) | function createFxNow() {
  function createTween (line 8892) | function createTween( value, prop, animation ) {
  function Animation (line 8906) | function Animation( elem, properties, options ) {
  function propFilter (line 9010) | function propFilter( props, specialEasing ) {
  function defaultPrefilter (line 9077) | function defaultPrefilter( elem, props, opts ) {
  function Tween (line 9202) | function Tween( elem, options, prop, end, easing ) {
  function genFx (line 9426) | function genFx( type, includeWidth ) {
  function getWindow (line 9722) | function getWindow( elem ) {

FILE: AlexaSkillsKit.Sample/Scripts/jquery.validate-vsdoc.js
  function handle (line 88) | function handle() {
  function delegate (line 377) | function delegate(event) {
  function handler (line 1285) | function handler(e) {

FILE: AlexaSkillsKit.Sample/Scripts/jquery.validate.js
  function handle (line 75) | function handle() {
  function delegate (line 343) | function delegate(event) {

FILE: AlexaSkillsKit.Sample/Scripts/jquery.validate.unobtrusive.js
  function setValidationValues (line 28) | function setValidationValues(options, ruleName, value) {
  function splitAndTrim (line 35) | function splitAndTrim(value) {
  function escapeAttributeValue (line 39) | function escapeAttributeValue(value) {
  function getModelPrefix (line 44) | function getModelPrefix(fieldName) {
  function appendModelPrefix (line 48) | function appendModelPrefix(value, prefix) {
  function onError (line 55) | function onError(error, inputElement) {  // 'this' is the form element
  function onErrors (line 72) | function onErrors(event, validator) {  // 'this' is the form element
  function onSuccess (line 86) | function onSuccess(error) {  // 'this' is the form element
  function onReset (line 101) | function onReset(event) {  // 'this' is the form element
  function validationInfo (line 115) | function validationInfo(form) {

FILE: AlexaSkillsKit.Sample/Scripts/modernizr-2.6.2.js
  function isEventSupported (line 216) | function isEventSupported( eventName, element ) {
  function setCss (line 312) | function setCss( str ) {
  function setCssAll (line 319) | function setCssAll( str1, str2 ) {
  function is (line 326) | function is( obj, type ) {
  function contains (line 333) | function contains( str, substr ) {
  function testProps (line 357) | function testProps( props, prefixed ) {
  function testDOMProps (line 373) | function testDOMProps( props, obj, elem ) {
  function testPropsAll (line 401) | function testPropsAll( prop, prefixed, elem ) {
  function webforms (line 872) | function webforms() {
  function addStyleSheet (line 1090) | function addStyleSheet(ownerDocument, cssText) {
  function getElements (line 1103) | function getElements() {
  function getExpandoData (line 1114) | function getExpandoData(ownerDocument) {
  function createElement (line 1132) | function createElement(nodeName, ownerDocument, data){
  function createDocumentFragment (line 1168) | function createDocumentFragment(ownerDocument, data){
  function shivMethods (line 1192) | function shivMethods(ownerDocument, data) {
  function shivDocument (line 1230) | function shivDocument(ownerDocument) {

FILE: AlexaSkillsKit.Sample/Scripts/respond.js
  function callMedia (line 331) | function callMedia(){

FILE: AlexaSkillsKit.Sample/Speechlet/AlexaController.cs
  class AlexaController (line 8) | public class AlexaController : ApiController
    method SampleSession (line 10) | [Route("alexa/sample-session")]

FILE: AlexaSkillsKit.Sample/Speechlet/SampleSessionSpeechlet.cs
  class SampleSessionSpeechlet (line 16) | public class SampleSessionSpeechlet : SpeechletBase, ISpeechletWithContext
    method OnSessionStarted (line 25) | public void OnSessionStarted(SessionStartedRequest request, Session se...
    method OnLaunch (line 30) | public SpeechletResponse OnLaunch(LaunchRequest request, Session sessi...
    method OnIntent (line 36) | public SpeechletResponse OnIntent(IntentRequest request, Session sessi...
    method OnSessionEnded (line 57) | public void OnSessionEnded(SessionEndedRequest request, Session sessio...
    method GetWelcomeResponse (line 67) | private SpeechletResponse GetWelcomeResponse() {
    method SetNameInSessionAndSayHello (line 86) | private SpeechletResponse SetNameInSessionAndSayHello(Intent intent, S...
    method GetNameFromSessionAndSayHello (line 120) | private SpeechletResponse GetNameFromSessionAndSayHello(Intent intent,...
    method BuildSpeechletResponse (line 152) | private SpeechletResponse BuildSpeechletResponse(string title, string ...
    method BuildEchoShowVideoAppResponse (line 238) | private Directive BuildEchoShowVideoAppResponse(string title, string s...

FILE: AlexaSkillsKit.Sample/Startup.cs
  class Startup (line 11) | public partial class Startup
    method Configuration (line 13) | public void Configuration(IAppBuilder app)

FILE: AlexaSkillsKit.Tests/Authentication/SignatureVerifierTests.cs
  class SignatureVerifierTests (line 10) | public class SignatureVerifierTests
    method VerifyCertificateUrlTest (line 12) | [Fact]

FILE: AlexaSkillsKit.Tests/Helpers/DateTimeHelpersTests.cs
  class DateTimeHelpersTests (line 11) | public class DateTimeHelpersTests
    method RequestWithIso8601TimestampTest (line 13) | [Fact]
    method RequestWithUnixTimeTimestampTest (line 33) | [Fact]
    method RequestWithInvalidTimestampTest (line 53) | [Fact]
Condensed preview — 243 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,457K chars).
[
  {
    "path": ".gitignore",
    "chars": 2923,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
  },
  {
    "path": ".nuget/AlexaSkillsKit.Lib.nuspec",
    "chars": 1660,
    "preview": "<?xml version=\"1.0\"?>\n<package>\n  <metadata>\n    <id>AlexaSkillsKit.NET</id>\n    <version>1.6.0</version>\n    <title>Ale"
  },
  {
    "path": ".nuget/NuGet.Config",
    "chars": 162,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <solution>\n    <add key=\"disableSourceControlIntegration\" valu"
  },
  {
    "path": ".nuget/pack.cmd",
    "chars": 124,
    "preview": "msbuild /property:Configuration=Release ..\\AlexaSkillsKit.Lib\\AlexaSkillsKit.Lib.csproj\nnuget pack AlexaSkillsKit.Lib.nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/AlexaSkillsKit.Lib.csproj",
    "chars": 9273,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "AlexaSkillsKit.Lib/AsyncHelpers.cs",
    "chars": 4082,
    "preview": "// As discussed at http://stackoverflow.com/a/5097066\n\nusing System;\nusing System.Collections.Generic;\nusing System.Thr"
  },
  {
    "path": "AlexaSkillsKit.Lib/Authentication/SpeechletRequestSignatureVerifier.cs",
    "chars": 7908,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Authentication/SpeechletRequestTimestampVerifier.cs",
    "chars": 810,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Authentication/SpeechletRequestValidationResult.cs",
    "chars": 483,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Helpers/DateTimeHelpers.cs",
    "chars": 1992,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioItem.cs",
    "chars": 422,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioItemStream.cs",
    "chars": 694,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerInterface.cs",
    "chars": 466,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerPlaybackFailedRequest.cs",
    "chars": 914,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerRequest.cs",
    "chars": 911,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerResponse.cs",
    "chars": 667,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/AudioPlayerState.cs",
    "chars": 1349,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerClearQueueDirective.cs",
    "chars": 684,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerDirective.cs",
    "chars": 501,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerPlayDirective.cs",
    "chars": 772,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/Directives/AudioPlayerStopDirective.cs",
    "chars": 449,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/IAudioPlayerSpeechlet.cs",
    "chars": 556,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/IAudioPlayerSpeechletAsync.cs",
    "chars": 618,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/AudioPlayer/PlaybackControllerRequest.cs",
    "chars": 633,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogConfirmIntentDirective.cs",
    "chars": 460,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogConfirmSlotDirective.cs",
    "chars": 543,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogDelegateDirective.cs",
    "chars": 440,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogDirective.cs",
    "chars": 592,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Dialog/Directives/DialogElicitSlotDirective.cs",
    "chars": 538,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/Directives/DisplayRenderTemplateDirective.cs",
    "chars": 627,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/Directives/HintDirective.cs",
    "chars": 536,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayImage.cs",
    "chars": 588,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Co"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayImageSource.cs",
    "chars": 850,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayInterface.cs",
    "chars": 1258,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayRequest.cs",
    "chars": 730,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/DisplayTemplate.cs",
    "chars": 1209,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Co"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/IDisplaySpeechlet.cs",
    "chars": 321,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/IDisplaySpeechletAsync.cs",
    "chars": 367,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/ListItem.cs",
    "chars": 607,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/TextContent.cs",
    "chars": 631,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/Display/TextField.cs",
    "chars": 618,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/VideoApp/Directives/VideoAppLaunchDirective.cs",
    "chars": 579,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/VideoApp/VideoItem.cs",
    "chars": 522,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Interfaces/VideoApp/VideoItemMetadata.cs",
    "chars": 518,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/CamelCasePropertyNamesExceptDictionaryKeysContractResolver.cs",
    "chars": 597,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/Deserializer.cs",
    "chars": 751,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/SpeechletRequestEnvelope.cs",
    "chars": 2421,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/SpeechletRequestParser.cs",
    "chars": 1464,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/SpeechletRequestParserExtensions.cs",
    "chars": 2178,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Json/SpeechletResponseEnvelope.cs",
    "chars": 1172,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Co"
  },
  {
    "path": "AlexaSkillsKit.Lib/Properties/AssemblyInfo.cs",
    "chars": 1545,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Re"
  },
  {
    "path": "AlexaSkillsKit.Lib/Sdk.cs",
    "chars": 1100,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ConfirmationStatusEnum.cs",
    "chars": 236,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/Intent.cs",
    "chars": 1467,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Co"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/Resolutions.cs",
    "chars": 951,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthority.cs",
    "chars": 1118,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityStatus.cs",
    "chars": 558,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityValue.cs",
    "chars": 630,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/ResolutionsPerAuthorityValueValue.cs",
    "chars": 697,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Slu/Slot.cs",
    "chars": 1448,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Application.cs",
    "chars": 615,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Cause.cs",
    "chars": 665,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Context.cs",
    "chars": 918,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Device.cs",
    "chars": 877,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Directive.cs",
    "chars": 497,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Error.cs",
    "chars": 1417,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ExtendedSpeechletRequest.cs",
    "chars": 946,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechlet.cs",
    "chars": 654,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletAsync.cs",
    "chars": 726,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletBase.cs",
    "chars": 414,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletInterface.cs",
    "chars": 196,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletInterfaceState.cs",
    "chars": 201,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletResponse.cs",
    "chars": 195,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletWithContext.cs",
    "chars": 610,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/ISpeechletWithContextAsync.cs",
    "chars": 678,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Th"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/IntentRequest.cs",
    "chars": 978,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/LaunchRequest.cs",
    "chars": 302,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Person.cs",
    "chars": 803,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nus"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/PlaybackState.cs",
    "chars": 1392,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Session.cs",
    "chars": 2191,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SessionEndedRequest.cs",
    "chars": 997,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SessionStartedRequest.cs",
    "chars": 300,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/Speechlet.cs",
    "chars": 763,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletAsync.cs",
    "chars": 840,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletBase.cs",
    "chars": 2826,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletException.cs",
    "chars": 460,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletRequest.cs",
    "chars": 955,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletResponse.cs",
    "chars": 1108,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletService.cs",
    "chars": 13477,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SpeechletValidationException.cs",
    "chars": 916,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing AlexaSkil"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SupportedInterfaces.cs",
    "chars": 1397,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Co"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SystemExceptionEncounteredRequest.cs",
    "chars": 818,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SystemRequest.cs",
    "chars": 563,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/SystemState.cs",
    "chars": 1513,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing Newtonsof"
  },
  {
    "path": "AlexaSkillsKit.Lib/Speechlet/User.cs",
    "chars": 741,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/AskForPermissionsConsentCard.cs",
    "chars": 575,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Co"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/Card.cs",
    "chars": 263,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\n\n"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/Image.cs",
    "chars": 401,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/LinkAccountCard.cs",
    "chars": 327,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/OutputSpeech.cs",
    "chars": 301,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/PlainTextOutputSpeech.cs",
    "chars": 593,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/Reprompt.cs",
    "chars": 311,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/SimpleCard.cs",
    "chars": 436,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/SsmlOutputSpeech.cs",
    "chars": 412,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Lib/UI/StandardCard.cs",
    "chars": 519,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nnamespace Alexa"
  },
  {
    "path": "AlexaSkillsKit.Lib/app.config",
    "chars": 418,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-co"
  },
  {
    "path": "AlexaSkillsKit.Lib/packages.config",
    "chars": 341,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"BouncyCastle\" version=\"1.8.1\" targetFramework=\"net45\" "
  },
  {
    "path": "AlexaSkillsKit.Sample/AlexaSkillsKit.Sample.csproj",
    "chars": 21474,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/BundleConfig.cs",
    "chars": 1097,
    "preview": "using System.Web;\nusing System.Web.Optimization;\n\nnamespace Sample\n{\n    public class BundleConfig\n    {\n        // For"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/FilterConfig.cs",
    "chars": 251,
    "preview": "using System.Web;\nusing System.Web.Mvc;\n\nnamespace Sample\n{\n    public class FilterConfig\n    {\n        public static v"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/IdentityConfig.cs",
    "chars": 1774,
    "preview": "using System.Threading.Tasks;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing M"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/RouteConfig.cs",
    "chars": 566,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\nusing System"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/Startup.Auth.cs",
    "chars": 2690,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.Asp"
  },
  {
    "path": "AlexaSkillsKit.Sample/App_Start/WebApiConfig.cs",
    "chars": 904,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Web.Http;\nusing "
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ApiDescriptionExtensions.cs",
    "chars": 1496,
    "preview": "using System;\nusing System.Text;\nusing System.Web;\nusing System.Web.Http.Description;\n\nnamespace Sample.Areas.HelpPage\n{"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/App_Start/HelpPageConfig.cs",
    "chars": 6483,
    "preview": "// Uncomment the following to provide samples for PageResult<T>. Must also add the Microsoft.AspNet.WebApi.OData\n// pack"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Controllers/HelpController.cs",
    "chars": 1877,
    "preview": "using System;\nusing System.Web.Http;\nusing System.Web.Mvc;\nusing Sample.Areas.HelpPage.ModelDescriptions;\nusing Sample.A"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/HelpPage.css",
    "chars": 2311,
    "preview": ".help-page h1,\n.help-page .h1,\n.help-page h2,\n.help-page .h2,\n.help-page h3,\n.help-page .h3,\n#body.help-page,\n.help-page"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/HelpPageAreaRegistration.cs",
    "chars": 664,
    "preview": "using System.Web.Http;\nusing System.Web.Mvc;\n\nnamespace Sample.Areas.HelpPage\n{\n    public class HelpPageAreaRegistratio"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/HelpPageConfigurationExtensions.cs",
    "chars": 24064,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs",
    "chars": 193,
    "preview": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class CollectionModelDescription : ModelDescription\n    {"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs",
    "chars": 380,
    "preview": "using System.Collections.ObjectModel;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class ComplexTypeM"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs",
    "chars": 140,
    "preview": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class DictionaryModelDescription : KeyValuePairModelDescr"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs",
    "chars": 400,
    "preview": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptio"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs",
    "chars": 238,
    "preview": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class EnumValueDescription\n    {\n        public string Do"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs",
    "chars": 251,
    "preview": "using System;\nusing System.Reflection;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public interface IModelD"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs",
    "chars": 265,
    "preview": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class KeyValuePairModelDescription : ModelDescription\n   "
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelDescription.cs",
    "chars": 329,
    "preview": "using System;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    /// <summary>\n    /// Describes a type model.\n   "
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs",
    "chars": 19079,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing Sy"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs",
    "chars": 557,
    "preview": "using System;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    /// <summary>\n    /// Use this attribute to chang"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs",
    "chars": 1435,
    "preview": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Sample.Areas.HelpPage.M"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs",
    "chars": 227,
    "preview": "using System;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class ParameterAnnotation\n    {\n        pu"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs",
    "chars": 537,
    "preview": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace Sample.Areas.HelpPage.ModelDescriptio"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs",
    "chars": 128,
    "preview": "namespace Sample.Areas.HelpPage.ModelDescriptions\n{\n    public class SimpleTypeModelDescription : ModelDescription\n    {"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Models/HelpPageApiModel.cs",
    "chars": 3942,
    "preview": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Net.Http.Headers;\nusing System.Web."
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs",
    "chars": 20956,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs",
    "chars": 6470,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Net.Http.Headers;\n\nnamespace S"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/ImageSample.cs",
    "chars": 1049,
    "preview": "using System;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents an image sample on the help p"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/InvalidSample.cs",
    "chars": 968,
    "preview": "using System;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents an invalid sample on the help"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs",
    "chars": 19488,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing S"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/SampleDirection.cs",
    "chars": 223,
    "preview": "namespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// Indicates whether the sample is used for request or response"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/SampleGeneration/TextSample.cs",
    "chars": 882,
    "preview": "using System;\n\nnamespace Sample.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents a preformatted text sample on"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/Api.cshtml",
    "chars": 638,
    "preview": "@using System.Web.Http\n@using Sample.Areas.HelpPage.Models\n@model HelpPageApiModel\n\n@{\n    var description = Model.ApiDe"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml",
    "chars": 1180,
    "preview": "@using System.Web.Http\n@using System.Web.Http.Controllers\n@using System.Web.Http.Description\n@using Sample.Areas.HelpPag"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml",
    "chars": 194,
    "preview": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model CollectionModelDescription\n@if (Model.ElementDescription is Comple"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml",
    "chars": 131,
    "preview": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model ComplexTypeModelDescription\n@Html.DisplayFor(m => m.Properties, \"P"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml",
    "chars": 390,
    "preview": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model DictionaryModelDescription\nDictionary of @Html.DisplayFor(m => Mod"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml",
    "chars": 669,
    "preview": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model EnumTypeModelDescription\n\n<p>Possible enumeration values:</p>\n\n<ta"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml",
    "chars": 1727,
    "preview": "@using System.Web.Http\n@using System.Web.Http.Description\n@using Sample.Areas.HelpPage.Models\n@using Sample.Areas.HelpPa"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml",
    "chars": 73,
    "preview": "@using Sample.Areas.HelpPage\n@model ImageSample\n\n<img src=\"@Model.Src\" />"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml",
    "chars": 231,
    "preview": "@using Sample.Areas.HelpPage\n@model InvalidSample\n\n@if (HttpContext.Current.IsDebuggingEnabled)\n{\n    <div class=\"warnin"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml",
    "chars": 386,
    "preview": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model KeyValuePairModelDescription\nPair of @Html.DisplayFor(m => Model.K"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml",
    "chars": 931,
    "preview": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model Type\n@{\n    ModelDescription modelDescription = ViewBag.modelDescr"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml",
    "chars": 1638,
    "preview": "@using System.Collections.Generic\n@using System.Collections.ObjectModel\n@using System.Web.Http.Description\n@using System"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml",
    "chars": 899,
    "preview": "@using System.Net.Http.Headers\n@model Dictionary<MediaTypeHeaderValue, object>\n\n@{\n    // Group the samples into a singl"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml",
    "chars": 101,
    "preview": "@using Sample.Areas.HelpPage.ModelDescriptions\n@model SimpleTypeModelDescription\n@Model.Documentation"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml",
    "chars": 88,
    "preview": "@using Sample.Areas.HelpPage\n@model TextSample\n\n<pre class=\"wrapped\">\n@Model.Text\n</pre>"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/Index.cshtml",
    "chars": 1130,
    "preview": "@using System.Web.Http\n@using System.Web.Http.Controllers\n@using System.Web.Http.Description\n@using System.Collections.O"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Help/ResourceModel.cshtml",
    "chars": 577,
    "preview": "@using System.Web.Http\n@using Sample.Areas.HelpPage.ModelDescriptions\n@model ModelDescription\n\n<link type=\"text/css\" hre"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Shared/_Layout.cshtml",
    "chars": 256,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wid"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/Web.config",
    "chars": 1810,
    "preview": "<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"Syst"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/Views/_ViewStart.cshtml",
    "chars": 175,
    "preview": "@{\n    // Change the Layout path below to blend the look and feel of the help page with your existing web pages.\n    Lay"
  },
  {
    "path": "AlexaSkillsKit.Sample/Areas/HelpPage/XmlDocumentationProvider.cs",
    "chars": 7016,
    "preview": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\nusing System.Web.Http.Controllers;"
  },
  {
    "path": "AlexaSkillsKit.Sample/Content/Site.css",
    "chars": 313,
    "preview": "body {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Set padding to keep content from hitting the edges */\n.bo"
  },
  {
    "path": "AlexaSkillsKit.Sample/Content/bootstrap.css",
    "chars": 120502,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of e"
  },
  {
    "path": "AlexaSkillsKit.Sample/Controllers/AccountController.cs",
    "chars": 16212,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Security.Claims;\nusing System.Secur"
  },
  {
    "path": "AlexaSkillsKit.Sample/Controllers/HomeController.cs",
    "chars": 316,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\n\nnamespace S"
  },
  {
    "path": "AlexaSkillsKit.Sample/Controllers/ValuesController.cs",
    "chars": 787,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing Syste"
  },
  {
    "path": "AlexaSkillsKit.Sample/Global.asax",
    "chars": 98,
    "preview": "<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"Sample.WebApiApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Global.asax.cs",
    "chars": 649,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Http;\nusing Syste"
  },
  {
    "path": "AlexaSkillsKit.Sample/Models/AccountBindingModels.cs",
    "chars": 2694,
    "preview": "using System;\nusing System.ComponentModel.DataAnnotations;\nusing Newtonsoft.Json;\n\nnamespace Sample.Models\n{\n    // Mod"
  },
  {
    "path": "AlexaSkillsKit.Sample/Models/AccountViewModels.cs",
    "chars": 961,
    "preview": "using System;\nusing System.Collections.Generic;\n\nnamespace Sample.Models\n{\n    // Models returned by AccountController "
  },
  {
    "path": "AlexaSkillsKit.Sample/Models/IdentityModels.cs",
    "chars": 1224,
    "preview": "using System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Ide"
  },
  {
    "path": "AlexaSkillsKit.Sample/NLog.config",
    "chars": 601,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<nlog xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\"\n      xmlns:xsi=\"http"
  },
  {
    "path": "AlexaSkillsKit.Sample/NLog.xsd",
    "chars": 131807,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema id=\"NLog\" targetNamespace=\"http://www.nlog-project.org/schemas/NLog.x"
  },
  {
    "path": "AlexaSkillsKit.Sample/Project_Readme.html",
    "chars": 5067,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Your ASP.NET application</title>\n    <s"
  },
  {
    "path": "AlexaSkillsKit.Sample/Properties/AssemblyInfo.cs",
    "chars": 1391,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "AlexaSkillsKit.Sample/Providers/ApplicationOAuthProvider.cs",
    "chars": 3427,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Threading"
  },
  {
    "path": "AlexaSkillsKit.Sample/Results/ChallengeResult.cs",
    "chars": 953,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing Syste"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/bootstrap.js",
    "chars": 59250,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of e"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery-1.10.2.intellisense.js",
    "chars": 159731,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of "
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery-1.10.2.js",
    "chars": 273990,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of e"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery.validate-vsdoc.js",
    "chars": 43375,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of "
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery.validate.js",
    "chars": 39742,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of "
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/jquery.validate.unobtrusive.js",
    "chars": 18667,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of e"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/modernizr-2.6.2.js",
    "chars": 51458,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of e"
  },
  {
    "path": "AlexaSkillsKit.Sample/Scripts/respond.js",
    "chars": 10318,
    "preview": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of e"
  },
  {
    "path": "AlexaSkillsKit.Sample/Speechlet/AlexaController.cs",
    "chars": 477,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System.Ne"
  },
  {
    "path": "AlexaSkillsKit.Sample/Speechlet/SampleSessionIntentSchema.json",
    "chars": 235,
    "preview": "{\n  \"intents\": [\n    {\n      \"intent\": \"MyNameIsIntent\",\n      \"slots\": [\n        {\n          \"name\": \"Name\",\n          "
  },
  {
    "path": "AlexaSkillsKit.Sample/Speechlet/SampleSessionSpeechlet.cs",
    "chars": 11026,
    "preview": "// Copyright 2018 Stefan Negritoiu (FreeBusy) and contributors. See LICENSE file for more information.\n\nusing System;\nu"
  },
  {
    "path": "AlexaSkillsKit.Sample/Speechlet/SampleSessionUtterances.txt",
    "chars": 254,
    "preview": "MyNameIsIntent  my name is {john|Name}\nMyNameIsIntent  my name is {sam brown|Name}\nWhatsMyNameIntent whats my name\nWhats"
  },
  {
    "path": "AlexaSkillsKit.Sample/Startup.cs",
    "chars": 321,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Owin;\nusing Owin;\n\n[assembly: OwinSt"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/Home/Index.cshtml",
    "chars": 1423,
    "preview": "<div class=\"jumbotron\">\n    <h1>ASP.NET</h1>\n    <p class=\"lead\">ASP.NET is a free web framework for building great Web"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/Shared/Error.cshtml",
    "chars": 287,
    "preview": "@{\n    Layout = null;\n}\n\n<!DOCTYPE html>\n<html>\n<head>\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <t"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/Shared/_Layout.cshtml",
    "chars": 1504,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n  "
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/Web.config",
    "chars": 1665,
    "preview": "<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"Syst"
  },
  {
    "path": "AlexaSkillsKit.Sample/Views/_ViewStart.cshtml",
    "chars": 52,
    "preview": "@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n"
  },
  {
    "path": "AlexaSkillsKit.Sample/Web.Debug.config",
    "chars": 1239,
    "preview": "<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlin"
  },
  {
    "path": "AlexaSkillsKit.Sample/Web.Release.config",
    "chars": 1299,
    "preview": "<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlin"
  },
  {
    "path": "AlexaSkillsKit.Sample/Web.config",
    "chars": 5321,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please"
  }
]

// ... and 43 more files (download for full content)

About this extraction

This page contains the full source code of the AreYouFreeBusy/AlexaSkillsKit.NET GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 243 files (1.3 MB), approximately 344.1k tokens, and a symbol index with 684 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!